簡體   English   中英

將帶有字符串數組的Json打入Futurebuilder

[英]Flutter Json with array of strings into Futurebuilder

所以我有一個帶有字符串數組的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(
      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),
            );
          }
        );
      }
    ),

你可以得到這樣的用戶 -

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對象並將它們添加到列表中。 這對你有幫助嗎?

//未來的未來> _getUSERS()async {

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"]));
  }

}

}

我也試過這個,為什么它不起作用?

  //THE FUTURE

Future> _getUSERS()async {

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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM