首页 > 解决方案 > 迭代槽图> 在 Dart Flutter 中

问题描述

我有 2 个数据模型。userDataModelPostDataModel。_

用户可能有多个帖子,所以我希望有以下获取结构:

Map<userDataModel,List<PostDataModel>> = data

我可以使用索引遍历数据吗?(用户索引,然后发布索引?)

类似for(user, data in data){} 或类似data[0][0] 的东西最后,我想要一个所有帖子的列表视图,当时只有一个用户

我也想知道如何打印数据,因为打印数据只返回实例。

标签: flutterdart

解决方案


首先,使用您提供的结构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]按照您的要求访问您的帖子。


推荐阅读