如何修复'getter'文档“被调用为null。”在颤抖

问题描述 投票:-2回答:1

我正在使用flutter和firebase来创建一个移动应用程序。我在我的火场上有2个收藏品,我想读一下“帖子”中的所有文件。但是,当我这样做时,一个错误说getter“documents”被调用为null。

    Widget getContent(BuildContext context) {
      return StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance.collection("posts").snapshots(),
        builder: (context, snap) {
          return CarouselSlider(
            enlargeCenterPage: true,
            height: MediaQuery.of(context).size.height,
            items: getItems(context, snap.data.documents),
        );
        },
        );
    }

    List<Widget> getItems(BuildContext context, List<DocumentSnapshot> 
    docs){
      return docs.map(
        (doc) {
          String content = doc.data["content"];
          return Text(content);
        }
      ).toList();
    }

我希望与所有文件中的数据一起交付,坚果反而得到了这个错误:

I/flutter (30878): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (30878): The following NoSuchMethodError was thrown building StreamBuilder<QuerySnapshot>(dirty,
I/flutter (30878): dependencies: [MediaQuery], state: _StreamBuilderBaseState<QuerySnapshot,
I/flutter (30878): AsyncSnapshot<QuerySnapshot>>#72d38):
I/flutter (30878): The getter 'documents' was called on null.
I/flutter (30878): Receiver: null
I/flutter (30878): Tried calling: documents
I/flutter (30878): When the exception was thrown, this was the stack:
V/NativeCrypto(30878): Registering com/google/android/gms/org/conscrypt/NativeCrypto's 284 native methods...
I/flutter (30878): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter (30878): #1      PostsPageState.getContent.<anonymous closure>
package:reach_out_kef_global/main.dart:140
I/flutter (30878): #2      StreamBuilder.build 
package:flutter/…/widgets/async.dart:423
I/flutter (30878): #3      _StreamBuilderBaseState.build 
package:flutter/…/widgets/async.dart:125
I/flutter (30878): #4      StatefulElement.build 
package:flutter/…/widgets/framework.dart:3825
I/flutter (30878): #5      ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3736
I/flutter (30878): #6      Element.rebuild 
package:flutter/…/widgets/framework.dart:3559
I/flutter (30878): #7      ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:3716
I/flutter (30878): #8      StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:3864
I/flutter (30878): #9      ComponentElement.mount 
package:flutter/…/widgets/framework.dart:3711
I/flutter (30878): #10     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:2956
I/flutter (30878): #11     Element.updateChild 
package:flutter/…/widgets/framework.dart:2759
I/flutter (30878): #12     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:3747
I/flutter (30878): #13     Element.rebuild 
package:flutter/…/widgets/framework.dart:3559
I/flutter (30878): #14     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:3716
I/flutter (30878): #15     StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:3864
I/flutter (30878): #16     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:3711
...

请帮忙!

android firebase flutter google-cloud-firestore mobile-application
1个回答
0
投票

在调用snapshot.data.documents之前,应检查snapshot.data是否为null。这通常是我在流构建器的构建方法中做的第一件事。如果流是空的,就像它首次被侦听时,但在firestore返回所请求的数据之前,snapshot.data将为null。在这种情况下,您可能希望显示容器或循环进度指示器:

Widget getContent(BuildContext context) {
  return StreamBuilder<QuerySnapshot>(
    stream: Firestore.instance.collection("posts").snapshots(),
    builder: (context, snap) {

      //just add this line
      if(snap.data == null) return CircularProgressIndicator();

      return CarouselSlider(
        enlargeCenterPage: true,
        height: MediaQuery.of(context).size.height,
        items: getItems(context, snap.data.documents),
    );
    },
    );
}

List<Widget> getItems(BuildContext context, List<DocumentSnapshot> 
docs){
  return docs.map(
    (doc) {
      String content = doc.data["content"];
      return Text(content);
    }
  ).toList();
}
© www.soinside.com 2019 - 2024. All rights reserved.