簡體   English   中英

Flutter Futurebuilder 快照為空

[英]Flutter Futurebuilder snapshot is null

我嘗試使用 FutureBuilder 在 Flutter 中的 ListView 中顯示來自 JSON 的結果。 但是快照為空並且顯示沒有可用數據的消息。

在這里,我嘗試獲取數據:

static Future _getBans() async {
Storage.getLoggedToken().then((token) async {
  var body = {
    "token": token
  };
  final response = await http.post('${URLS.BASE_URL}/punishments.php', headers: ApiService.header, body: json.encode(body));
  if (response.statusCode == 200) {

    List<Ban> bans = [];
    var jsonData = json.decode(response.body)["bans"];
    for(var b in jsonData){
      Ban ban = Ban(b["player"], b["reason"], int.parse(b["end"]), b["by"]);
      bans.add(ban);
    }

    print(response.body);
    print(bans.length);

    return bans;
  } else {
    return null;
  }
});

}

來自這個 JSON 響應

{"status":1,"msg":"OK","bans":[{"player":"DDOSAttacke","reason":"Hacking","end":"1579275471304","by":"DDOSAttacke"}],"mutes":[]}

我的未來建設者。 這是快照 null 但元素的計數正在工作。

Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text('Aktive Bans'),
  ),
  body: Container(
    child: FutureBuilder(
      future: _getBans(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        if (snapshot.data == null) {
          return Container(
            child: Center(
                child: Text('Keine aktiven Ban vorhanden')
            ),
          );
        } else {
          return ListView.builder(
            itemCount: snapshot.data.length,
            itemBuilder: (BuildContext context, int index) {
              return ListTile(
                title: Text(snapshot.data[index].player),
              );
            },
          );
        }
      },
    ),
  ),
);

}

請試試這個。 我認為您必須對getLoggedToken方法使用await關鍵字, return將在返回任何內容之前等待發布。 但是現在你在getLoggedToken完成他的工作之前getLoggedToken了。 這就是為什么你總是收到空值。

 static Future _getBans() async {
 var token = await Storage.getLoggedToken();
      var body = {
        "token": token
      };
      final response = await http.post('${URLS.BASE_URL}/punishments.php', headers: ApiService.header, body: json.encode(body));
      if (response.statusCode == 200) {

    List<Ban> bans = [];
    var jsonData = json.decode(response.body)["bans"];
    for(var b in jsonData){
      Ban ban = Ban(b["player"], b["reason"], int.parse(b["end"]), b["by"]);
      bans.add(ban);
    }

    print(response.body);
    print(bans.length);

    return bans;
  } else {
    return null;
  }
}

暫無
暫無

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

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