我有一个这样的拖鞋(a是StatefulWidget):

Draggable(child: a, feedback: a, childWhenDragging: null, data: a)

然而,a有一个GlobalKey,以在小部件被丢弃时保持状态.我的问题是,当您try 拖动时,会抛出duplicate GlobalKey错误(可能是因为childfeedback存在于同一帧上).有没有什么方法可以在没有任何错误的情况下实现这种行为?

可复制示例:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class SFWidget extends StatefulWidget {
  const SFWidget({Key? key}) : super(key: key);
  @override
  State<SFWidget> createState() => SFWidgetState();
}

class SFWidgetState extends State<SFWidget> {
  String str = "str";
  @override
  Widget build(BuildContext context) {
    return Text(str);
  }

  void edit(String newstr) {
    setState(() {
      str = newstr;
    });
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final key = GlobalKey<SFWidgetState>();
  final widget = SFWidget(key: key);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Draggable(
        child: widget,
        feedback: widget,
        data: widget,
        childWhenDragging: null,
      ),
    );
  }
}

推荐答案

问题是,如果childWhenDraggingnull,那么同一个小部件将停留在起始位置.从the official docs开始:

如果childWhenDraggingnull,那么Draggable小部件将始终显示child(因此在拖动过程中,拖动源表示不会更改).

因此,要修复它,只需将childWhenDragging默认为与Container()不同的值.如下所示:

      ...

      body: Draggable(
        child: widget,
        feedback: widget,
        data: widget,
        childWhenDragging: Container(), // <- Here
      ),

      ...

Flutter相关问答推荐

来自FutureProvider的数据只打印两个不同的变量,它们对一个实例只有一次相同的值,为什么?

相同的Flutter 代码库,但Firebase登录适用于Web应用程序,但无法登录iOS应用程序

为什么我的PIN字段在第一次打字时不显示数字?

将图标呈现在Flutter 克牌小工具的角落上

我怎样才能在Ffltter中显示html布局链接?

顶部对齐ListTile的[前导、标题、尾随]小部件

Flutter:我应该使用哪种应用内购买服务?

如何在Flutter中的textField中在可编辑文本和前缀图标之间添加空格?

点击后,将按钮的 colored颜色 禁用/更改一段时间

Flutter如何在容器外创建环形进度条

PreferredSizeWidget类不能用作混合,因为它既不是混合类也不是混合

Flutter - firebase_auth_web 5.4.0 依赖于 intl ^0.17.0 但我必须使用更高版本 (intl ^0.18.0)

Flutter Dart 功能弹出错误的小部件?

graphql_flutter 错误:非抽象类GraphQLWebSocketChannel缺少实现

flutter 中 // 和 /// 有什么区别

如何在图像上点或(图像的一部分)在 flutter 中点击?

Flutter/Dart 返回_Future的实例而不是实际的字符串值

Flutter:制作自定义小部件的最佳做法是什么?

如何防止卡子在底部溢出?

Flutter Web Responsiveness 效率不高