flutter - 如何通过 JSON 中的 http 列表收集循环
问题描述
我正在学习 Flutter,但我已经做了一段时间的开发人员了。我正在使用我的一个网站使其无头,并尝试将数据输入我的应用程序。
我正在关注这个例子:https ://flutter.dev/docs/cookbook/networking/fetch-data
在此示例中,他们获取单个用户。如果有多个用户,我对这将如何改变感到有点迷茫。
例如,如果数据的结构更像:
{'users':[{'userId':1,'id':1,'title':'title1','body':'This is Body 1'},{'userId':2,'id':2,'title':'title2','body':'This is Body 2'}]
你怎么能用教程中的方法来捕捉呢?你怎么能遍历列表并显示一些简单的东西,比如标题和正文?
解决方案
使用教程中的示例,您可以这样做:
class Users {
final List<Post> users;
Users({this.users});
factory Users.fromJson(Map<String, dynamic> json) {
List<Post> tempUsers = [];
for (int i = 0; i < json['users'].length; i++) {
Post post = Post.fromJson(json['users'][i]);
tempUsers.add(post);
}
return Users(users: tempUsers);
}
}
这是教程中的 Post 类:
class Post {
final int userId;
final int id;
final String title;
final String body;
Post({this.userId, this.id, this.title, this.body});
factory Post.fromJson(Map<String, dynamic> json) {
return Post(
userId: json['userId'],
id: json['id'],
title: json['title'],
body: json['body'],
);
}
}
要显示标题和正文列表,您可以像这样更改教程中的 FutureBuilder:
final Future<Users> users;
...
FutureBuilder<Users>(
future: users,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.users.length,
itemBuilder: (context, index) {
return Column(
children: <Widget>[
Text('Title: ${snapshot.data.users[index].title}'),
Text('Body: ${snapshot.data.users[index].body}'),
],
);
},
);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default, show a loading spinner.
return CircularProgressIndicator();
},
),
我推荐你这篇文章来了解更多关于解析 JSON: Parsing complex JSON in Flutter
此外,您可以在此处找到有关如何进行手动序列化和自动序列化的更多信息: JSON 和序列化
推荐阅读
- python - 如何使用包含参数数组的 for 循环运行 shell 脚本,每个命令都应在 ubuntu 的新终端窗口中运行
- amazon-web-services - 如何在 groovy 中评估美元表达式并存储值
- powershell - 将电子邮件保存在我的文件系统上的 msg 文件中
- ios - 如何将 RGBA 纹理转换为金属中的 Y 和 CbCr 纹理
- php - 如何将变量分配给选定的 ID 值以用于重复选择(获取)?
- c++ - c ++:易失性实例中的易失性成员函数 - 将数组分配给指针是无效转换?
- c++ - C ++ 17在逗号上拆分constexpr字符串并在编译时有元素数量?
- endpoint - 如何扩展现有的执行器健康检查端点?
- javascript - 尝试将数据存储在点击器网站中
- java - 在这种情况下如何删除 NullpointerException?