Flutter 在其他json对象中获取json列表对象
我的请求是:Flutter 在其他json对象中获取json列表对象,flutter,flutter-dependencies,flutter-web,Flutter,Flutter Dependencies,Flutter Web,我的请求是: { "id": 1, "name": "Client1", "areas": [ { "id": 1, "name": "AreaName1", "streetAddress": "street1", &q
{
"id": 1,
"name": "Client1",
"areas": [
{
"id": 1,
"name": "AreaName1",
"streetAddress": "street1",
"postalCode": "postal1",
"city": "city1"
},
{
"id": 2,
"name": "AreaName2",
"streetAddress": "street2",
"postalCode": "postal2",
"city": "city2"
},
{
"id": 3,
"name": "AreaName3",
"streetAddress": "street3",
"postalCode": "postal3",
"city": "city3"
},
{
"id": 4,
"name": "AreaName4",
"streetAddress": "street4",
"postalCode": "postal4",
"city": "city4"
},
{
"id": 5,
"name": "AreaName5",
"streetAddress": "street5",
"postalCode": "postal5",
"city": "city5"
}
]
},
因此,这是一个客户的区域列表
所以我创建了dto类:
客户名单收件人:
class ClientListDto {
int id;
String pictureUrl;
String name;
List<AreaDto> areas;
ClientListDto({this.id, this.name, this.areas, this.pictureUrl});
ClientListDto.fromJson(Map<String, dynamic> json) {
id = json['id'];
pictureUrl = json['pictureUrl'];
name = json['name'];
if (json['areas'] != null) {
areas = new List<AreaDto>();
json['areas'].forEach((v) {
areas.add(AreaDto.fromJson(v));
});
}
}
}
类ClientListDto{
int-id;
弦图;
字符串名;
列出区域;
ClientListDto({this.id,this.name,this.areas,this.pictureUrl});
ClientListDto.fromJson(映射json){
id=json['id'];
pictureUrl=json['pictureUrl'];
name=json['name'];
如果(json['areas']!=null){
区域=新列表();
json['areas'].forEach((v){
添加(AreaDto.fromJson(v));
});
}
}
}
区域至:
class AreaDto {
int id;
String name;
String streetAddress;
String postalCode;
String city;
AreaDto({this.id, this.name, this.streetAddress, this.postalCode, this.city});
static AreaDto fromJson(Map<String, dynamic> json) {
return AreaDto(
id: json['id'],
name: json['name'],
streetAddress: json['streetAddress'],
postalCode: json['postalCode'],
city: json['city']);
}
}
类区域到{
int-id;
字符串名;
字符串地址;
字符串后代码;
字符串城市;
AreaDto({this.id,this.name,this.streetAddress,this.postalCode,this.city});
从json到静态区域(映射json){
返回区域到(
id:json['id'],
名称:json['name'],
streetAddress:json['streetAddress'],
postalCode:json['postalCode'],
城市:json['city']);
}
}
我的模型:
class Client {
int id;
String name;
String pictureUrl;
List<Area> areas;
Client({this.id, this.name, this.pictureUrl, this.areas});
static Client fromDTO(ClientListDto dto) {
return Client(
id: dto.id,
name : dto.name,
pictureUrl: dto.pictureUrl,
areas : new List<Area>(),
);
}
// TODO: DEFINE DTO
}
class Area {
String name;
String streetAddress;
String postalCode;
String city;
Area({this.name, this.streetAddress, this.postalCode, this.city});
static Area fromDTO(AreaDto dto) {
return Area(
name : dto.name,
streetAddress: dto.streetAddress,
postalCode: dto.postalCode,
city: dto.city
);
}
}
类客户端{
int-id;
字符串名;
弦图;
列出区域;
客户端({this.id,this.name,this.pictureUrl,this.areas});
静态客户端fromDTO(ClientListDto dto){
返回客户端(
id:dto.id,
名称:dto.name,
pictureUrl:dto.pictureUrl,
区域:新列表(),
);
}
//TODO:定义DTO
}
班级面积{
字符串名;
字符串地址;
字符串后代码;
字符串城市;
区域({this.name,this.streetAddress,this.postalCode,this.city});
从dto到dto的静态区域(区域dto){
返回区(
名称:dto.name,
streetAddress:dto.streetAddress,
postalCode:dto.postalCode,
城市:dto.city
);
}
}
我的存储库和我的服务:
@override
Future<List<Client>> getListTest() async {
final mymissionService = MyMissionService.create();
final token = await accessTokenRepository.getAccessToken();
print("Token $token");
final response = await mymissionService.getClient("Bearer ${token}");
final body = response.body as List<dynamic>;
final employees = body.map((e) => ClientListDto.fromJson(e)).toList();
final result = employees
.map(
(e) => new Client(
id: e.id,
name: e.name,
pictureUrl: e.pictureUrl,
),
)
.toList();
return result;
}
@覆盖
Future getListTest()异步{
final mymissionService=mymissionService.create();
final token=等待accessTokenRepository.getAccessToken();
打印(“代币$Token”);
final response=wait mymissionService.getClient(“Bearer${token}”);
最终主体=响应。主体作为列表;
final employees=body.map((e)=>ClientListDto.fromJson(e)).toList();
最终结果=员工
.地图(
(e) =>新客户端(
id:e.id,
姓名:e.name,
pictureUrl:e.pictureUrl,
),
)
.toList();
返回结果;
}
但是,当我收集客户列表时,如何才能获得存储库中的区域列表呢?
如果我只打印了这一部分,我将正确收集客户端而不是我的区域您可以复制粘贴运行下面的完整代码
您可以使用
clientFromJson(jsonString)进行解析代码>,您可以查看详细信息的完整代码客户端
和区域
定义
并使用嵌套的列表视图显示
代码片段
List<Client> clientFromJson(String str) =>
List<Client>.from(json.decode(str).map((x) => Client.fromJson(x)));
...
if (response.statusCode == 200) {
return clientFromJson(jsonString);
List clientFromJson(String str)=>
List.from(json.decode(str.map)(x)=>Client.fromJson(x));
...
如果(response.statusCode==200){
返回clientFromJson(jsonString);
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
List<Client> clientFromJson(String str) =>
List<Client>.from(json.decode(str).map((x) => Client.fromJson(x)));
String clientToJson(List<Client> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class Client {
Client({
this.id,
this.name,
this.areas,
});
int id;
String name;
List<Area> areas;
factory Client.fromJson(Map<String, dynamic> json) => Client(
id: json["id"],
name: json["name"],
areas: List<Area>.from(json["areas"].map((x) => Area.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"areas": List<dynamic>.from(areas.map((x) => x.toJson())),
};
}
class Area {
Area({
this.id,
this.name,
this.streetAddress,
this.postalCode,
this.city,
});
int id;
String name;
String streetAddress;
String postalCode;
String city;
factory Area.fromJson(Map<String, dynamic> json) => Area(
id: json["id"],
name: json["name"],
streetAddress: json["streetAddress"],
postalCode: json["postalCode"],
city: json["city"],
);
Map<String, dynamic> toJson() => {
"id": id,
"name": name,
"streetAddress": streetAddress,
"postalCode": postalCode,
"city": city,
};
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Future<List<Client>> _future;
Future<List<Client>> getListTest() async {
String jsonString = '''
[{
"id": 1,
"name": "Client1",
"areas": [
{
"id": 1,
"name": "AreaName1",
"streetAddress": "street1",
"postalCode": "postal1",
"city": "city1"
},
{
"id": 2,
"name": "AreaName2",
"streetAddress": "street2",
"postalCode": "postal2",
"city": "city2"
},
{
"id": 3,
"name": "AreaName3",
"streetAddress": "street3",
"postalCode": "postal3",
"city": "city3"
},
{
"id": 4,
"name": "AreaName4",
"streetAddress": "street4",
"postalCode": "postal4",
"city": "city4"
},
{
"id": 5,
"name": "AreaName5",
"streetAddress": "street5",
"postalCode": "postal5",
"city": "city5"
}
]
},
{
"id": 2,
"name": "Client2",
"areas": [
{
"id": 21,
"name": "AreaName1",
"streetAddress": "street1",
"postalCode": "postal1",
"city": "city1"
},
{
"id": 22,
"name": "AreaName2",
"streetAddress": "street2",
"postalCode": "postal2",
"city": "city2"
},
{
"id": 23,
"name": "AreaName3",
"streetAddress": "street3",
"postalCode": "postal3",
"city": "city3"
},
{
"id": 24,
"name": "AreaName4",
"streetAddress": "street4",
"postalCode": "postal4",
"city": "city4"
},
{
"id": 25,
"name": "AreaName5",
"streetAddress": "street5",
"postalCode": "postal5",
"city": "city5"
}
]
}
]
''';
var response = http.Response(jsonString, 200);
if (response.statusCode == 200) {
return clientFromJson(jsonString);
} else {
print(response.statusCode);
}
}
@override
void initState() {
_future = getListTest();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: FutureBuilder(
future: _future,
builder: (context, AsyncSnapshot<List<Client>> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
case ConnectionState.active:
return Text('');
case ConnectionState.done:
if (snapshot.hasError) {
return Text(
'${snapshot.error}',
style: TextStyle(color: Colors.red),
);
} else {
return ListView.separated(
separatorBuilder: (BuildContext context, int index) {
return SizedBox(
height: 10,
);
},
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
flex: 1,
child: Text(snapshot.data[index].name)),
Expanded(
flex: 5,
child: Container(
//height: 50,
child: ListView.separated(
separatorBuilder:
(BuildContext context,
int index) {
return SizedBox(
width: 10,
);
},
shrinkWrap: true,
scrollDirection: Axis.vertical,
itemCount: snapshot
.data[index].areas.length,
itemBuilder: (context, index1) {
return Row(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
Container(
width: 120,
child: Column(
children: <Widget>[
Text(
snapshot
.data[index]
.areas[index1]
.name,
style: TextStyle(
color:
Colors.red),
),
Text(
snapshot
.data[index]
.areas[index1]
.id.toString(),
style: TextStyle(
color: Colors
.red)),
],
),
)
]);
}),
),
)
])
],
);
});
}
}
}));
}
}
导入“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
导入“dart:convert”;
List clientFromJson(字符串str)=>
List.from(json.decode(str.map)(x)=>Client.fromJson(x));
字符串clientToJson(列表数据)=>
encode(List.from(data.map((x)=>x.toJson());
类客户端{
客户({
这个身份证,
这个名字,
这就是,,
});
int-id;
字符串名;
列出区域;
工厂客户端.fromJson(映射json)=>客户端(
id:json[“id”],
名称:json[“名称”],
areas:List.from(json[“areas”].map((x)=>Area.fromJson(x)),
);
映射到JSON()=>{
“id”:id,
“姓名”:姓名,
“areas”:List.from(areas.map((x)=>x.toJson()),
};
}
班级面积{
区域({
这个身份证,
这个名字,
这是我的地址,
这是邮政编码,
这个城市,
});
int-id;
字符串名;
字符串地址;
字符串后代码;
字符串城市;
factory Area.fromJson(映射json)=>Area(
id:json[“id”],
名称:json[“名称”],
streetAddress:json[“streetAddress”],
postalCode:json[“postalCode”],
城市:json[“城市”],
);
映射到JSON()=>{
“id”:id,
“姓名”:姓名,
“街道地址”:街道地址,
“postalCode”:postalCode,
“城市”:城市,
};
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
未来,未来;;
Future getListTest()异步{
字符串jsonString='''
[{
“id”:1,
“名称”:“客户1”,
“区域”:[
{
“id”:1,
“名称”:“区域名称1”,
“街道地址”:“街道1”,
“postalCode”:“postal1”,
“城市”:“城市1”
},
{
“id”:2,
“名称”:“区域名称2”,
“街道地址”:“街道2”,
“postalCode”:“postal2”,
“城市”:“城市2”
},
{
“id”:3,
“名称”:“区域名称3”,
“streetAddress”:“street3”,
“postalCode”:“postal3”,
“城市”:“城市3”
},
{
“id”:4,
“名称”:“区域名称4”,
“街道地址”:“街道4”,
“postalCode”:“postal4”,
“城市”:“城市4”
},
{
“id”:5,
“名称”:“区域名称5”,
“街道地址”:“街道5”,
“postalCode”:“postal5”,
“城市”:“城市5”
}
]
},
{
“id”:2,
“名称”:“客户2”,
“区域”:[
{