如何解决未处理的异常:类型'_InternalLinkedHashMap <String,dynamic>'不是类型'Iterable <dynamic>'的子类型,为什么会出现此错误
当api响应json很复杂时,如何从api的值加载到字段?
{
"agent":{
"agent_name": "Shamsudheen","agent_phone": "0581476710","email": "shamsu@gmail.com",},"tenants": [
{
"entity_id": "152","user_id": "37",{
"entity_id": "153",{
"entity_id": "150",}
]
}
这是我的模型课
class AgentDetailsInfo {
String name;
String email;
String mobile;
List<Tenantdetails> list;
AgentDetailsInfo(
{
this.name,this.email,this.mobile,this.list
});
factory AgentDetailsInfo.fromJson(Map<String,dynamic> json) {
return new AgentDetailsInfo(
name: json['agent']['agent_name'],email: json['agent']['email'],mobile: json['agent']['agent_phone']
List:json[’tenants’]
);
}
}
class Tenantdetails {
String entity;
String userid;
Tenantdetails({
this.entity,this.userid,});
factory Tenantdetails.fromJson(Map<String,dynamic> json) {
return new Tenantdetails(
entity: json['tenants']['entity_id'],userid: json['tenants']['user_id'],);
}
}
并且正在像这样的响应一样调用api,但值是nitf
List<AgentDetailsInfo> _list;
Future getAgentDetails(String agentId) async {
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},);
var response = jsonDecode(response.body);
_list = List();
for (Map agentinfo in response) {
_list.add(AgentDetailsInfo.fromJson(agentinfo));
}
}
,但未加载到我的文本视图中,显示错误
“ _InternalLinkedHashMap
Text(_list[0].name,))
解决方法
您可以在下面复制粘贴运行完整代码
第1步:根据您的JSON字符串,您需要类Agent
,请参见下面的完整代码
步骤2:您可以使用agentDetailsInfoFromJson(response.body);
代码段
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,});
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,});
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"],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"],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",{
"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()),Text(snapshot.data.tenants[index].entityId),],));
});
}
}
}));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。