这是导致错误的代码:
还值得注意的是,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/