我正在使用dart_pub的flutter_slidable插件,该插件为您提供类型为“ Slidable”的ListView条目。然后,我有一个ListView.builder,它基于不可修改的JSON对象的映射构建那些Slidable。因此,为了能够删除它们,我会在开始时对其进行浅表复制。但是我无法实现的是,当通过SlidableAction'Löschen'onTap处理程序从克隆列表中删除条目时,相应地更新Listview窗口小部件。
我想我在某处需要某种类型的键,但是即使在观看了有关键的颤动视频并在stackoverflow上进行搜索后,经过无休止的尝试后,我仍无法弄清楚。导致可滑动动作不再起作用(条目释放后条目会恢复为初始状态,因此可滑动构件不会保持打开状态)或什么也没有发生,因此没有条目蜂被删除。
也许其他一些特色是我也在插件中使用asyncloader来加载我的条目,但是我想这与问题无关,只是更新状态不同。我知道Listview非常复杂,但是这里没有任何修改。当然,它是有状态小部件的一部分,并在主小部件的build方法中使用。任何无法正常工作的帮助都将非常有用,因为我真的找不到解决方案,无法更新列表的条目以及将其放置在什么位置的键。
Widget getListView(Map<int, Storage> storagesTmp, BuildContext context) {
Map<int, Storage> storages = new Map<int, Storage>.from(storagesTmp);
Stack stack = Stack(children: <Widget>[
Container(
child: ListView.builder(
itemCount: storages.length,
itemBuilder: (context, index) {
return Slidable(
child: Card(
child: ListTile(
title: Text(storages[index].getName),
trailing: Icon(Icons.keyboard_arrow_right),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => StockScreen(),
settings: RouteSettings(arguments: { 'urlfilter': 'storage', 'id': storages[index].getId,'titleSuffix': ' ' + storages[index].getName }),
));
}),
),
actionPane: SlidableDrawerActionPane(),
actionExtentRatio: 0.18,
actions: <Widget>[
IconSlideAction(
caption: 'Editieren',
color: Colors.blue,
icon: Icons.edit,
onTap: () async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => StorageEditScreen(),
settings: RouteSettings(arguments: storages[index]),
));
asyncLoaderState.currentState.reloadState();
}),
IconSlideAction(
caption: 'Löschen',
color: Colors.red,
icon: Icons.delete,
onTap: () async {
if (await confirmDialog(context, "Warnung", "Möchten Sie das Vorratslager mit allen Vorräten wirklich löschen?")) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Verarbeite Daten'),
duration: Duration(seconds: 30)));
await deleteStorage(storages[index], context);
Scaffold.of(context).removeCurrentSnackBar();
asyncLoaderState.currentState.setState(() {storages.remove(index);});
}
},
),
],
);
},
),
),
]);
return stack;
}