【发布时间】:2020-06-24 10:47:11
【问题描述】:
我创建了一个提供群组流的群组服务。此流的类型为Stream<List<GroupModel>>,但我真的不知道如何以得到Stream<List<GroupModel>> 的方式映射Firestore 流。这就是我迄今为止所拥有的。
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),
【问题讨论】:
-
尝试添加一个 toList();在流的返回语句的末尾
-
我确实尝试过,它变成了
Future<List<Iterable<GroupModel>>>
标签: flutter dart google-cloud-firestore