带有自定义对象的Flutter ReorderableListView

时间:2020-06-22 09:37:22

标签: list object flutter listview reorderable-list

我目前在ReorderableListView上遇到一些困难。

我有一个ToDoPrefabs列表,我想输出,因为我的列表不包含字符串,而是其他内容,因此在键和文本的索引中出现错误。

这是错误:

“'To Prefab'类型不是'int'类型的子类型”

我怀疑这是关键。这也是合乎逻辑的,因为todoprefab不是int。有谁知道我如何在我的ReorderableListView中获得另一个int类型的索引

这是我的ReorderableListView

return ReorderableListView(
      onReorder: _onReorder,
      scrollDirection: Axis.vertical,
      padding: const EdgeInsets.symmetric(vertical: 8.0),
      children: [
        for(final item in toDoManagerClass.todoBank)
        todocardprefab(item)
      ]
    );

todocardprefab(不是列表)

todocardprefab(var key){
  return Dismissible(
    key: ValueKey(key),
    background: Container(color: Colors.red, alignment: Alignment.centerLeft, child: Icon(Icons.delete),),
    secondaryBackground: Container(color: Colors.green, alignment: Alignment.centerRight, child: Icon(Icons.archive),),
    child: Card(
      child: ListTile(
        //leading: Icon(Icons.check_box_outline_blank),
        title: Text(toDoManagerClass.todoBank[key].toDoText),
        onTap: (){},
      ),
    ),
  );
}

这是简单的列表。

class ToDoManagerClass{
  List<ToDoPrefab> todoBank = [
    ToDoPrefab(text: 'Homework', f: false),
    ToDoPrefab(text: 'Homework1', f: false),
    ToDoPrefab(text: 'Homework12', f: false),
    ToDoPrefab(text: 'Homework123', f: false),
    ToDoPrefab(text: 'Homework1234', f: false),
    ToDoPrefab(text: 'Homework12345', f: false),
  ];
}

1 个答案:

答案 0 :(得分:1)

此方法应该有效:

您可信赖的列表视图

return ReorderableListView(
      onReorder: _onReorder,
      scrollDirection: Axis.vertical,
      padding: const EdgeInsets.symmetric(vertical: 8.0),
      children: [
        for(final item in toDoManagerClass.todoBank)
        todocardprefab(item, index())
      ]
    );

,这里是函数。每次通话都会返回更高的数字。

int index(){
    if(i < toDoManagerClass.todoBank.length){
      print(i);
      i++;
    }
    return i-1;
  }

现在您只需要使用索引而不是待办事项卡中的项目