[英]Flutter Bloc - How to correctly use parameters in bloc
我是 flutter bloc 架构的新手。 我有一个 AuthBloc,它发出用户的 Stream。
现在,在我的一些较低级别的块中,我需要访问用户的 id,例如在 UserProfile 块中。 我无法决定哪种方法是最好的方法。
例如,我可以:
订阅集团的用户 Stream 并在每次用户更改时触发 newUserEvent。 这可以很好地工作,但是由于我必须从存储库订阅用户配置文件编辑的 stream,因此逻辑似乎很笨拙。
我想到的第二种方法是通过在该路由的 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(
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(
我试图找到推荐的方法来解决这个问题,但我找不到任何坚定的意见。
第二个选项听起来最简单,但第一个听起来是正确的。
您在第一个选项中描述的只是简单的 BLoC 到 BLoC 通信,我没有看到此解决方案中的“笨拙”。 You can find some examples in bloc library Github repository, eg: https://github.com/felangel/bloc/blob/master/examples/flutter_todos/lib/blocs/filtered_todos/filtered_todos_bloc.dart .
我认为没有“官方”解决方案,您只需要选择适合您问题的解决方案即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.