【发布时间】:2022-01-16 09:22:48
【问题描述】:
我正在创建一个待办事项列表(某种)应用程序。 我有一个使用 FutureBuilder 的视图,它调用一个函数来从 SQLite 数据库中获取文章并显示为卡片。 我有一个 getx_controller.dart,其中包含可观察的列表:
class Controller extends GetxController {
// this is the list of items
var itemsList = <Item>[].obs;
}
我有一个 items_controller.dart
// function to delete an item based on item id
void deleteItem(id) {
final databaseHelper = DatabaseHelper();
// remove item at item.id position
databaseHelper.deleteItem(tableItems, id);
print('delete item with id $id');
this.loadAllItems();
}
loadAllItems 是一个查询数据库的函数
最后是包含 FutureBuilder 的 list_builder.dart
final itemController = Get.put(ItemsController());
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Item>>(
future: itemController.loadAllItems(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasData) {
print(snapshot.data.toString());
return Obx(() => ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return Slidable(
actionExtentRatio: 0.25,
actionPane: SlidableDrawerActionPane(),
child: _itemCard(index, snapshot.data![index]),
actions: <Widget>[
IconSlideAction(
caption: 'Elimina',
color: Colors.red,
icon: Icons.delete,
onTap: () {
itemController.deleteItem(snapshot.data![index].id);
itemController.loadAllItems();
}),
],
secondaryActions: <Widget>[
IconSlideAction(
caption: 'Modifica',
color: Colors.blue,
icon: Icons.edit,
onTap: () {},
),
],
);
}));
} else {
return Container(
child: Text('Loading'),
);
}
});
// });
}
我的问题是,当我点击“Elimina”(或者我创建一个新项目,相同的过程)时,尽管重新创建了 itemsList(使用 getxController.itemsList = RxList.generate(...)),但 ListBuilder 不会刷新屏幕上的列表并且可以观察到。
【问题讨论】:
-
我不确定你为什么要使用 FutureBuilder 和 observables。
-
@S.M.JAHANGIR 因为这是我在 sqflite 教程中看到的。你有什么推荐的?
标签: flutter flutter-getx flutter-futurebuilder