Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 按下按钮时如何显示FutureBuilder对话框?_Firebase_Dart_Flutter_Future_Builder - Fatal编程技术网

Firebase 按下按钮时如何显示FutureBuilder对话框?

Firebase 按下按钮时如何显示FutureBuilder对话框?,firebase,dart,flutter,future,builder,Firebase,Dart,Flutter,Future,Builder,我用FutureBuilder上传图像FirebaseStorage,当我按下上传按钮时,我想显示一个等待对话框。在FireStorage上成功上载图像,但未显示任何内容。我的密码怎么了?我认为FutureBuilder返回小部件并按下按钮无效。也许这就是问题所在。或者我给FutureBuilder打错电话了。你对我的错误代码有什么建议吗 这是我的密码 Widget buildBody(BuildContext context) { return new Single

我用FutureBuilder上传图像FirebaseStorage,当我按下上传按钮时,我想显示一个等待对话框。在FireStorage上成功上载图像,但未显示任何内容。我的密码怎么了?我认为FutureBuilder返回小部件并按下按钮无效。也许这就是问题所在。或者我给FutureBuilder打错电话了。你对我的错误代码有什么建议吗

这是我的密码



    Widget buildBody(BuildContext context) {
        return new SingleChildScrollView(
          child: new Column(
            children: [
              new SizedBox(
                width: double.infinity,
                child: new RaisedButton(
                  child: new Text('Upload'),
                  onPressed:  () {
                    futureBuilder();
                  },
                ),
              ),
            ],
          ),
        );
      }

     Future mediaUpload() async {
        final fileName = DateTime.now().millisecondsSinceEpoch.toString() + '.jpg';
        final StorageReference storage = FirebaseStorage.instance.ref().child(fileName);
        final StorageUploadTask task = storage.putFile(_image);
        return task.future;
      }

      Widget futureBuilder() {
        return new FutureBuilder(
          future: mediaUpload(),
          builder: (BuildContext context, AsyncSnapshot snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                print('ConnectionState.none');
                return new Text('Press button to start.');
              case ConnectionState.active:
                print('ConnectionState.active');
                return new Text('');
              case ConnectionState.waiting:
                waitingDialog(context);
                return waitingDialog(context);
              case ConnectionState.done:
                print('ConnectionState.done');
                if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
                print(snapshot.data.downloadUrl);
                Navigator.of(context).pushReplacementNamed('home');
                return new Text('Result: ${snapshot.data.downloadUrl}');
            }
          },
        );
      }

      waitingDialog(BuildContext context) {
        return showDialog(
          context: context,
          barrierDismissible: false,
          builder: (BuildContext context) {
            return new Center(
              child: new SizedBox(
                width: 40.0,
                height: 40.0,
                child: const CircularProgressIndicator(
                  value: null,
                  strokeWidth: 2.0,
                ),
              ),
            );
          },
        );
      }


我不能100%确定为什么
FutureBuilder
不起作用。但我有一个猜测。在上面的示例中,
FutureBuilder
未连接到widgetTree(屏幕)。未附加表示从
FutureBuilder
返回的值不显示在屏幕中。在这种情况下,
文本
基于未连接到屏幕的
快照.connectionState
返回

解决方法:(我已经测试过了,它成功了,你能验证一下吗)


谢谢你,迪内什,它很有魅力。但是如何使用FutureBuilder呢?我不明白。我将尝试找出
FutureBuilder
在这种情况下不起作用的原因。我查看了
FutureBuilder
,但什么也没得到。我想我的猜测是正确的。如果我发现了什么,我会让你知道的。请做我想做的事情。如果我得到什么,我也会让你知道。有没有从future builder调用警报对话框的解决方案?
futureBuilder(BuildContext context) {
  mediaUpload().then((task) {          // fire the upload
    Navigator.of(context).maybePop();  // remove the dialog on success upload
  });                                  // we can use task(which returned from
                                       // mediaUpload()) to get the values like downloadUrl.
  waitingDialog(context);             // show the spinner dialog
}