Dart 拖放列表-方法';呼叫';被调用为空
我正在尝试使用Dart 拖放列表-方法';呼叫';被调用为空,dart,flutter,Dart,Flutter,我正在尝试使用flatter\u list\u拖放0.1.6创建一个拖放列表。我已经寻找了如何实现它的例子,但是还没有具体的例子,所以大部分都是反复试验。无论如何,当我运行应用程序时,在尝试拖动列表视图的MyDragTables之一时会出现错误。上面写着“由手势捕获的异常”,“在处理手势时引发了以下NoSuchMethodError:方法'call'被调用为null”,“Receiver:null”,“Tested call:call”(偏移量的实例)) 我已经尝试过调试,但无法找到崩溃的确切位
flatter\u list\u拖放0.1.6
创建一个拖放列表。我已经寻找了如何实现它的例子,但是还没有具体的例子,所以大部分都是反复试验。无论如何,当我运行应用程序时,在尝试拖动列表视图的MyDragTables之一时会出现错误。上面写着“由手势捕获的异常”,“在处理手势时引发了以下NoSuchMethodError:方法'call'被调用为null”,“Receiver:null”,“Tested call:call”(偏移量的实例))
我已经尝试过调试,但无法找到崩溃的确切位置。对于可拖动小部件的反馈正在出现,但仍然保持不变
```
Widget _buildDragDrop(double _screenHeight, double _screenWidth){
return DragAndDropList(_nonDelList.getList(),
canBeDraggedTo: (int i, int j) {
print("drag to");
// _nonDelList.changePos(_nonDelList.getTaskAt(i), j);
return true;
},
itemBuilder: (BuildContext _context, Task _t1) {
print('Entered Item Builder');
return _buildTask(_t1, _screenHeight, _screenWidth);
},
onDragFinish: (int i, int j){
print('Drag finished');
_nonDelList.changePos(_nonDelList.getTaskAt(i), j);
print('Drag finished 2');
},
dragElevation: 1.5,
);
}
Widget _buildTask(Task _t, double _screenHeight, double
_screenWidth){
final bool alreadyCompleted = !(_t.getPressed());
return new MyDraggable(
child: new ListTile(
title: new Text(_t.getEntry()),
trailing: new Icon(
alreadyCompleted ? Icons.check_box :
Icons.check_box_outline_blank,
color: alreadyCompleted ? _t.getColor() : Colors.black,
),
subtitle: new Text(_t.getDescription()),
),
onDragStarted: (){
print('Started Drag');
},
onMyDraggableCanceled: (Velocity v, Offset o){
print('Drag Canceled');
},
feedback: Material(
shape: CircleBorder(),
child: new InkResponse(
child: Container(
width: _screenWidth / 15.0,
height: _screenWidth / 15.0,
color: Colors.red,
),
),
),
);
}
```
我希望列表磁贴能够拖放到位。但是,唯一发生的事情是,当我开始拖动时,我的反馈出现在列表磁贴的左上角,然后这个错误会立即显示出来。此外,“开始拖动”和“拖动取消”不会打印出来,唯一正在打印的是“输入项生成器”
我欢迎并感谢所有的帮助
提前谢谢
编辑(堆栈跟踪)
I/颤振(2974):══╡ 用手势捕捉异常╞═══════════════════════════════════════════════════════════════════
I/flatter(2974):处理手势时抛出以下NoSuchMethodError:
I/flatter(2974):在null上调用了方法“call”。
I/颤振(2974):接收器:空
I/flatter(2974):尝试调用:调用(“偏移量”的实例)
I/颤振(2974):
I/flatter(2974):抛出异常时,这是堆栈:
I/flatter(2974):#0 Object.noSuchMethod(dart:core/runtime/libobject_patch.dart:50:5)
I/颤振(2974):#1 DragAvatar.updateDrag
包装:颤振列表拖放/我的拖动。省道:547
我/弗利特(2974):#2辆新德拉加瓦塔
包装:颤振列表拖放/我的拖动。省道:498
I/颤振(2974):#3 MyDragableState._startDrag
包装:颤振列表拖放/我的拖动。省道:328
I/颤振(2974):#4个多Draggesturererecognizer.#U startDrag。
软件包:颤振/../signatures/multidrag.dart:263
I/flatter(2974):#5个手势识别器.invokeCallback
软件包:flatter/../signatures/recognizer.dart:120
I/颤振(2974):#6个多德拉格结构识别器。#U startDrag
软件包:颤振/../signatures/multidrag.dart:263
I/flatter(2974):#7 MultiDraggesturererecognizer.accept手势。
软件包:颤振/../signatures/multidrag.dart:253
我/弗利特(2974):#8#立即接受州际协议
软件包:颤振/../signatures/multidrag.dart:315
I/颤振(2974):#9 MultiDraggesturererecognizer.accept手势
软件包:颤振/../signatures/multidrag.dart:253
I/颤振(2974):#10个手势是管理者。#
套装:颤振/../signatures/arena.dart:263
我/弗利特(2974):#11个手势是管理者。#
套装:颤振/../signatures/arena.dart:222
I/颤振(2974):#12手势arenaentry.resolve
套装:颤振/../signatures/arena.飞镖:52
I/颤振(2974):#13 MultiDragPointerState.resolve
程序包:颤振/../signatures/multidrag.dart:62
I/颤振(2974):#14#立即跨州。移动后检查解决方案
软件包:颤振/../signatures/multidrag.dart:310
I/颤振(2974):#15多个牵引点状态。#
软件包:颤振/../signatures/multidrag.dart:81
I/颤振(2974):#16多道雷达识别器。#
软件包:颤振/../signatures/multidrag.dart:227
I/颤振(2974):#17点外部。#
包装:颤振/../signatures/pointer\u路由器。省道:73
I/颤振(2974):#18点外部路径
软件包:flatter/../signatures/pointer\u router.dart:101
I/颤振(2974):35; 19#WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent
包裹:颤振/../signatures/binding.dart:214
I/颤振(2974):#20#WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent
软件包:flatter/../signatures/binding.dart:192
I/颤振(2974):21 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent
包装:颤振/../signatures/binding.dart:149
I/颤振(2974):#22#WidgetsFlutterBinding&BindingBase&GestureBinding.#flushPointerEventQueue
I/颤振(2974):#23#WidgetsFlutterBinding&BindingBase&GestureBinding.#HandlePointerData数据包
包装:颤振/../signatures/binding.省道:85
I/flatter(2974):#27 invoke1(省道:ui/hooks.dart:223:10)
I/flatter(2974):#28 dispatchPointerDataPacket(dart:ui/hooks.dart:144:5)
I/颤振(2974):(从包dart中删除3帧:异步)
I/颤振(2974):
I/颤振(2974):处理程序:启动
I/颤振(2974):识别器:
I/颤振(2974):即时多重雷达识别器#774eb
堆栈跟踪显示:
I/flutter ( 2974): When the exception was thrown, this was the stack:
I/flutter ( 2974): #0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter ( 2974): #1 DragAvatar.updateDrag
package:flutter_list_drag_and_drop/my_draggable.dart:547
OK,因此出现了空指针异常。让我们来看一下:
这符合错误消息,即:I/flutter ( 2974): Tried calling: call(Instance of 'Offset')
因此,globalPosition
很可能是一个Offset
,而onMove
必须是一个对象。让我们在应该设置onMove
的代码中搜索:
DragAvatar({
@required this.overlayState,
...
this.onMove,
()
其中(省略一些步骤)似乎是从以下方面获得的:
const MyDraggable({
Key key,
@required this.child,
@required this.feedback,
...
this.onMove
()
我看不到其他地方设置了onMove
。看起来可能有一个bug,DragAvatar.updateDrag
无条件地调用onMove
,onMove
最初没有标记@required
,或者onMove
没有初始化为默认值
无论如何,在构造MyDraggable
时,请尝试提供一个onMove
回调
(或者,也许考虑使用Page页面所指的官方)。
我有这样的感觉,问题在于<代码> MyDrababely。DragAvatar({
@required this.overlayState,
...
this.onMove,
const MyDraggable({
Key key,
@required this.child,
@required this.feedback,
...
this.onMove