【问题标题】:Future in flutter [duplicate]扑腾中的未来[重复]
【发布时间】:2021-03-09 09:58:26
【问题描述】:

我有一个疑问,有什么方法可以让我的应用程序等到来自 firebase 的读数完成?

例如:

假设我想从 firebase 获取一个值,然后我想分配给变量,但是当应用程序启动时我不想看到一个空屏幕,我可以使用进度条,但我不想一个空白的。

       Future<String>change()async{
       await FirebaseFirestore.instance.collection('Users').where('mail',isEqual to 'test@gmail.com').get().then((value){
       value.docs.forEach((result){
        data1 = result.data()['rule'];
        });
       });
       }

      print (data);

如果我在方法外打印数据我会得到null,我怎样才能得到一个进度条,让变量只有在从数据库接收到值后才显示?

【问题讨论】:

  • 你应该学习flutter的状态管理我可以推荐你学习bloc bloclibrary.dev/#

标签: firebase flutter google-cloud-firestore async-await


【解决方案1】:

我认为您正在搜索 Future.builder https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

有了这个,您可以在数据加载时获得一个加载屏幕,完成后您可以返回您想要的构建函数。

您的代码应如下所示:

Future changeFuture;

@override
  void initState() {
    super.initState();
    changeFuture = change();
  }

@override
  Widget build(BuildContext context) {
   return FutureBuilder(
          future: changeFuture,
          builder: (context, snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                return Text('None');
              case ConnectionState.active:
                return Text('Active');
              case ConnectionState.waiting:
                return Text('Loading');
              case ConnectionState.done:
                return Container(Your content here)
              default:
                return Text('default')

【讨论】:

    猜你喜欢
    • 2021-02-05
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2022-01-02
    • 2021-03-19
    • 2021-07-08
    相关资源
    最近更新 更多