【问题标题】:StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot<QuerySnapshot>):StreamBuilder<QuerySnapshot>(脏,状态:_StreamBuilderBaseState<QuerySnapshot,AsyncSnapshot<QuerySnapshot>):
【发布时间】:2020-12-19 01:42:08
【问题描述】:

我无法从 Firestore 中检索数据并出现如下错误,

════════ 小部件库捕获的异常 ══════════════════════════════════════════════════ ═════以下 断言被抛出构建 StreamBuilder(dirty, 状态:_StreamBuilderBaseState#e568b): 构建函数返回 null。

有问题的小部件是:StreamBuilder 构建函数 绝不能返回 null。

返回导致建筑小部件填充的空白空间 可用空间,返回“Container()”。返回一个空白空间 占用尽可能少的空间,返回 "Container(width: 0.0, 高度:0.0)"。

相关的导致错误的小部件是:StreamBuilder file:...dart:140:15 抛出异常时,这是堆栈:

#0 debugWidgetBuilderValue。 (包:flutter/src/widgets/debug.dart:300:7) #1 _Closure.call (dart:core-patch/function.dart) #2 debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:321:4) #3 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4569:7) #4 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4737:11) ...


下面是我的代码。

StreamBuilder<QuerySnapshot>(
                  stream: Firestore.instance.collection("currency").snapshots(),
                  builder: (context, snapshot) {
                  if (!snapshot.hasData){
                      print('test pharse');
                       Text("Loading.....");}
                    else {
                      List<DropdownMenuItem> currencyItems = [];
                      for (int i = 0; i < snapshot.data.documents.length; i++) {
                        DocumentSnapshot snap = snapshot.data.documents[i];
                        currencyItems.add(
                          DropdownMenuItem(
                            child: Text(
                              snap.documentID,
                              style: TextStyle(color: Color(0xff11b719)),
                            ),
                            value: "${snap.documentID}",
                          ),
                        );
                      }
                      return Row(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: <Widget>[
                          Icon(Icons.mail,
                              size: 25.0, color: Color(0xff11b719)),
                          SizedBox(width: 50.0),
                          DropdownButton(
                            items: currencyItems,
                            onChanged: (currencyValue) {
                              final snackBar = SnackBar(
                                content: Text(
                                  'Selected Currency value is $currencyValue',
                                  style: TextStyle(color: Color(0xff11b719)),
                                ),
                              );
                              Scaffold.of(context).showSnackBar(snackBar);
                              setState(() {
                                selectedCurrency = currencyValue;
                              });
                            },
                            value: selectedCurrency,
                            isExpanded: false,
                            hint: new Text(
                              "Choose Currency Type",
                              style: TextStyle(color: Color(0xff11b719)),
                            ),
                          ),
                        ],
                      );
                    }
                  }),

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    您需要在StreamBuilder!snapshot.hasData 部分的Text 小部件之前添加return

    if (!snapshot.hasData){
        print('test phrase');
        return Text("Loading.....");
    }
    

    【讨论】:

    • 我使用了 return 语句,在这种情况下,我没有收到任何错误,我得到的输出是 Loading.... 我的数据库中有数据。我的截图链接。 ibb.co/QKczmNQ
    • 我的理解是您的“异常被小部件库捕获”的问题已经解决。如果是这样,请考虑批准此答案。如果没有,请使用您的实际问题更新问题,或者考虑针对您将来遇到的新问题提出新问题
    猜你喜欢
    • 2021-08-03
    • 2021-04-27
    • 2020-11-13
    • 2022-11-19
    • 2021-03-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多