我正在尝试创建一个可以使用Flutter/Dart重新订购的成分列表。我使用ReorderableListView
和ReorderableDragStartListener
。我可以拖动这些项目,但它们不会重新排序。他们只是回到了原来的地方。数据(成分)来自一个sqlite查询(我使用的是sqflite库)。
这是我的代码:
@override
Widget build(BuildContext context) {
List<Map<String, dynamic>> ingredientsOrderable = List<Map<String, dynamic>>.from(ingredients);
return Scaffold(
body: SafeArea(
child: ReorderableListView(
onReorder: (int oldIndex, int newIndex) {
setState(() {
if (newIndex > oldIndex) {
newIndex -= 1;
}
final ingredient = ingredientsOrderable.removeAt(oldIndex);
ingredientsOrderable.insert(newIndex, ingredient);
});
},
children: ingredientsOrderable.asMap().entries.map((entry) {
final index = entry.key;
final ingredient = entry.value;
return ReorderableDragStartListener(
index: index,
key: Key(ingredient["ID"].toString()),
child: ListTile(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
IngredientDetailPage(widget.db, ingredient["ID"]),
),
);
},
title: Text(ingredient["Name"]),
),
);
}).toList(),
),
),
);
}
2条答案
按热度按时间i34xakig1#
您的列表需要在State中,而不是在build()中。每次页面刷新时(重新排序时必须刷新),都将列表重新初始化为原始顺序。啊!
4si2a6ki2#
算了,我忘了把名单复制回原件。还有其他事情,但基本上就是这样。