【问题标题】:Flutter : Function need to wait [duplicate]Flutter:功能需要等待[重复]
【发布时间】:2021-09-09 02:14:18
【问题描述】:

这是我的代码

  Future<List<Record>> getRecordElements() async {
    int i=0;
    String at;
    var cont =0;
    List<String> name= [];
    var db = await FirebaseDatabase.instance.reference().child("Volunteers/"+widget.vname+"/Records");
      db.once().then((DataSnapshot snapshot){
        Map<dynamic, dynamic> values = snapshot.value;
        print(values);
        values.forEach((key,values) async {
          if(values["cont"]!=null){
              //Few complicated operations 
              values.forEach((key,values) {
              print(values);
              if(key=="name"){
                name.add(values);
              }
              
            });
        });
      });
   

    print("name " + name.toString());
     
     //few more operations
      return items;
    }

我已经修改了代码中不相关的部分。

问题是,name 是一个数组,其值是从数据库中获取的。只有数组设置好后,才能继续执行。

但是发生的事情是name 在设置之前就被打印出来了。因此,之后的其他操作也会受到影响。

我需要先完成抓取,然后才能继续。

请帮忙

【问题讨论】:

  • 除了.forEach 问题(不清楚为什么你将它的回调标记为async,因为它似乎没有做任何异步工作,除非那部分被省略),你忽略了await db.once().then() 的结果(然后调用.then 无论如何都是不必要的)。

标签: multithreading flutter dart asynchronous


【解决方案1】:

我认为你应该在初始化阶段获取你的数据,即你应该创建一个函数来从数据库中获取数据,然后从 initState 调用该函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2021-08-23
    • 2022-01-26
    • 1970-01-01
    • 2020-12-21
    • 2020-01-11
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多