Можно ли вернуть мой поток Firestore в виде списка моделей? - PullRequest
0 голосов
/ 12 марта 2020

Я сделал групповой сервис, который обеспечивает групповой поток. Этот поток имеет тип Stream<List<GroupModel>>, но я действительно не знаю, как я могу отобразить поток Firestore таким образом, чтобы я получил Stream<List<GroupModel>>. Это то, что я имею до сих пор.

import 'dart:async';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:wally_talk/data/models/group_model.dart';

class GroupService {

  static const groupCollectionKey = 'groups';
  final CollectionReference groupCollection =
      Firestore.instance.collection(groupCollectionKey);

  Stream<List<GroupModel>> groupStream(String userID) {
    return groupCollection
        .where('members', arrayContains: userID)
        .snapshots()
        .map((snapshot) =>
            snapshot.documents.map((document) => GroupModel.fromMap(id: document.documentID, data: document.data)));
  }

  Future postGroup(String groupName) async {
    // return await groupCollection.add(Group();
  }
}

И это моя модель группы

import 'package:flutter/foundation.dart';

class GroupModel
{
  final String id;
  final String name;
  final List<String> memberIDs;
  final String adminID;

  GroupModel({@required this.id, @required this.name, @required this.memberIDs, @required this.adminID}) 
  : assert(id != null),
  assert(name != null),
  assert(memberIDs != null),
  assert(adminID != null);

  factory GroupModel.fromMap({@required String id, @required Map data})
  {
    return GroupModel(
      id: id,
      name: data['name'] ?? '',
      memberIDs: data['members'] ?? List<String>(),
      adminID: data['adminID'] ?? '',
    );
  }

  Map<String, dynamic> toMap()
  {
    return Map.fromEntries([
      MapEntry<String, String>('id', id),
      MapEntry<String, String>('name', name),
      MapEntry<String, String>('adminID', adminID)
    ]);
  }
}

И в настоящее время я получаю следующее сообщение из терминала

AsyncSnapshot<List<GroupModel>>(ConnectionState.active, null, type 'MappedListIterable<DocumentSnapshot, GroupModel>' is not a subtype of type 'List<GroupModel>')

Когда я вызываю его из моего StreamBuilder с

stream: groupService.groupStream(userProvider.user.uid),

1 Ответ

0 голосов
/ 12 марта 2020
 Stream<List<GroupModel>> groupStream(String userID) {
return groupCollection
    .where('members', arrayContains: userID)
    .snapshots()
    .map((snapshot) => snapshot.documents.map((document) =>
        GroupModel.fromMap(id: document.documentID, data: document.data)).toList());

Извините, что хотел поставить это там, по моей вине. это должно работать, у меня похожий поток работает вот так!

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