简体   繁体   English

ListView.separated 仅在热重载后显示

[英]ListView.seperated displaying Only after a Hot Reload

I have called the getRecords function in initState .我在 initState 中调用了 getRecords initState The listview only displays after I hot reload.列表视图仅在我热重载后显示。 I tried putting it under setState , but it didn't help.我试着把它放在setState下,但它没有帮助。

void getRecords() async {
final records =
    await Firestore.instance.collection('records').getDocuments();
for (var record in records.documents) {
  if (record.data['email'] == newEmail) {
    int len = record.data['requestEmail'].length;
    for (int i = 0; i < len; i++) {
      if(record.data['requestEmail'][i] != newEmail){
        names.add(record.data['requestName'][i]);
        emails.add(record.data['requestEmail'][i]);
      }
      else
        continue;
    }
  }
}
print(names);

body: ListView.separated(
    padding: const EdgeInsets.all(8),
    itemCount: names.length,
    itemBuilder: (BuildContext context, int index) {
      return Card(
        color: Colors.white,
        child: ListTile(
          onTap: () {},
          title: Text('${names[index]}'),
        ),
      );
    },
    separatorBuilder: (BuildContext context, int index) => const Divider(),
  ),

This is happening because getting data from firebase is async task, so it takes time.这是因为从 firebase 获取数据是异步任务,因此需要时间。 Meanwhile build method build the widget without data, so when you get data you have to call setState to build listview with actual data.同时 build 方法在没有数据的情况下构建小部件,因此当您获取数据时,您必须调用 setState 来构建带有实际数据的列表视图。

Moreover, i also like to suggest that you can use futurebuilder or streambuilder when you are working with async.此外,我还建议您在使用 async 时可以使用futurebuilderstreambuilder

void getRecords() async {
final records =
    await Firestore.instance.collection('records').getDocuments();
for (var record in records.documents) {
  if (record.data['email'] == newEmail) {
    int len = record.data['requestEmail'].length;
    for (int i = 0; i < len; i++) {
      if(record.data['requestEmail'][i] != newEmail){
        names.add(record.data['requestName'][i]);
        emails.add(record.data['requestEmail'][i]);
      }
      else
        continue;
    }
  }
  setState(() {});  // added line
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Flutter Listview 运行后为空,但仅填充 Flutter 热重载 - Flutter Listview after run empty, but filled only with Flutter Hot reload 是否可以在不使用 itembuilder 的情况下使用 Listview.seperated? - Is it possible to have a Listview.seperated without having to use a itembuilder? 如何在 Flutter 中自动滚动 Listview.seperated 中的所有 ListTiles? - How to automatically scroll through all the ListTiles in the Listview.seperated in Flutter? 如何在 listview.seperated 中的 itemBuilder 之前构建 seperatorBuilder - How to build seperatorBuilder before itemBuilder in listview.seperated Flutter ListView CastError 仅在热重载时 - Flutter ListView CastError only on Hot Reload ListView默认为空,仅当用户单击搜索栏或热重载时,数据才会显示在列表中 - ListView empty as default, data displaying in the List only when user click on search bar or hot reload 仅在颤振中热重载后才检索值 - Value is retrieved only after hot reload in flutter 数据仅在热重载后显示 - Data is showing only after hot reload Flutter 列表视图在热重载之前不显示最新记录 - Flutter listview not displaying latest records until hot reload 仅当我单击“搜索”表单或热重新加载时,才会填充ListView - ListView populated only if I click the Search form or hot reload
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM