【发布时间】:2021-06-17 10:00:30
【问题描述】:
我是 Flutter bloc 架构的新手。 我有一个发出用户流的 AuthBloc。
现在,在我的一些较低级别的块中,我需要访问用户的 id,例如在 UserProfile 块中。 我无法决定哪种方法最好。
例如我可以:
-
订阅集团的用户 Stream 并在每次用户更改时触发 newUserEvent。这可以很好地工作,但由于我必须从存储库订阅用户配置文件编辑流,因此逻辑似乎很笨拙。
-
我想到的第二种方法是当我在该路由的 blocProvider 中创建它时,通过将 UserId 作为参数传递来实例化 bloc,例如将其作为路由参数传递。
class UserBloc extends Bloc<UserEvent, UserState> {
final String userId;
final UserRepository _userRepository;
StreamSubscription? _userDetailsSubscription;
UserBloc(this.userId, this._userRepository) : super(UserState.loading()) {
_userRepository.getUserDetails(userId).listen((userDetails) {
add(UserDetailsChanged(userDetails));
})
..onError(
- 最后,我还可以假设在实例化 UserBloc 时用户已经通过身份验证,我可以从 userRepository 中检索 authRepository 用户流的最后一个值。我可能最喜欢这种方法,但缺点是我的 userDetails 的 streamSubscription 变成了 Future :
class UserBloc extends Bloc<UserEvent, UserState> {
final UserRepository _userRepository;
StreamSubscription? _userDetailsSubscription;
UserBloc(this._userRepository) : super(UserState.loading()) {
_userRepository.getUserDetails().then((stream) {
_userDetailsSubscription = stream.listen((userDetails) {
add(UserDetailsChanged(userDetails));
})
..onError(
我试图找到推荐的方法来解决这个问题,但我找不到任何坚定的意见。
【问题讨论】:
标签: flutter dart stream bloc clean-architecture