android - 由于QuerySnapshot为null,即使在initState()中初始化后,也对null调用了getter 'docs'

标签 android firebase flutter dart google-cloud-firestore

这是导致错误的代码:
还值得注意的是,print('mysnapshot.docs.length')打印的长度很好,表明mysnapshot不为null
在initState之后。但是,在小部件构建器块中,由于我无法弄清原因,mysnapshot的值为null。
我是Flutter的新手,很高兴能得到一个愚蠢的答案。这也是我对Stackoverflow的第一个问题。提前致谢。

class _PlayQuizState extends State<PlayQuiz> {
  DatabaseService serv = new DatabaseService();
  QuerySnapshot mysnapshot;


  @override
  void initState() {

    serv.getQuestionData(widget.quizID).then((value){mysnapshot=value; print(mysnapshot.docs.length);});
  

    print("${widget.quizID}");
    super.initState();
  }
  

  @override
  Widget build(BuildContext context) {
    return Scaffold(appBar: AppBar(title: Row(
      children: [
        SizedBox(width: MediaQuery.of(context).size.width/5.8,),
        appbar(context),
      ],
    ),backgroundColor: Colors.transparent,elevation: 0.0,iconTheme: IconThemeData(color: Colors.black54),),body:
   

          Text(mysnapshot.docs.length.toString()), // Mysnapshot is null, can't figure out why
      ],),),);
  }
}

最佳答案

InitState和build方法彼此非常接近,因此通常在initState中声明的新变量不会出现在您的build方法中。您可以做的是利用FutureBuilder小部件,其中future参数将与initState中的声明完全相同。

FutureBuilder<QuerySnapshot>(
              future: serv.getQuestionData(widget.quizID),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.waiting) {
                  return CircularProgressIndicator();
                }
                return Text(snapshot.data);
              },
            ),

关于android - 由于QuerySnapshot为null,即使在initState()中初始化后,也对null调用了getter 'docs',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64767678/

相关文章:

android - 找不到实现(房间)

android - 无法更新 firebase 版本

flutter - 不正确使用ParentDataWidget。我认为我在这里没有太多选择,是吗?

Flutter - 检测屏幕上充满其他小部件的点击

android - Textview.settext() 给出空指针异常

android - Android XML 资源文件的正确结构

Android ListView onTouchEvent 并不总是给出 ACTION_DOWN

node.js - 如何将新的 firebase 模拟器添加到我现有的项目中?

node.js - Firebase 应用程序初始化失败,凭据无效(firebase 函数初始化)

android - 向 pubspec.yml 添加依赖项后,Flutter 应用程序无法在 android 中编译