繁体   English   中英

Flutter Bloc - 如何正确使用 bloc 中的参数

[英]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(
  • 最后,我还可以假设在实例化 UserBloc 时用户已经通过身份验证,我可以从 userRepository 中检索 authRepository 用户 stream 的最后一个值。 我可能最喜欢这种方法,但缺点是我的 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(

我试图找到推荐的方法来解决这个问题,但我找不到任何坚定的意见。

第二个选项听起来最简单,但第一个听起来是正确的。

您在第一个选项中描述的只是简单的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM