可拖动包含对象与globalkey



我有一个像这样的可拖拽列表(a是一个StatefulWidget):

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

但是,a有一个GlobalKey,以便在小部件被丢弃时保持状态。我的问题是,当您尝试拖动时,抛出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,那么相同的小部件将停留在起始位置。来自官方文档:

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

因此,要修复它,只需将childWhenDragging默认为不像Container()那样做的东西。如下所示:

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

相关内容

  • 没有找到相关文章

最新更新