我的直播有问题。我在项目中有一个活动的 StreamController.broadcast() 用于 2 个不同的屏幕。我在这个 Stream 上有一个监听方法,所以当存储在其中的值发生变化时,组件将使用新值进行更新。但是,即使听了,只修改一次后,Stream 就不再工作了(我可以向它添加值,但组件不再更新)
我的直播
StreamController<String> userProfilePhotoController = StreamController.broadcast();
“聆听”方法
此方法在initState方法中调用。
profilePhotoListen() {
controller.userProfilePhotoController.stream.listen(
(e) => setState(() {
//This is basically a 'print' function
Log.log(e, name: "AVATAR PATH");
}),
);
}
在 Stream 上设置值的方法
setProfileAvatar({required String path}) {
userProfilePhotoController.sink.add(path);
userProfilePhoto = path;
}
当第一次调用 setProfileAvatar({required String path})时,Stream 接收到值并且我的组件更新没有问题。但是当第二次调用该方法时,Stream 会收到该值,但组件不会更新。
组件
StreamBuilder<String>(
stream: controller.userProfilePhotoController.stream,
builder: (context, snapshot) {
if (snapshot.hasData && snapshot.data != null) {
return RegisterAvatar(
path: snapshot.data!,
onTap: () => Modular.to.pushNamed(
'.$kRouteRegisterProfilePicture'),
);
}
return RegisterAvatarPlaceholder(
onTap: () => Modular.to
.pushNamed('.$kRouteRegisterProfilePicture'),
);
},
),