【问题标题】:Flutter Json with array of strings into Futurebuilder将带有字符串数组的 Flutter Json 放入 Futurebuilder
【发布时间】:2019-09-05 10:35:26
【问题描述】:

所以我有一个带有字符串数组的 JSON。有人可以告诉我如何使用 listview.builder 在未来的构建器中显示每个对象的用户名。

我到处寻找,似乎找不到任何好的解决方案。

这是 JSON 树:

{
    "id": 81,
    "users": [
        {
            "username": "hugo",
            "fullname": "Hugo Johnsson"
        },
        {
            "username": "studentone",
            "fullname": "Student One"
        }
    ],
    "title": "test med teacher chat",
    "description": "This project does not have a description.",
    "subject": "No subject",
    "deadline": "2019-01-06",
    "days_left": "91 days ago",
    "overview_requests": [
        {
            "id": 28,
            "user": {
                "username": "hugo",
                "fullname": "Hugo Johnsson"
            },
            "group": 81
        }
    ]
},

这是项目类:

class Project {
  final int id;
  final String title;
  final String description;
  final String deadline;
  final String subject;
  final String days_left;
  final List<USER> users;

 Project(
  this.id,
  this.title,
  this.description,
  this.deadline,
  this.subject,
  this.days_left,
  this.users
  );
}

class USER {
  final String username;
  final String fullname;

USER(
  this.username,
  this.fullname);
 }

我尝试过的:我不知道如何为“用户”创建这个循环以便能够获取名称。

      Future<List<Project>> _getProjects() async {
  var data = await http.get(TheAdress);
    var jsonData = json.decode(data.body);

    List<Project> allProjects = [];

    for (var JData in jsonData) {
     Project project = Project(
          JData["id"],
          JData["title"],
          JData["description"],
          JData["deadline"],
          JData["subject"],
          JData["days_left"],
          JData["users"]);

      allProjects.add(project);
    }

    return allProjects;
  }

然后通过 ui 中的 futurebuilder 明显地运行它

FutureBuilder(
      future: _getProjects(),
      builder: (BuildContext context, AsyncSnapshot snapshot ) {
        if (snapshot.data == null){
          return Container(
            child: Center(
              child: CircularProgressIndicator(),
            ),
          );
        }
        else return ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (BuildContext context, int index) {
            return ListTile(
              title: Text(snapshot.data[index].users[index].username),
            );
          }
        );
      }
    ),

【问题讨论】:

  • 添加您尝试过的代码,以便其他人可以更正或进一步帮助您,而不是期望有人编写整个代码。
  • 刚刚做了 :) - 你能帮帮我吗?

标签: json listview flutter


【解决方案1】:

我也试过了,为什么不行?

  //THE FUTURE

未来> _getUSERS() 异步 {

var data = await http.get("http://studieplaneraren.pythonanywhere.com/api/projects/${UserLog().Username}/?format=json");
var jsonData = json.decode(data.body); //an array of json objects


List<USER> users;

for (var JData in jsonData) {

  var jsonUsers = JData["users"];

  for(int i = 0; i<users.length ; i++) {
    var user = jsonUsers[i];
    users.add(USER(user["username"], user["fullname"]));
  }
}


return users;

}

【讨论】:

    【解决方案2】:

    //未来 未来> _getUSERS() 异步 {

    var data = await http.get("http://studieplaneraren.pythonanywhere.com/api/projects/${UserLog().Username}/?format=json");
    var jsonData = json.decode(data.body); //an array of json objects
    
    
    var userStrings = List;
    
    for (var JData in jsonData) {
    
      var jsonUsers = JData["users"];
    
      for(int i = 0; i<jsonUsers.length ; i++) {
        var user = jsonUsers[i];
        jsonUsers.add(USER(user["username"], user["fullname"]));
      }
    
    }
    

    }

    【讨论】:

      【解决方案3】:

      你可以得到这样的用户-

      var jsonUsers = JDate["users"];
      

      然后像这样遍历它们 -

      for(int i = 0; i<users.length ; i++) {
        var user = jsonUsers[i];
        users.add(USER(user["username"], user["fullname"]));
      }
      

      从您的FutureBuilder,我看到您有一个列表users。我刚刚创建了USER 的对象并将它们添加到列表中。这对您有帮助吗?

      【讨论】:

      • 谢谢,请告诉我如何制作整个函数,这是我尝试过的,我似乎无法返回任何东西!
      • 我不明白你所说的 users.add(xxx) 是什么意思,我实际上没有一个名为 users 的数组 :) 非常感谢你的帮助。
      • 在您的itemBuilder 中,我看到了这个代码-Text(snapshot.data[index].users[index].username),users 这里是什么?
      猜你喜欢
      • 2019-09-12
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多