我有一个 Flutter 应用程序,它使用 ObjectBox 来存储后端数据,这是一个
Product
对象的列表。我创建了一个 ListView Tile 小部件来显示名为 ProductTile
的数据。我使用以下代码生成一个 ListView 小部件:
class productTileListView extends StatefulWidget {
const productTileListView({Key? key}) : super(key: key);
@override
State<productTileListView> createState() => _productTileListViewState();
}
class _productTileListViewState extends State<productTileListView> {
ProductTile Function(BuildContext, int) _itemBuilder(List<Product> products) {
return (BuildContext context, int index) => ProductTile(product: products[index], setStateCallback: () => { setState(() {}) });
}
@override
Widget build(BuildContext context) {
return StreamBuilder<List<Product>>(
stream: objectbox.getProducts(),
builder: (context, snapshot) {
if (snapshot.data?.isNotEmpty ?? false) {
return ListView.builder(
itemCount: snapshot.hasData ? snapshot.data!.length : 0,
itemBuilder: _itemBuilder(snapshot.data ?? []));
} else {
return const Center(child: Text("No products"));
}
},
);
}
}
这段代码运行完美,并为我提供了一个
ProductTiles
的 ListView,它可视化每个 Product
对象中的数据。但是,我不知道如何循环 ProductTiles
对它们执行操作。例如,它们跟踪当前是否使用 bool 来选择它们,我希望能够实现这样的事情:
productTiles.removeWhere((item) => item.isSelected);
我无法在基本 Product
对象上执行此操作,因为 isSelected
只是 ProductTiles
的一部分。
我想到的一个解决方案是更改我的 ObjectBox 数据库来存储
ProductTiles
,但这似乎不是最优的,因为我会存储一堆 UI 相关参数,例如是否选择图块等,而不是只存储必要的信息。
这似乎是应用程序开发中非常常见的部分,所以请让我知道解决此问题的最佳实践是什么。
您可以使用
list
或 map
来存储选定的产品并将其传递给您的删除方法。
productId
或 index
productId
或index
类似/相关问题:选择和取消选择列表图块