Flutter Search 可迭代的 Where

Posted

技术标签:

【中文标题】Flutter Search 可迭代的 Where【英文标题】:Flutter Search Iterable Where 【发布时间】:2021-03-14 06:14:03 【问题描述】:

我的 json 数据

 [      
             
                "receive_brutto" : 10,
                "data" : [
                    
                        "id_trx_procurement" : 1,
                        "item_group_id" : 3135,
                        "item_group_proc" : 
                            "name_group" : "Alpukat",
                            "uom_item_group_name" : "Kg"
                        
                    ,
                    
                        "id_trx_procurement" : 2,
                        "item_group_id" : 3135,
                        "item_group_proc" : 
                            "name_group" : "Apel",
                            "uom_item_group_name" : "Kg"
                        
                    
                ]
            
]

如何使用可迭代的 where 方法过滤数据。例如我想过滤元素数据item_group_proc,但item_group_proc在列表data中。

【问题讨论】:

请分享您的代码。到目前为止,您尝试过什么? listItemReceive.map((element1) element1.data .where((element2) => (element2.itemGroupProc.namegroup .toLowerCase() .contains(text.toLowerCase())))) .toList ();); @日文 【参考方案1】:

首先,将 JSON 转换成这样的 Dart 模型。

class UserDetails 
  int receiveBrutto;
  List<Data> data;

  UserDetails(this.receiveBrutto, this.data);

  UserDetails.fromJson(Map<String, dynamic> json) 
    receiveBrutto = json['receive_brutto'];
    if (json['data'] != null) 
      data = new List<Data>();
      json['data'].forEach((v) 
        data.add(new Data.fromJson(v));
      );
    
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['receive_brutto'] = this.receiveBrutto;
    if (this.data != null) 
      data['data'] = this.data.map((v) => v.toJson()).toList();
    
    return data;
  


class Data 
  int idTrxProcurement;
  int itemGroupId;
  String dateProc;
  ItemGroupProc itemGroupProc;

  Data(
      this.idTrxProcurement,
      this.itemGroupId,
      this.dateProc,
      this.itemGroupProc);

  Data.fromJson(Map<String, dynamic> json) 
    idTrxProcurement = json['id_trx_procurement'];
    itemGroupId = json['item_group_id'];
    dateProc = json['date_proc'];
    itemGroupProc = json['item_group_proc'] != null
        ? new ItemGroupProc.fromJson(json['item_group_proc'])
        : null;
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id_trx_procurement'] = this.idTrxProcurement;
    data['item_group_id'] = this.itemGroupId;
    data['date_proc'] = this.dateProc;
    if (this.itemGroupProc != null) 
      data['item_group_proc'] = this.itemGroupProc.toJson();
    
    return data;
  


class ItemGroupProc 
  String nameGroup;
  String uomItemGroupName;

  ItemGroupProc(this.nameGroup, this.uomItemGroupName);

  ItemGroupProc.fromJson(Map<String, dynamic> json) 
    nameGroup = json['name_group'];
    uomItemGroupName = json['uom_item_group_name'];
  

  Map<String, dynamic> toJson() 
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name_group'] = this.nameGroup;
    data['uom_item_group_name'] = this.uomItemGroupName;
    return data;
  

完成此操作后,您就可以相应地管理 JSON。例如。

UserDetails userdetails = new UserDetails.fromJson(response);

【讨论】:

谢谢之前,我不是那个意思,我之前做过这样的模型,只是,我想要的是过滤List ,但是List 在userDetails 【参考方案2】:

你可以定义一个函数来获取原始数据并返回响应,你可以使用这个函数来访问任何你想要的数据;

FutureBuilder<UserDetails>(
          future: getData(),
          builder: (context, snapshot) 
            if (snapshot.hasData) 
                  snapshot.data.item_group_proc

【讨论】:

listItemReceive.forEach((element1) element1.data.forEach((element2) if (element2.itemGroupProc.namegroup .toLowerCase() .contains(text.toLowerCase()) || element2.trxProcurement2.userProc.user.name .toLowerCase() .contains(text.toLowerCase())) tmp2 = element2; ); element1.data.add(tmp2); tmplistItemReceive.add(element1);这样,但是那个代码错误,你能解决吗?

以上是关于Flutter Search 可迭代的 Where的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dart (Flutter) 中获取每个可迭代值的索引号

Flutter - 无法将所有 json 数据从 api 响应保存到 Iterable List 编辑:(无法从可迭代列表中获取数据)

为啥压缩函数和可迭代的结果不起作用? [复制]

std::search 提取当前迭代器并使用 std::advance 向前移动迭代器

前端标准迭代这么快,有没有捷径可走?

Flutter:如何将列表传递到 Firestore where 条件