Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振ReorderableListView中的onReorder()参数_Flutter_Dart_Reorderable List - Fatal编程技术网

Flutter 颤振ReorderableListView中的onReorder()参数

Flutter 颤振ReorderableListView中的onReorder()参数,flutter,dart,reorderable-list,Flutter,Dart,Reorderable List,我尝试使用ReorderableListView小部件在Flatter中创建一个可重新排序列表: return ReorderableListView( onReorder: (int index, int targetPosition) { print(index.toString() + " -> " + targetPosition.toString()); } ... 我无法找到onReorder中两个参数的确切解释。我找到了一

我尝试使用ReorderableListView小部件在Flatter中创建一个可重新排序列表:

return ReorderableListView(
    onReorder: (int index, int targetPosition) {
        print(index.toString() + " -> " + targetPosition.toString());
    }
...
我无法找到onReorder中两个参数的确切解释。我找到了一些“oldIndex”、“newIndex”的员工,但这看起来并不正确

我已经构建了一个包含三项的列表的示例。当我拖动这些项目时,会得到以下结果(让我感到困惑):

对我来说,它看起来像是指数和位置的混合体


也许有人知道我的错误是什么?

根据有关的文档,将
oldIndex
newIndex
传递给回调函数。 甚至还提供了一个示例,说明如何使用回调对
列表中的项目进行实际排序

final List<MyDataObject> backingList = <MyDataObject>[/* ... */];

void handleReorder(int oldIndex, int newIndex) {
  if (oldIndex < newIndex) {
    // removing the item at oldIndex will shorten the list by 1.
    newIndex -= 1;
  }
  final MyDataObject element = backingList.removeAt(oldIndex);
  backingList.insert(newIndex, element);
}
final List backingList=[/*…*/];
无效handleReorder(int-oldIndex,int-newIndex){
如果(旧索引<新索引){
//删除oldIndex中的项目将使列表缩短1。
newIndex-=1;
}
最终MyDataObject元素=backingList.removeAt(oldIndex);
backingList.insert(newIndex,element);
}

这是新旧索引,但也有问题。正如你所看到的,这方面还有一些悬而未决的问题

下面的示例演示了如何使用它们:

onReorder: (oldIndex, newIndex) {
  setState(() {
    // These two lines are workarounds for ReorderableListView problems
    if (newIndex > _sampleItems.length) newIndex = _sampleItems.length;
    if (oldIndex < newIndex) newIndex--;

    MyItem item = _sampleItems[oldIndex];
    _sampleItems.remove(item);
    _sampleItems.insert(newIndex, item);
  });
},
onReorder:(旧索引,新索引){
设置状态(){
//这两行是ReorderableListView问题的解决方法
如果(newIndex>\u sampleItems.length)newIndex=\u sampleItems.length;
如果(旧索引<新索引)新索引--;
MyItem item=_sampleItems[oldIndex];
_取样项目。移除(项目);
_插入(newIndex,item);
});
},
你可以看到一个演示


根据我的经验(2019/1月),我放弃了颤振的ReorderableListView,开始使用。我甚至做了一个测试,看看它是否对您有意义。

大多数教程中的onReorder函数都写错了。我觉得我刚刚写的这篇文章很有效

void _onReorder(int oldIndex, int newIndex) {
    setState(() {
      newIndex > oldIndex ? (){newIndex--; int row = V755.removeAt(oldIndex);
      V755.insert(newIndex, row);}() : (){int row = V755.removeAt(oldIndex);V755.insert(newIndex, row);}();
    });
}

可以在可重新订购列表视图中实现refreshindicator吗?
refreshindicator
应该与任何可滚动的
小部件一起使用,所以是的,您应该能够将可重新排序列表视图包装在
RefreshIndicator
中。感谢您的回复,我尝试使用
RefreshIndicator
将可重新排序列表视图包装在
RefreshIndicator
中,它正在工作,但当列表没有滚动的最低数据时,
RefreshIndicator
没有刷新我的可重新排序列表。V755是一个列表,顺便说一句,对不起
void _onReorder(int oldIndex, int newIndex) {
    setState(() {
      newIndex > oldIndex ? (){newIndex--; int row = V755.removeAt(oldIndex);
      V755.insert(newIndex, row);}() : (){int row = V755.removeAt(oldIndex);V755.insert(newIndex, row);}();
    });
}