【发布时间】:2019-03-26 21:20:13
【问题描述】:
复制步骤
我正在尝试将 bloc 模式与 firebase 一起使用,但由于没有使用 firebase 和 bloc pattern 的好的教程,因此遇到了困难。
我在做这件事的时候遇到了奇怪的事情,努力找出问题,但没有找到。
我已经创建了UserBloc,并在听完Firestore snapshot之后尝试设置UserModel。
class UserBloc extends Object {
final _user = StreamController<UserModel>.broadcast();
final _uid = StreamController<String>.broadcast();
Stream<UserModel> get user => _user.stream;
Stream<String> get uid => _uid.stream;
Function(UserModel) get setUser => _user.sink.add;
Function(String) get setUID => _uid.sink.add;
Stream<DocumentSnapshot> userStream;
UserBloc() {
uid.listen((uid) {
print('user : $uid');
if (uid != null) {
fromUID(uid);
}
});
}
fromUID(String uid) {
print('fromUID');
userStream = Firestore.instance.collection('users').document(uid).snapshots();
/// works ok when I delete below subscription
userStream.listen((data) {
});
}
dispose() {
_user.close();
_uid.close();
}
}
然后我在我的小部件中使用了StreamBuilder,如下所示。
StreamBuilder(
stream: userBloc.userStream,
builder: (context, snapshot) {
print(snapshot.connectionState);
print(snapshot.data);
return Text('testing');
},
);
问题是 snapshot.connectionState** 始终是 **waiting。但是,当我删除订阅代码 userStream.listen((data) { 时,我能够让它工作。所有示例都在bloc 的构造函数中进行监听和设置数据。我不知道为什么会这样。
【问题讨论】:
-
@anmol.maljhail 我已经尝试公开为广播流。没有运气。
标签: firebase flutter google-cloud-firestore subscription