【问题标题】:How to show firebase storage file upload progress如何显示firebase存储文件上传进度
【发布时间】:2021-11-14 04:28:42
【问题描述】:

我正在尝试在进度指示器中显示我上传到 Firebase 存储的文件的进度,我该如何实现?

注意我是同时上传两个文件的。

这是我的代码。

Future<String?> _uploadFileToStorage(BuildContext context,File file, path) async {
    try {
      var task = _firebaseStorage.ref().child(path);
      var status = await task.putFile(file);
    print(status.state);
      return task.getDownloadURL();
    } catch (err) {
      print(err.toString());
    }
  }

【问题讨论】:

标签: flutter firebase-storage


【解决方案1】:

首先获取变量 bool load 并在您的函数开始时创建初始 load=false 并在函数结束时创建 load=true 然后在函数结束时 load=false,所以在您的父小部件 load==true?CircularProgressIndicator():Scaffold(), 所以你在这里发挥作用

Future<String?> _uploadFileToStorage(BuildContext context,File file, path) async {

        try {
       setState({
          load=true;
            });
          var task = _firebaseStorage.ref().child(path);
          var status = await task.putFile(file);
        print(status.state);
          return task.getDownloadURL();
        setState({
            load=false;
              })
        } catch (err) {
          print(err.toString());
      setState({
            load=false;
              })
        }
      }

【讨论】:

    【解决方案2】:

    您只需使用以下代码即可跟踪上传进度:

    status.snapshotEvents.listen((TaskSnapshot snapshot) {
            print('Task state: ${snapshot.state}');
            print('Progress: ${(snapshot.bytesTransferred / snapshot.totalBytes) * 100} %');
    
            switch (snapshot.state) {
              case TaskState.paused:
                // TODO: Handle this case.
                break;
              case TaskState.running:
                return CircularProgressIndicator(
                    value: (snapshot.bytesTransferred > 0 && snapshot.totalBytes > 0) ? snapshot.bytesTransferred / snapshot.totalBytes : null);
    
                break;
              case TaskState.success:
                // TODO: Handle this case.
                break;
              case TaskState.canceled:
                // TODO: Handle this case.
                break;
              case TaskState.error:
                // TODO: Handle this case.
                break;
            }
          }, onError: (e) {
            // The final snapshot is also available on the status via `.snapshot`,
            // this can include 2 additional states, `TaskState.error` & `TaskState.canceled`
            print(status.snapshot);
          });
    

    【讨论】:

    • 得到这个错误`没有为类型'TaskSnapshot'定义getter'snapshotEvents'。 `
    猜你喜欢
    • 2018-01-19
    • 2023-03-03
    • 2020-05-24
    • 2016-09-27
    • 1970-01-01
    • 2011-03-10
    • 2020-04-08
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多