Flutter Futurebuilder 快照为空
Posted
技术标签:
【中文标题】Flutter Futurebuilder 快照为空【英文标题】:Flutter Futurebuilder snapshot is null 【发布时间】:2020-04-12 00:01:56 【问题描述】:我尝试使用 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),
);
,
);
,
),
),
);
【问题讨论】:
等等,你的意思是AsyncSnapshot snapshot
为空?或snapshot.data
?
我的意思是 snapshot.data
可能是因为: else return null;
?
我试过了,结果一样
那么您是否从_getBans()
方法返回非null
值?你确定吗?
【参考方案1】:
请试试这个。我认为您必须使用 await
关键字作为 getLoggedToken
方法,return
将在返回任何内容之前等待帖子。但是现在你要在getLoggedToken
完成他的工作之前回来。这就是为什么你总是收到 null。
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;
【讨论】:
你能帮我解决这个问题吗? ***.com/questions/67813247/…以上是关于Flutter Futurebuilder 快照为空的主要内容,如果未能解决你的问题,请参考以下文章
如何将快照数据从 futurebuilder 传递到同一页面中的另一个 futurebuilder?
Flutter FutureBuilder 小部件动态列表长度
Flutter + SharedPreferences:如何使用 FutureBuilder
Flutter:不清楚 ValueChanged 和 FutureBuilder
使用新查询重新访问时已创建的嵌套 FutureBuilder 快照仍然存在
FlutterFuture 与 FutureBuilder 异步编程代码示例 ( FutureBuilder 构造函数设置 | 处理 Flutter 中文乱码 | 完整代码示例 )