我有一个类,它将从API提取数据并将结果存储在LIST中并在我的文本小部件中显示内容。当我热重新加载其显示“默认”。但是,尽管我保护文本小部件免受NULL的影响,但必须重新加载时,它仍能正常工作。以下是我的代码。请帮忙。
class Sample extends StatefulWidget {
@override
SampleState createState() => SampleState();
}
class SampleState extends State<Sample> {
var selected = [];
@override
void initState() {
super.initState();
callAsyncFetch();
}
callAsyncFetch() async {
var url = 'http://10.0.2.2/abc.php';
var response = await http.get(url);
var jsonData = json.decode(response.body);
print(jsonData);
for (var u in jsonData) {
if (u.substring(0, 2) == 'ABC') {
selected.add(u);
}
}
for (var u in selected) {
print(u);
}
print(selected.length); // working fine
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: Column(children: [
selected.isEmpty
? CircularProgressIndicator()
: new Text(selected[0].toString()),
// i have tried this also but no luck
new Text(selectedStudentsIT.length!=0?selectedStudentsIT[0].toString():'Default Value'),
]),
),
);
}
}
答案 0 :(得分:2)
一个简单的问题是,在热重装中,它不会再次运行initState 。您可以通过在initState中打印内容来进行检查,而在完全重新加载时,它将调用initState 。
我认为您希望在收到api响应时显示数据。
我认为可以通过在callAsyncFetch函数的端调用setState 轻松实现,因此,当您从服务器获取数据时,它将更新ui。