您可以在下面复制粘贴运行完整代码
第 1 步:根据您的 JSON 字符串,您需要 Agent 类,请参阅下面的完整代码
第二步:你可以用agentDetailsInfoFromJson(response.body);解析
代码sn-p
AgentDetailsInfo agentDetailsInfoFromJson(String str) =>
AgentDetailsInfo.fromJson(json.decode(str));
...
class AgentDetailsInfo {
AgentDetailsInfo({
this.agent,
this.tenants,
});
Agent agent;
List<Tenantdetails> tenants;
...
class Agent {
Agent({
this.agentName,
this.agentPhone,
this.email,
});
String agentName;
String agentPhone;
String email;
工作演示
完整代码
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
AgentDetailsInfo agentDetailsInfoFromJson(String str) =>
AgentDetailsInfo.fromJson(json.decode(str));
String agentDetailsInfoToJson(AgentDetailsInfo data) =>
json.encode(data.toJson());
class AgentDetailsInfo {
AgentDetailsInfo({
this.agent,
this.tenants,
});
Agent agent;
List<Tenantdetails> tenants;
factory AgentDetailsInfo.fromJson(Map<String, dynamic> json) =>
AgentDetailsInfo(
agent: Agent.fromJson(json["agent"]),
tenants: List<Tenantdetails>.from(
json["tenants"].map((x) => Tenantdetails.fromJson(x))),
);
Map<String, dynamic> toJson() => {
"agent": agent.toJson(),
"tenants": List<dynamic>.from(tenants.map((x) => x.toJson())),
};
}
class Agent {
Agent({
this.agentName,
this.agentPhone,
this.email,
});
String agentName;
String agentPhone;
String email;
factory Agent.fromJson(Map<String, dynamic> json) => Agent(
agentName: json["agent_name"],
agentPhone: json["agent_phone"],
email: json["email"],
);
Map<String, dynamic> toJson() => {
"agent_name": agentName,
"agent_phone": agentPhone,
"email": email,
};
}
class Tenantdetails {
Tenantdetails({
this.entityId,
this.userId,
});
String entityId;
String userId;
factory Tenantdetails.fromJson(Map<String, dynamic> json) => Tenantdetails(
entityId: json["entity_id"],
userId: json["user_id"],
);
Map<String, dynamic> toJson() => {
"entity_id": entityId,
"user_id": userId,
};
}
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> {
Function _future;
Future<AgentDetailsInfo> getAgentDetails(String agentId) async {
print(agentId);
/*String tokenKey = await SharedPrefUtils.readPrefStr("token");
String url = Constants.BASEURL + Constants.KEYWORD_GET_AGENT_DETAILS + agentId;
final response = await http.get(
url,
headers: {"Accept": "application/json", "Authorization": tokenKey},
);*/
String jsonString = '''
{
"agent":{
"agent_name": "Shamsudheen",
"agent_phone": "0581476710",
"email": "shamsu@gmail.com"
},
"tenants": [
{
"entity_id": "152",
"user_id": "37"
},
{
"entity_id": "153",
"user_id": "37"
},
{
"entity_id": "150",
"user_id": "37"
}
]
}
''';
http.Response response = http.Response(jsonString, 200);
if (response.statusCode == 200) {
return agentDetailsInfoFromJson(response.body);
}
}
@override
void initState() {
_future = getAgentDetails;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: FutureBuilder(
future: _future("test"),
builder: (context, AsyncSnapshot<AgentDetailsInfo> 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.builder(
itemCount: snapshot.data.tenants.length,
itemBuilder: (context, index) {
return Card(
elevation: 6.0,
child: Padding(
padding: const EdgeInsets.only(
top: 6.0,
bottom: 6.0,
left: 8.0,
right: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(snapshot.data.agent.agentName
.toString()),
Spacer(),
Text(snapshot.data.tenants[index].userId
.toString()),
Spacer(),
Text(snapshot.data.tenants[index].entityId),
],
),
));
});
}
}
}));
}
}