Я сделал групповой сервис, который обеспечивает групповой поток. Этот поток имеет тип 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),