首先,使用您提供的结构Map<userDataModel,List<PostDataModel>>,您必须有两个嵌套循环。为了能够遍历所有这些,您将需要一些类似以下的代码:
void main() {
var data = Map<UserDataModel, List<PostDataModel>>();
data.forEach((user, posts) {
for (var post in posts) {
print(post.name);
print(user.id);
}
});
}
class UserDataModel {
int id;
}
class PostDataModel {
String name;
}
但是,正如您提到的,由于您的帖子属于用户,我会将PostDataModel 放在UserDataModel 中。然后,您的数据最终看起来会有些不同:
void main() {
var data = List<UserDataModel>();
data.add(UserDataModel(1, [PostDataModel("one"),PostDataModel("two")]));
data.add(UserDataModel(2, [PostDataModel("three"),PostDataModel("four")]));
for (var user in data) {
for (var post in user.posts) {
print(user);
print(post);
}
}
}
class UserDataModel {
int id;
UserDataModel(this.id, this.posts);
List<PostDataModel> posts;
@override
String toString() {
var result = "";
result += "Id: $id\n";
var count = 0;
for(var post in posts) {
result += "Post $count, $post";
}
return result;
}
}
class PostDataModel {
String name;
PostDataModel(this.name);
@override
String toString() {
return "Name: $name\n";
}
}
这取决于您的后端结构,但我建议采用第二种方式。
作为问题第二部分的答案,请查看方法toString。如果您覆盖它,您可以自定义类的显示方式,例如,当您使用print(userDataModel 时。例如,我创建了这些类,因此请为您自己的类定制它们。
事实上,在最后一个示例中,您可以按照自己的要求通过data[0].posts[0] 访问您的帖子。