【问题标题】:Flutter/Dart FutureBuilder: NoSuchMethodError: The method '[]' was called on nullFlutter / Dart FutureBuilder:NoSuchMethodError:方法'[]'在null上被调用
【发布时间】:2020-01-22 19:32:55
【问题描述】:

我有以下问题。每当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

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    当您在 Flutter 上使用 dart Futures (async/await) 时,您应该为小部件准备 3 种可能的状态。

    1. 未完成
    2. 用一个值完成
    3. 完成但出现错误

    我建议你使用 FutureBuilder,StreamBuilder 的工作方式也一样,通过检查 de builder 函数中快照的 ConnectionState。

    我使用这种方法:

     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

    【讨论】:

    • 这对我的 StreamBuilder 有帮助。完美运行!谢谢,@Matheus!
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2021-07-31
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2020-06-12
    • 2020-06-07
    相关资源
    最近更新 更多