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 编辑:(无法从可迭代列表中获取数据)