Возникли проблемы при прослушивании потока массива объектов из коллекции Firestore - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь прочитать коллекцию из Firestore в своем приложении. По сути, я получаю снимок коллекции и сопоставляю его с моим объектом dart. но когда я слушаю поток или использую поток в StreamProvider или StreamBuilder, данные снимка всегда равны нулю!

Во время отладки я заметил, что данные, полученные как json и сопоставленные правильно, и результат приводятся к списку, поэтому мой поток должен содержать правильные данные, но при прослушивании данные, к сожалению, все еще равны нулю.

var ref = _db.collection('routes');
    final standardSerializers =
        (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();

    ref.snapshots().map((list) {
      list.documents.map((doc) {
        print("Json:   " + doc.data.toString());
        print("Object:   " +
            standardSerializers
                .deserializeWith(ClimbingRoute.serializer, doc.data)
                .toString());

        return standardSerializers.deserializeWith(
            ClimbingRoute.serializer, doc.data);
      }).toList();
    }).listen((onData) {
      print("On listen: " + onData.toString());
    });

Выход консоли:

00:21:31.055 69 info flutter.tools I/flutter (13897): Json:   {grade: 4c, gradingStyle: french, belayingStyle: auto, closure: flash, outCome: success, tags: []}
00:21:31.056 70 info flutter.tools I/flutter (13897): Object:   ClimbingRoute {
00:21:31.056 71 info flutter.tools I/flutter (13897):   outCome=success,
00:21:31.056 72 info flutter.tools I/flutter (13897):   gradingStyle=french,00:21:31.056 73 info flutter.tools I/flutter (13897):   grade=4c,00:21:31.056 74 info flutter.tools I/flutter (13897):   belayingStyle=auto,00:21:31.056 75 info flutter.tools I/flutter (13897):   closure=flash,
00:21:31.056 76 info flutter.tools I/flutter (13897):   tags={},
00:21:31.056 77 info flutter.tools I/flutter (13897): }00:21:31.056 78 info flutter.tools I/flutter (13897): On listen: null

1 Ответ

0 голосов
/ 21 июня 2019

Мне удалось решить проблему другим способом, но я все еще не уверен, почему приведенный выше код не работает так, как я ожидаю!

В основном я решил использовать StreamTransformer, поскольку, очевидно, что-то не так в моем коде при преобразовании скарта.Я проверил это с StreamBuilder, и нормальное прослушивание работало нормально.

StreamTransformer<QuerySnapshot, List<ClimbingRoute>> streamTransformer =
      StreamTransformer.fromHandlers(
    handleData: (data, sink) {
      final standardSerializers =
          (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build();
      return sink.add(data.documents.map(
        (document) {
          return standardSerializers.deserializeWith(
              ClimbingRoute.serializer, document.data);
        },
      ).toList());
    },
);
_db.collection('routes').transform(streamTransformer).listen((onData) => print(onData.data));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...