【问题标题】:Flutter How to group lists from data in a SQLite database?Flutter 如何从 SQLite 数据库中的数据中对列表进行分组?
【发布时间】:2021-05-23 22:25:08
【问题描述】:

我是新手,我正在使用包 grouped_list 将列表与 SQLite 数据库中的数据进行分组,grouped_list 可以与现有列表一起正常工作,就像在其示例中一样,但是当我用从 SQLite 数据库中检索到的数据替换它时等于列表然后它不起作用,我得到错误:

The following NoSuchMethodError was thrown building GroupedListView<dynamic, String>(dirty, state: _GroupedListViewState<dynamic, String>#c2ba2):
Class 'DrinkDatabase' has no instance method '[]'.
Receiver: Instance of 'DrinkDatabase'
Tried calling: []("drinkGroup")

下面是我的代码。如果您需要更多信息,请告诉我,请帮助,谢谢!

GroupedListView<dynamic, String>(
  shrinkWrap: true,
  elements: homeController.drinkList,
  groupBy: (element) => element['drinkGroup'],
  groupComparator: (value1, value2) => value2.compareTo(value1),
  itemComparator: (item1, item2) =>
      item1['drinkDateTime'].compareTo(item2['drinkDateTime']),
  order: GroupedListOrder.DESC,
  useStickyGroupSeparators: true,
  groupSeparatorBuilder: (String value) =>
      Container(),
  itemBuilder: (c, element) {
    return Container();
  },
)

这就是我声明列表的方式:

List drinkList = List<DrinkDatabase>();

还有类 DrinkDatabase:

class DrinkDatabase {
  int drinkId;
  int drinkVolume;
  String drinkGroup;
  String drinkCategory;
  String drinkDateTime;

  DrinkDatabase({
    this.drinkId,
    this.drinkVolume,
    this.drinkGroup,
    this.drinkCategory,
    this.drinkDateTime,
  });

  Map<String, dynamic> toMap() {
    return {
      "drinkId": drinkId,
      "drinkVolume": drinkVolume,
      "drinkGroup": drinkGroup,
      "drinkCategory": drinkCategory,
      "drinkDateTime": drinkDateTime,
    };
  }

  @override
  String toString() {
    return 'drinkTable('
        '"drinkId": ${this.drinkId}, '
        '"drinkVolume": ${this.drinkVolume}, '
        '"drinkGroup": ${this.drinkGroup}, '
        '"drinkCategory": ${this.drinkCategory}, '
        '"drinkDateTime": ${this.drinkDateTime}, ';
  }
}

【问题讨论】:

    标签: sqlite flutter listview sqflite grouped-list


    【解决方案1】:

    我做了什么,它对我有用

    列表的声明方式

    List drinkList = [];
    

    然后换行

    elements: homeController.drinkList,
    

    elements: drinkList,
    

    从数据库查询结果列表构建列表

    Future<void> getSampleList() async {
        drinkList.clear();
        List<Map<String, dynamic>> result =
            await DrinkDatabaseHelper.instance.queryAll();
        print('result= $result');
        var map = new Map<String, dynamic>();
        for (int i = 0; i < result.length; i++) {
          map['drinkId'] = result[i]['drinkId'].toString();
          map['drinkVolume'] = result[i]['drinkVolume'].toString();
          map['drinkGroup'] = result[i]['drinkGroup'];
          map['drinkCategory'] = result[i]['drinkCategory'];
          map['drinkDateTime'] = result[i]['drinkDateTime'];
          drinkList.add(Map<dynamic, String>.from(map));
        }
    

    在 DrinkDatabaseHelper 中

    Future<List<Map<String, dynamic>>> queryAll() async {
        Database db = await instance.database;
        return await db.query(_tableName);
      }
    

    如果您还有其他问题,请告诉我

    【讨论】:

      猜你喜欢
      • 2019-02-09
      • 1970-01-01
      • 2020-06-12
      • 2021-02-11
      • 2020-01-19
      • 2014-11-04
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      相关资源
      最近更新 更多