文本小部件显示在重新加载中,但不显示在热加载中

时间:2020-03-23 08:10:52

标签: flutter flutter-layout

我有一个类,它将从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'),

        ]),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:2)

一个简单的问题是,在热重装中,它不会再次运行initState 。您可以通过在initState中打印内容来进行检查,而在完全重新加载时,它将调用initState

我认为您希望在收到api响应时显示数据。

我认为可以通过在callAsyncFetch函数的调用setState 轻松实现,因此,当您从服务器获取数据时,它将更新ui。