Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何使代码停止执行下一行,直到函数在flutter中完成其工作?_Firebase_Flutter_Dart_Google Cloud Firestore_Firebase Storage - Fatal编程技术网

Firebase 如何使代码停止执行下一行,直到函数在flutter中完成其工作?

Firebase 如何使代码停止执行下一行,直到函数在flutter中完成其工作?,firebase,flutter,dart,google-cloud-firestore,firebase-storage,Firebase,Flutter,Dart,Google Cloud Firestore,Firebase Storage,我有一个云存储,通过从我的应用程序上传数据来存储数据。我还有一个云firestore数据库,在那里我存储上传文件的文件名和URL。我面临的问题是,我的代码试图在上传数据/文件之前收集url,因此崩溃。所以我希望我的代码停在那里,完成任务并转到下一行。我甚至在代码中使用了async/await,但它仍然没有帮助 这是我的密码:- Future savingfile(List<int> asset, String name) async { StorageReference r

我有一个云存储,通过从我的应用程序上传数据来存储数据。我还有一个云firestore数据库,在那里我存储上传文件的文件名和URL。我面临的问题是,我的代码试图在上传数据/文件之前收集url,因此崩溃。所以我希望我的代码停在那里,完成任务并转到下一行。我甚至在代码中使用了async/await,但它仍然没有帮助

这是我的密码:-

 Future savingfile(List<int> asset, String name) async {
    StorageReference reference = FirebaseStorage.instance.ref().child(name);
    StorageUploadTask uploadTask = reference.putData(asset);
    String url = await (await uploadTask.onComplete).ref.getDownloadURL();
    //print(url);
    //documentFileUpload(url);
    return url;
 }
 getfilelink(String s) async {
    StorageReference ref = FirebaseStorage.instance.ref().child('$s');
    String url = (await ref.getDownloadURL()).toString();

    return url;
  }
 saveeverything(List filechosen) async {
    for (int i = 0; i < filechosen.length; i++) {
      await savingfile(filechosen[i].readAsBytesSync(), filenames[i]);
    }
  }

void updatedata() async {
    ..... //some more codes are here.

    await saveeverything(filechosen); //i want my code to wait and finish the task over here and go to next line.

    String fileurl = "", filedetails = "";
      if (filenames.length == 0) {
          filedetails = "none";
          fileurl = "none";
        } else {
          for (int i = 0; i < filenames.length; i++) {
            filedetails += filenames[i].toString() + " ";
          }
          for (int i = 0; i < filenames.length; i++) {
            String t =  getfilelink(filenames[i]) + " ";
            fileurl += t;
          }
        }
    
    await notices.add({
      "event": notice,
      "date": date,
      "description": detail,
      "index": ds.docs.length + 1,
      "files": filedetails,
      "url": fileurl
    });
}
Future savingfile(列表资产、字符串名称)异步{
StorageReference=FirebaseStorage.instance.ref().child(名称);
StorageUploadTask uploadTask=reference.putData(资产);
字符串url=await(await uploadTask.onComplete);
//打印(url);
//文件上传(url);
返回url;
}
getfilelink(字符串s)异步{
StorageReference ref=FirebaseStorage.instance.ref().child(“$s”);
字符串url=(wait ref.getDownloadURL()).toString();
返回url;
}
保存所有内容(列表文件选择)异步{
for(int i=0;i
这是我的密码,希望你能理解

这是我得到的错误

E/flutter ( 4499): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: Class 'Future<dynamic>' has no instance method '+'.
E/flutter ( 4499): Receiver: Instance of 'Future<dynamic>'
E/flutter ( 4499): Tried calling: +(" ")

E/flatter(4499):[错误:flatter/lib/ui/ui\u dart\u state.cc(166)]未处理的异常:NoSuchMethodError:类“Future”没有实例方法“+”。
E/颤振(4499):接收器:“未来”实例
E/flatter(4499):尝试调用:+(“”)

谢谢大家!

您的updatedata函数必须是Future类型(不确定这是否有效,或者是否必须是Future才能返回某些结果)

在你的有状态/无状态课程中,你最终会等待未来的到来,比如

小部件构建(构建上下文){
returnfuturebuilder(
未来:你的未来,
生成器:(上下文,快照){

我没有理解你的意思我没有任何分析选项.yaml文件..我找不到你的错误是因为:
getfilelink(filenames[i])+“
getfilelink
异步的,因此它返回一个
未来的
必须等待
才能对其使用
+
。(另外,你应该为你的函数声明返回类型。)我的代码不会在开始时运行,而是在点击按钮后运行,因此我没有任何小部件,也没有任何要构建的东西,没有future builder可以吗?你可以将FutureBuilder放在输出小部件前面,如builder:(上下文,快照){Text(myFutureText);}在加载完成之前,您可能希望在此位置显示一些旋转的轮子。如果这有帮助,接受或向上投票,答案会很好:-)