Flutter 如何显示 FutureBuilder 的 snapshot.data?
Flutter how do i display snapshot.data of FutureBuilder?
我想显示 riot api 中的召唤师数据,但出现此错误
'error: The method '[]' 不能无条件调用,因为接收者可以是 'null'。在“return Text(snapshot.data['id'])”下有红线。
所以我尝试使用“?”使其成为有条件的,但我仍然遇到同样的错误。有人知道怎么处理吗??
FutureBuilder(
future: getData(widget.value),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.active:
return Text('active');
case ConnectionState.waiting:
return Text('waiting,,,');
case ConnectionState.done:
return snapshot.hasData
? Text(snapshot.data['id'])
: Text('N/A');
default:
return Text('default');
Future getData(String value) async {
http.Response response =
await http.get(Uri.parse('$summonerInfoUrl$value?api_key=$apiKey'));
if (response.statusCode == 200) {
String data = response.body;
var decodeData = jsonDecode(data);
return decodeData;
} else {
print(response.statusCode);
return Text('error occured');
}
}
您需要在方括号前使用 null 感知运算符 !
,这将强制值排除 null。但是,仅当您确定响应为空时才执行此操作,否则会引发错误。
如果您不确定它是否为空,请在括号前使用运算符 ?
,然后在括号后使用 ??
和回退值。例如。 snapshot.data?['id'] ?? 'No ID'
.
我想显示 riot api 中的召唤师数据,但出现此错误 'error: The method '[]' 不能无条件调用,因为接收者可以是 'null'。在“return Text(snapshot.data['id'])”下有红线。
所以我尝试使用“?”使其成为有条件的,但我仍然遇到同样的错误。有人知道怎么处理吗??
FutureBuilder(
future: getData(widget.value),
builder: (context, snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('none');
case ConnectionState.active:
return Text('active');
case ConnectionState.waiting:
return Text('waiting,,,');
case ConnectionState.done:
return snapshot.hasData
? Text(snapshot.data['id'])
: Text('N/A');
default:
return Text('default');
Future getData(String value) async {
http.Response response =
await http.get(Uri.parse('$summonerInfoUrl$value?api_key=$apiKey'));
if (response.statusCode == 200) {
String data = response.body;
var decodeData = jsonDecode(data);
return decodeData;
} else {
print(response.statusCode);
return Text('error occured');
}
}
您需要在方括号前使用 null 感知运算符 !
,这将强制值排除 null。但是,仅当您确定响应为空时才执行此操作,否则会引发错误。
如果您不确定它是否为空,请在括号前使用运算符 ?
,然后在括号后使用 ??
和回退值。例如。 snapshot.data?['id'] ?? 'No ID'
.