拖放List-方法'call'在null上调用

问题描述 投票:0回答:1

我正在尝试使用flutter_list_drag_and_drop 0.1.6制作拖放列表。我已经找到了如何实现它的示例,但是还没有任何具体的内容,其中很多都是试验和错误。无论如何,当我运行应用程序时,它在尝试拖动其中一个MyDraggables列表视图时给出了一个错误。它表示“手势捕获异常”,“处理手势时抛出以下NoSuchMethodError:方法'call'在null上调用,”“Receiver:null”,“尝试调用:调用(实例为'Offset')。

我已经尝试过调试,但找不到确切的崩溃位置。可拖动窗口小部件的反馈正在显示,但仍然停留在原位。

```
       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,
                 ),
               ),
             ),
           );
         }
```

我希望列表磁贴可以拖放到位。然而,唯一发生的事情是,当我开始拖动时,我的反馈出现在列表区块的左上角,然后这个错误立即吐出。此外,“开始拖动”和“拖动已取消”不会打印出来,唯一打印的是“输入项目生成器”。

我欢迎并感谢所有的帮助!

提前致谢!

编辑(Stacktrace)

I/flutter ( 2974): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter ( 2974): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter ( 2974): The method 'call' was called on null.
I/flutter ( 2974): Receiver: null
I/flutter ( 2974): Tried calling: call(Instance of 'Offset')
I/flutter ( 2974):
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
I/flutter ( 2974): #2      new DragAvatar
package:flutter_list_drag_and_drop/my_draggable.dart:498
I/flutter ( 2974): #3      MyDraggableState._startDrag
package:flutter_list_drag_and_drop/my_draggable.dart:328
I/flutter ( 2974): #4      MultiDragGestureRecognizer._startDrag.<anonymous closure> 
package:flutter/…/gestures/multidrag.dart:263
I/flutter ( 2974): #5      GestureRecognizer.invokeCallback 
package:flutter/…/gestures/recognizer.dart:120
I/flutter ( 2974): #6      MultiDragGestureRecognizer._startDrag 
package:flutter/…/gestures/multidrag.dart:263
I/flutter ( 2974): #7      MultiDragGestureRecognizer.acceptGesture.<anonymous closure> 
package:flutter/…/gestures/multidrag.dart:253
I/flutter ( 2974): #8      _ImmediatePointerState.accepted 
package:flutter/…/gestures/multidrag.dart:315
I/flutter ( 2974): #9      MultiDragGestureRecognizer.acceptGesture 
package:flutter/…/gestures/multidrag.dart:253
I/flutter ( 2974): #10     GestureArenaManager._resolveInFavorOf 
package:flutter/…/gestures/arena.dart:263
I/flutter ( 2974): #11     GestureArenaManager._resolve 
package:flutter/…/gestures/arena.dart:222
I/flutter ( 2974): #12     GestureArenaEntry.resolve 
package:flutter/…/gestures/arena.dart:52
I/flutter ( 2974): #13     MultiDragPointerState.resolve 
package:flutter/…/gestures/multidrag.dart:62
I/flutter ( 2974): #14     _ImmediatePointerState.checkForResolutionAfterMove 
package:flutter/…/gestures/multidrag.dart:310
I/flutter ( 2974): #15     MultiDragPointerState._move 
package:flutter/…/gestures/multidrag.dart:81
I/flutter ( 2974): #16     MultiDragGestureRecognizer._handleEvent 
package:flutter/…/gestures/multidrag.dart:227
I/flutter ( 2974): #17     PointerRouter._dispatch 
package:flutter/…/gestures/pointer_router.dart:73
I/flutter ( 2974): #18     PointerRouter.route 
package:flutter/…/gestures/pointer_router.dart:101
I/flutter ( 2974): #19     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent 
package:flutter/…/gestures/binding.dart:214
I/flutter ( 2974): #20     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent 
package:flutter/…/gestures/binding.dart:192
I/flutter ( 2974): #21     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent 
package:flutter/…/gestures/binding.dart:149
I/flutter ( 2974): #22     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue 
I/flutter ( 2974): #23     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket 
package:flutter/…/gestures/binding.dart:85
I/flutter ( 2974): #27     _invoke1 (dart:ui/hooks.dart:223:10)
I/flutter ( 2974): #28     _dispatchPointerDataPacket (dart:ui/hooks.dart:144:5)
I/flutter ( 2974): (elided 3 frames from package dart:async)
I/flutter ( 2974):
I/flutter ( 2974): Handler: onStart
I/flutter ( 2974): Recognizer:
I/flutter ( 2974):   ImmediateMultiDragGestureRecognizer#774eb
dart flutter
1个回答
0
投票

堆栈跟踪说:

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

好的,所以那里发生了空指针异常。我们来看看the code

onMove(globalPosition);

这符合错误消息,即:

I/flutter ( 2974): Tried calling: call(Instance of 'Offset')

所以globalPosition可能是Offset,而onMove必须是一个对象。让我们在代码中搜索onMove应该设置:

DragAvatar({
    @required this.overlayState,
    ...
    this.onMove,

(Qazxswpoi)

(省略一些步骤)似乎是从以下方面获得的:

line 491

(Qazxswpoi)

我没有看到其他地方设置 const MyDraggable({ Key key, @required this.child, @required this.feedback, ... this.onMove 的地方。看起来可能有一个错误,line 101无条件地称为onMoveDragAvatar.updateDrag最初没有标记onMove,或者onMove没有初始化为某些默认值。

无论如何,在构建@required时尝试提供onMove回调。

(或者,也许可以考虑使用官方的onMoveMyDraggable包页甚至指的是。)

© www.soinside.com 2019 - 2024. All rights reserved.