【问题标题】:Filter and sort records from Hive box in FlutterFlutter 中 Hive 框中的记录过滤和排序
【发布时间】:2021-05-24 00:58:18
【问题描述】:

我使用 Hive 和 Flutter 将联系人存储为字母数字字符串,每个联系人数据都是一个带有时间戳的地图

方框行 =

Key.     => Value  
'abc123' => {'name': 'JK', 'country':'GB', 'timestamp': '568'},
'etergb' => {'name': 'FS', 'country':'DE', 'timestamp': '425'}
'546hfg' => {'name': 'TD', 'country':'GB', 'timestamp': '687'}

现在可以使用 where country=GB 条件过滤这些并按 map.item.timestamp ASC/DESC 对行进行排序

【问题讨论】:

  • 所以该值为 List<Map<String,Map<String,String>>> ?或者顶层只是带有 abc123 之类的键的 Map。你想重新排序什么......地图没有排序。 :)
  • Hive 尚不支持原生排序和过滤。如果你想这样做,你必须自己在代码中手动完成。

标签: flutter dart flutter-hive


【解决方案1】:

过滤器

final hiveBox = Hive.box<Dynamic>('<BOX_NAME>');
List values = hiveBox.values.toList();

filtered = box.values
  .where((object) => object['country'] == 'GB')
  .toList();

排序

filtered.sort((a, b) => a['timestamp'].compareTo(b['timestamp']));

【讨论】:

    【解决方案2】:

    对于过滤,可以使用 For 循环或 Map。

    您可以执行排序。下面是一个例子。

    var items = box.values.toList();
    items.sort((a, b) => a.name.compareTo(b.name));
    
    
    @HiveType(typeId: 0)
    class CategoryModel extends HiveObject {
      @HiveField(0)
      String id;
    
      @HiveField(1)
      String name;
    
      //...
      
      CategoryModel(this.id, this.name);
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-07
      • 2020-11-29
      • 1970-01-01
      • 2021-02-14
      • 2021-01-22
      • 1970-01-01
      相关资源
      最近更新 更多