Streambuilder, возвращающий null внутри потребителя

Я пытаюсь получить данные из firestore с помощью streambuilder, который обернут в потребителя, как показано ниже. Однако по какой-то причине он возвращает нулевую ошибку.

Я не понимаю, почему это возвращает ошибку, когда я использую потребитель, но отлично работает без него. Должен ли я ссылаться на коллекцию по-другому при использовании потребителя?

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,
                ),

Трассировки стека:

I / flutter (11582): ══╡ ИСКЛЮЧЕНИЕ, ЗАХОТЕННОЕ В БИБЛИОТЕКЕ ВИДЖЕТОВ ╞════════════════════════════════════ ═════════════════════════

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.

person alex jasper    schedule 17.09.2019    source источник
comment
вы можете опубликовать свой stacktrace с ошибкой?   -  person Logemann    schedule 17.09.2019
comment
И запрашиваемая вами коллекция имеет тот же ключ, что и искомый документ?   -  person Logemann    schedule 17.09.2019
comment
@Marc только что опубликовал трассировку стека, а также дополнительный код с ключом   -  person alex jasper    schedule 17.09.2019
comment
Можете ли вы сделать печать (снимок) после if (snapshot.hasData) и разместить здесь вывод консоли?   -  person Logemann    schedule 17.09.2019
comment
Вы нашли решение для этого? У меня такая же проблема   -  person Mrunal Joshi    schedule 03.09.2020


Ответы (1)


Я не заметил ничего плохого в вашем коде. Я думаю, что происходит то, что вы еще не потопили никакой ценности в потоке. Возможно, вы могли бы установить initialValue для StreamBuilder, чтобы предотвратить это.

person Rodrigo Bastos    schedule 17.09.2019
comment
спасибо, это что-то вроде того, что вы имеете в виду? return StreamBuilder ‹DocumentSnapshot› (поток: Firestore.instance .collection (userModel.uid) .document (userModel.uid) .snapshots (), initialData: 0, builder: (context, snapshot) { - person alex jasper; 17.09.2019
comment
Что-то в этом роде, но вы, вероятно, захотите новый объект DocumentSnapshot как initalData, а не номер 0 - person Rodrigo Bastos; 17.09.2019
comment
если вы разместите вывод оператора print (), как описано выше, отследить ошибку будет намного проще. - person Logemann; 18.09.2019