Flutter Streambuilder在使用者内部返回null

Flutter Streambuilder在使用者内部返回null,flutter,google-cloud-firestore,flutter-provider,Flutter,Google Cloud Firestore,Flutter Provider,我正在尝试使用streambuilder从firestore中提取数据,streambuilder封装在一个消费者中,如下所示。然而,由于某种原因,它返回了一个空错误 我不明白为什么在使用consumer时返回错误,但在没有它的情况下运行良好。当我使用消费者时,我是否必须以不同的方式引用集合 class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); fina

我正在尝试使用streambuilder从firestore中提取数据,streambuilder封装在一个消费者中,如下所示。然而,由于某种原因,它返回了一个空错误

我不明白为什么在使用consumer时返回错误,但在没有它的情况下运行良好。当我使用消费者时,我是否必须以不同的方式引用集合

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    final _width = MediaQuery
        .of(context)
        .size
        .width;
    final _height = MediaQuery
        .of(context)
        .size
        .height;
return Consumer<CurrentModel>(builder: (context, currentModel, child) {
      return StreamBuilder<DocumentSnapshot>(
        stream: Firestore.instance
            .collection(currentModel.uid)
            .document(currentModel.uid).snapshots(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return Stack(
children: <Widget>[
                new Container(
                  color: Colors.blue,
                ),
                new Image.network(
                  snapshot.data['imageurl'].toString(),
                  fit: BoxFit.fill,
                ),
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>new_MyHomePageState();
}
类_MyHomePageState扩展状态{
@凌驾
小部件构建(构建上下文){
最终宽度=MediaQuery
.of(上下文)
.尺寸
.宽度;
最终高度=MediaQuery
.of(上下文)
.尺寸
.身高;
返回使用者(生成器:(上下文、当前模型、子项){
返回流生成器(
流:Firestore.instance
.collection(currentModel.uid)
.document(currentModel.uid).snapshots(),
生成器:(上下文,快照){
if(snapshot.hasData){
返回堆栈(
儿童:[
新容器(
颜色:颜色,蓝色,
),
新图像网络(
snapshot.data['imageurl'].toString(),
fit:BoxFit.fill,
),
堆栈跟踪:

I/颤振(11582):══╡ WIDGETS库捕获到异常╞═══════════════════════════════════════════════════════════

I/flutter (11582): The following NoSuchMethodError was thrown building StreamBuilder<DocumentSnapshot>(dirty, state:
I/flutter (11582): _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot<DocumentSnapshot>>#99271):
I/flutter (11582): The method '[]' was called on null.
I/flutter (11582): Receiver: null
I/flutter (11582): Tried calling: []("imageurl")
I/flutter (11582): 
I/flutter (11582): User-created ancestor of the error-causing widget was:
I/flutter (11582):   Consumer<currentModel>
I/flutter (11582):   file:///Users/alexjasper/AndroidStudioProjects/flutter_myapp/lib/main.dart:48:12
I/flutter (11582): 
I/flutter (11582): When the exception was thrown, this was the stack:
I/flutter (11582): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
I/flutter (11582): #1      DocumentSnapshot.[] (package:cloud_firestore/src/document_snapshot.dart:29:42)
I/flutter (11582): #2      _MyHomePageState.build.<anonymous closure>.<anonymous closure> (package:flutter_myapp/main.dart:61:32)
I/flutter (11582): #3      StreamBuilder.build (package:flutter/src/widgets/async.dart:425:74)
I/flutter (11582): #4      _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:125:48)
I/flutter (11582): #5      StatefulElement.build (package:flutter/src/widgets/framework.dart:4047:27)
I/flutter (11582): #6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3941:15)
I/flutter (11582): #7      Element.rebuild (package:flutter/src/widgets/framework.dart:3738:5)
I/flutter (11582): #8      BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2348:33)
I/flutter (11582): #9      WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:760:20)
I/flutter (11582): #10     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:280:5)
I/flutter (11582): #11     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1033:15)
I/flutter (11582): #12     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:975:9)
I/flutter (11582): #13     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:891:5)
I/flutter (11582): #17     _invoke (dart:ui/hooks.dart:249:10)
I/flutter (11582): #18     _drawFrame (dart:ui/hooks.dart:207:3)
I/flutter (11582): (elided 3 frames from package dart:async)
I/flutter (11582): 
I/flutter (11582): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (11582): Another exception was thrown: NoSuchMethodError: The method '[]' was called on null.
I/flatter(11582):在building StreamBuilder中抛出以下NoSuchMethodError(脏,状态:
I/颤振(11582):_streambuilder基底状态#99271):
I/flatter(11582):对null调用了方法“[]”。
I/颤振(11582):接收器:空
I/flatter(11582):尝试调用:[](“imageurl”)
I/颤振(11582):
I/flatter(11582):用户创建的导致错误的小部件的祖先是:
I/颤振(11582):耗电元件
I/颤振(11582):file:///Users/alexjasper/AndroidStudioProjects/flutter_myapp/lib/main.dart:48:12
I/颤振(11582):
I/flatter(11582):当抛出异常时,这是堆栈:
I/颤振(11582):#0 Object.noSuchMethod(dart:核心补丁/Object_补丁。dart:51:5)
I/flatter(11582):#1文档快照。[](包:cloud_firestore/src/document_snapshot.dart:29:42)
I/flatter(11582):#2 MyHomePageState.build..(包:flatter_myapp/main.dart:61:32)
I/flatter(11582):#3 StreamBuilder.build(包:flatter/src/widgets/async.dart:425:74)
I/flatter(11582):#4_StreamBuilderBaseState.build(包:flatter/src/widgets/async.dart:125:48)
I/flatter(11582):#5 StatefulElement.build(包:flatter/src/widgets/framework.dart:4047:27)
I/flatter(11582):#6 ComponentElement.performRebuild(包:flatter/src/widgets/framework.dart:3941:15)
I/flatter(11582):#7 Element.rebuild(包:flatter/src/widgets/framework.dart:3738:5)
I/flatter(11582):#8 BuildOwner.buildScope(包:flatter/src/widgets/framework.dart:2348:33)
I/flatter(11582):#9 WidgetsBinding.drawFrame(包:flatter/src/widgets/binding.dart:760:20)
I/flatter(11582):#10渲染器绑定。_handlePersistentFrameCallback(包:flatter/src/rendering/binding.dart:280:5)
I/flatter(11582):#11 SchedulerBinding._invokeFrameCallback(包:flatter/src/scheduler/binding.dart:1033:15)
I/flatter(11582):#12 SchedulerBinding.handleDrawFrame(包:flatter/src/scheduler/binding.dart:975:9)
I/flatter(11582):#13计划绑定。#手持绘图框架(包:flatter/src/scheduler/binding.dart:891:5)
I/flatter(11582):#17_调用(dart:ui/hooks.dart:249:10)
I/flatter(11582):#18 40;省道:ui/hooks.省道:207:3)
I/颤振(11582):(从包dart中删除3帧:异步)
I/颤振(11582):
I/颤振(11582):════════════════════════════════════════════════════════════════════════════════════════════════════
I/flatter(11582):引发了另一个异常:NoSuchMethodError:对null调用了方法“[]”。

我没有发现您的代码有任何错误。我认为发生的情况是您还没有在流上放入任何值。也许您可以为StreamBuilder设置一个initialValue以防止出现这种情况。

您可以发布带有错误的stacktrace吗?并且您正在查询的集合具有相同的“键”作为您要查找的文档?@Marc刚刚发布了堆栈跟踪以及带有键的附加代码。您可以在if(snapshot.hasData)之后打印(快照)吗然后将控制台输出发布到这里?您得到解决方案了吗?我也遇到了同样的问题谢谢,这与您的意思类似吗?返回StreamBuilder(流:Firestore.instance.collection(userModel.uid).document(userModel.uid).snapshots(),initialData:0,builder:(context,snapshot){类似的东西,但是您可能需要的是一个新的DocumentSnapshot对象,如initalData,而不是数字0。如果您像上面所述发布print()语句输出,那么跟踪错误就会容易得多。