![](/img/trans.png)
[英]Flutter - How to show data from 2 objects in single Json file based on the same value
[英]Flutter: How to display data from 2 JSON based on the same value of Array
我有 2 JSON 文件:
json1:字符串人名( API )
[
{
"name": "Oliver"
},
{
"name": "George"
},
{
"name": "Harry"
}
]
json2:字符串裝備和一組適合該裝備的人( API )
[
{
"outfit": "T-shirt",
"fit": [
"Oliver",
"George"
]
},
{
"outfit": "Hat",
"fit": [
"George",
"Harry"
]
},
{
"outfit": "Jacket",
"fit": [
"Harry"
]
}
]
我希望在單擊此人的姓名時顯示 => 顯示適合他們的服裝
前任。 喬治適合一件 T 恤和一頂帽子
所以請幫助我,這是主要文件:
import 'package:ask/model/page1_model.dart';
import 'package:ask/model/page2_model.dart';
import 'package:ask/services/json2_service.dart';
import 'package:ask/services/json1_service.dart';
import 'package:flutter/material.dart';
class Demo extends StatefulWidget {
@override
_DemoState createState() => _DemoState();
}
class _DemoState extends State<Demo> {
List<Json1> _json1 = [];
List<Json2> _json2 = [];
@override
void initState() {
super.initState();
Json1Services.getData().then((data) {
setState(() {
_json1 = data;
});
});
Json2Services.getData().then((data) {
setState(() {
_json2 = data;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('List Name')),
body: ListView.builder(
itemCount: _json1.length,
itemBuilder: (BuildContext context, int index) {
Json1 json1 = _json1[index];
return Column(children: [
InkWell(
child: Text(json1.name),
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Scaffold(
appBar: AppBar(title: Text('${json1.name} fits:')),
body: ShowWhatFit(json2: List<Json2>.from(_json2)..retainWhere((element) => element.fit[index] == json1.name)), // I think this line is not right
))))
]);
},
));
}
}
class ShowWhatFit extends StatelessWidget {
final List<Json2> json2;
ShowWhatFit({this.json2});
@override
Widget build(BuildContext context) {
return Row(
children: [
for (int i = 0; i < json2.length; i++) Text(json2[i].outfit),
],
);
}
}
..................................................... .....................................
List<Json2>.from(_json2)..retainWhere((element) => element.fit[index] == json1.name))
retainWhere
將檢查每個元素並僅保留條件為真的元素。 問題是element.fit[index] == json1.name
只是檢查列表fit
的索引index
處的元素並將其與名稱json1.name
進行比較,並沒有真正檢查名稱是否在列表fit
中。 嘗試:
List<Json2>.from(_json2)..retainWhere((element) => element.fit.contains(json1.name)))
這將迭代 json2 中的每個元素,然后檢查列表是否包含一個相等的fit
json1.name
,如果存在則返回 true,否則返回 false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.