如何循环遍历从ObjectBox数据库生成的Flutter ListView图块?

问题描述 投票:0回答:1

我有一个 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 相关参数,例如是否选择图块等,而不是只存储必要的信息。

这似乎是应用程序开发中非常常见的部分,所以请让我知道解决此问题的最佳实践是什么。

flutter dart flutter-listview flutter-objectbox
1个回答
0
投票

您可以使用

list
map
来存储选定的产品并将其传递给您的删除方法。

  • 列表元素可以是
    productId
    index
  • 您也可以使用地图
    • 键:
      productId
      index
    • 值:bool(默认设置为 false)

类似/相关问题:选择和取消选择列表图块

© www.soinside.com 2019 - 2024. All rights reserved.