Flutter / Dart FutureBuilder:NoSuchMethodError:方法“ []”在null上被调用

时间:2019-09-22 15:00:59

标签: flutter dart

我有以下问题。每当futurebuilder重新执行时,终端

中都会出现以下错误
  

NoSuchMethodError:方法'[]'在null上调用

尽管如此,该应用程序仍能正常工作,因为总是会产生异常。

很遗憾,我还没有找到合适的答案。

void initState(){                                                         
    _getdata = getdata();                                               
    super.initState();
}

Future getdata() async {                                                
   DocumentReference qn = Firestore.instance.collection("data").document("datatxt");                               
   return qn.get();                                                         
}

...
child: FutureBuilder(
            future: _getdata,
             builder: (BuildContext context, snap){
                  return Container(
                        width: MediaQuery.of(context).size.width,
                        color: Colors.green,
                        child: Text(snap.data['Text1']),
                      );                 
                    },
                  ),

Another exception was thrown: NoSuchMethodError: The method '[]' was called on null

1 个答案:

答案 0 :(得分:0)

在Flutter上使用dart Futures(异步/等待)时,您应该准备3种可能状态的小部件。

  1. 未完成
  2. 已完成值
  3. 已完成错误

我建议您使用FutureBuilder,通过检查构建器函数内部快照的ConnectionState,StreamBuilder的工作方式也相同。

我使用这种方法:

 FutureBuilder(
     future: _getdata,
     builder: (BuildContext context, AsyncSnapshot snap){
         switch (snapshot.connectionState) {
             // Uncompleted State
             case ConnectionState.none:
             case ConnectionState.waiting:
                 return Center(child: CircularProgressIndicator());
             break;
             default:
                 // Completed with error
                 if (snapshot.hasError)
                     return Container(Text(snapshot.error.toString()));

                 // Completed with data
                 return Container(
                        width: MediaQuery.of(context).size.width,
                        color: Colors.green,
                        child: Text(snap.data['Text1']),
                        );
)

引用Youtube

FutureBuilder

Dart Futures