所以基本上我是使用 flutter 中的 http 包从 api 获取数据。response.body 是一个如下所示的数组:
[
{
"id":1,
"full_name":"Cristiano Ronaldo",
"avatar":"http://localhost:8000/media/avatars/Ronaldo.jpeg",
"created":"2021-06-30T02:25:56.332816Z"
},
{
"id":2,
"full_name":"Paul Pogba",
"avatar":"http://localhost:8000/media/avatars/Pogba.jpeg",
"created":"2021-06-30T02:49:17.649970Z"
},
{
"id":3,
"full_name":"Paulo Dybala",
"avatar":"http://localhost:8000/media/avatars/Dybala.jpeg",
"created":"2021-06-30T02:52:33.338296Z"
},
{
"id":4,
"full_name":"Leonel Messi",
"avatar":"http://localhost:8000/media/avatars/Messi.jpeg",
"created":"2021-06-30T02:53:39.539556Z"
},
{
"id":5,
"full_name":"Kylian Mbappe",
"avatar":"http://localhost:8000/media/avatars/Mbappe.jpeg",
"created":"2021-06-30T02:57:29.891686Z"
}
]
Run Code Online (Sandbox Code Playgroud)
我的问题是我想基本上将其格式化为“dart”方式。像这样的事情:
List players = response.body;
Run Code Online (Sandbox Code Playgroud)
我收到的错误是这样的:
A value of type 'String' can't be assigned to a variable of type 'List<dynamic>'.
Try changing the type of the variable, or casting the right-hand type to 'List<dynamic>'.
Run Code Online (Sandbox Code Playgroud)
为什么会出现这个错误。我知道列表已经正确格式化,并且 json 对象的键值对都是字符串,但我想将其格式化为“dart”方式。如果我这样做:
var players = response.body;
Run Code Online (Sandbox Code Playgroud)
它确实有效。我应该只使用 var 并称之为好还是应该格式化它?
附带问题: 如果我想在 initState 方法中调用从 api 获取数据的方法,我会这样做:
Future<void> _getPlayers() async {
...
}
void initState() {
super.initState();
_getPlayers();
}
Run Code Online (Sandbox Code Playgroud)
谢谢你!
Object
最有效的方法是像这样制作class Player {
final int id;
final String fullName;
final String avatar;
final String created;
const Player({this.id, this.fullName, this.avatar, this.created});
Player.fromJson(Map<String, dynamic> json) {
id = json['id'];
fullName = json['full_name'];
avatar = json['avatar'];
created = json['created'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['full_name'] = this.fullName;
data['avatar'] = this.avatar;
data['created'] = this.created;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
List players = response.body
Run Code Online (Sandbox Code Playgroud)
var data = json.decode(response.body);
List<Player> players = data.map((element){
return Player.fromJson(element);
}).toList();
Run Code Online (Sandbox Code Playgroud)
players
用于从列表访问数据players[0].fullName;
players[1].fullName;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
835 次 |
最近记录: |