【问题标题】:FutureBuilder shows error before displaying the resultFutureBuilder 在显示结果之前显示错误
【发布时间】:2020-04-25 18:30:29
【问题描述】:

我的futurebuilder 在屏幕上显示错误几秒钟,然后显示结果 这是错误日志:

The following NoSuchMethodError was thrown building FutureBuilder<DocumentSnapshot>(dirty, state: _FutureBuilderState<DocumentSnapshot>#fd0c5):
The method '[]' was called on null.
Receiver: null
Tried calling: []("title")

The relevant error-causing widget was: 
  FutureBuilder<DocumentSnapshot> file:///C:/Users/Admin/Desktop/Android/doorstep/lib/domain/repository/booking-repository.dart:7:12
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      BookingRepository.getTitle.<anonymous closure> (package:doorstep/domain/repository/booking-repository.dart:11:39)
#2      _FutureBuilderState.build (package:flutter/src/widgets/async.dart)
#3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4334:27)
#4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4223:15)

代码

Widget getTitle(String id) {
  return FutureBuilder(
    future: Firestore.instance.collection('products').document(id).get(),
    builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot){
      return ListTile(
        title: Text("${snapshot.data['title'].toString()}"),
      );
    }
  );
}

【问题讨论】:

    标签: firebase flutter


    【解决方案1】:

    试试

    FutureBuilder<AsyncSnapshot<DocumentSnapshot>>(
            builder: (context, snap) {
              if (snap.connectionState != ConnectionState.done) {
                //print('project snapshot data is: ${snap.data}');
                return Text("loading");
              } else {
                if (snap.hasError) {
                  return Text([snap.error.toString()]); 
                }
                else {
                  if (snap.hasData) {
    
    
                    return Text("${snap.data['title'].toString()}");
                  } else {
                    return Text("No DAta");
                  }
                }
              }
            },
            future:
            Firestore.instance.collection('products').document(id).get(),
        );
    

    【讨论】:

    • 这个答案给了我很好的结果,但是由于小部件库导致了一些错误。 FutureBuilder 在从 Firestore 数据库的文档中获取数据库时导致错误。请让我知道如何解决此错误
    • 你能说出确切的错误吗?或者发布一个包含详细信息的新问题并在此处参考。
    【解决方案2】:

    根据documentation

    ,您应该在尝试显示快照之前检查快照是否已有数据
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      if (snapshot.hasData) {
        // return something
      } else if (snapshot.hasError) {
        // Manage error
      } else {
        // return something for the user to wait
      }
    }
    

    【讨论】:

      【解决方案3】:

      如果您不向FutureBuilderinitialData: 参数提供任何数据,当FutureBuilder 被推入小部件树时,您将收到null。

      也在FutureBuilderbuilder:

      builder: (BuildContext context, AsyncSnapshot snapshot) {
          if(snapshot.hasData){ // <-- check this before using data. true if it has data false if null.
      
          } else {
      
          }
      }
      

      希望对你有帮助,如有疑问请评论。

      【讨论】:

        猜你喜欢
        • 2012-11-22
        • 2021-01-02
        • 2018-10-31
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多