Flutter 在Flatter中从internet获取json数据时出现问题
我是一个新手,当时正在运行一个从互联网上获取和显示数据的代码。但当我运行代码时,我会遇到以下错误:Flutter 在Flatter中从internet获取json数据时出现问题,flutter,Flutter,我是一个新手,当时正在运行一个从互联网上获取和显示数据的代码。但当我运行代码时,我会遇到以下错误: List'不是“Map”类型的子类型。 我试图找出解决办法,但没有任何帮助。提前谢谢 这是我的密码: import 'package:flutter/material.dart'; import 'dart:async'; import 'package:http/http.dart' as http; class Message extends StatefulWidget { @ove
List'不是“Map”类型的子类型
。
我试图找出解决办法,但没有任何帮助。提前谢谢
这是我的密码:
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
class Message extends StatefulWidget {
@override
_MessageState createState() => _MessageState();
}
class _MessageState extends State<Message> {
Map data;
List userData;
Future getData() async
{
http.Response response = await http.get('https://jsonplaceholder.typicode.com/users');
data = json.decode(response.body);
setState(() {
userData = data["data"];
});
}
@override
void initState(){
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Container(
child:ListView.builder
(
shrinkWrap: true,
itemCount: userData == null ? 0 : userData.length,
itemBuilder:(BuildContext context, int index){
return Row(
children:<Widget>[
Text('${userData[index]["username"]}', style: TextStyle(fontWeight: FontWeight.w600, fontSize: 20),),
Text('${userData[index]["catchPhrase"]}',style: TextStyle(fontWeight: FontWeight.w500, fontSize: 17),),
Icon(Icons.navigate_next)
]
);
}
)
);
}
}```
导入“包装:颤振/材料.省道”;
导入“dart:async”;
将“package:http/http.dart”导入为http;
类消息扩展StatefulWidget{
@凌驾
_MessageState createState()=>\u MessageState();
}
类_MessageState扩展状态{
地图数据;
列出用户数据;
Future getData()异步
{
http.Response-Response=等待http.get('https://jsonplaceholder.typicode.com/users');
data=json.decode(response.body);
设置状态(){
用户数据=数据[“数据”];
});
}
@凌驾
void initState(){
super.initState();
getData();
}
@凌驾
小部件构建(构建上下文){
返回容器(
子项:ListView.builder
(
收缩膜:对,
itemCount:userData==null?0:userData.length,
itemBuilder:(构建上下文,int索引){
返回行(
儿童:[
文本(“${userData[index][“username”]}”,样式:TextStyle(fontWeight:fontWeight.w600,fontSize:20),
文本(“${userData[index][“catchPhrase”]}”,样式:TextStyle(fontWeight:fontWeight.w500,fontSize:17),
图标(图标。导航到下一步)
]
);
}
)
);
}
}```
发生的事情是数据[“数据”]
是一个地图而不是列表。
尝试按照错误日志中的说明将类型更改为映射
你能试试下面的吗
import 'dart:async';
import 'package:http/http.dart' as http;
class Message extends StatefulWidget {
@override
_MessageState createState() => _MessageState();
}
class _MessageState extends State<Message> {
Map data;
Map<String, dynamic> userData;
Future getData() async
{
http.Response response = await http.get('https://jsonplaceholder.typicode.com/users');
data = json.decode(response.body);
setState(() {
userData = data["data"];
});
}
@override
void initState(){
super.initState();
getData();
}
@override
Widget build(BuildContext context) {
return Container(
child:ListView.builder
(
shrinkWrap: true,
itemCount: userData == null ? 0 : userData.length,
itemBuilder:(BuildContext context, int index){
return Row(
children:<Widget>[
Text('${userData[userData.keys.toList()[index]]["username"]}', style: TextStyle(fontWeight: FontWeight.w600, fontSize: 20),),
Text('${userData[userData.keys.toList()[index]]["catchPhrase"]}',style: TextStyle(fontWeight: FontWeight.w500, fontSize: 17),),
Icon(Icons.navigate_next)
]);
}
)
);
}
}
导入'dart:async';
将“package:http/http.dart”导入为http;
类消息扩展StatefulWidget{
@凌驾
_MessageState createState()=>\u MessageState();
}
类_MessageState扩展状态{
地图数据;
地图用户数据;
Future getData()异步
{
http.Response-Response=等待http.get('https://jsonplaceholder.typicode.com/users');
data=json.decode(response.body);
设置状态(){
用户数据=数据[“数据”];
});
}
@凌驾
void initState(){
super.initState();
getData();
}
@凌驾
小部件构建(构建上下文){
返回容器(
子项:ListView.builder
(
收缩膜:对,
itemCount:userData==null?0:userData.length,
itemBuilder:(构建上下文,int索引){
返回行(
儿童:[
文本('${userData[userData.keys.toList()[index]][“username”]}',样式:TextStyle(fontWeight:fontWeight.w600,fontSize:20),
文本(“${userData[userData.keys.toList()[index]][”标语“]}”,样式:TextStyle(fontWeight:fontWeight.w500,fontSize:17),
图标(图标。导航到下一步)
]);
}
)
);
}
}
这是您的操作方式:
定义一个模型类
Define.fromJson方法
获取数据
将数据传递给模型,创建实例并制作列表
例如:
型号:
class User {
final int id;
...
User({
@required this.id
...
})
User.fromJson(Map json)
: this.id = json["id"]
...
您在网络调用中使用此模型,如下所示:
Map<String, dynamic> response = await http.get(...)
List<User> users = (response as List)
.map((element) => User.fromJson(element))
.toList();
Map response=wait http.get(…)
列表用户=(响应为列表)
.map((元素)=>User.fromJson(元素))
.toList();
注意:我直接用SO编写了这段代码(它不是经过单元测试的。您可能需要做一些调整才能使其正常工作)请发布您从API获得的完整json字符串。您解决问题了吗?