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



我是flutter集团架构的新手。我有一个AuthBloc,它发出一个用户流。

现在,在我的一些较低级别的Bloc中,我需要访问用户的id,例如在UserProfile Bloc中。我无法决定哪种方法是最好的。

例如,我可以:

  • 订阅区块的用户流,并在每次用户更改时激发一个newUserEvent。这可以很好地工作,但由于我必须订阅存储库中的用户配置文件编辑流,因此逻辑似乎很笨拙。

  • 我想到的第二种方法是,当我在该路由的blocProvider中创建bloc时,通过将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变成了未来:
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的通信;笨拙";在这个解决方案中。你可以在blocklibraryGithubrepository中找到一些例子,例如:https://github.com/felangel/bloc/blob/master/examples/flutter_todos/lib/blocs/filtered_todos/filtered_todos_bloc.dart.

我不认为存在";官方的";解决方案,您只需要选择一个适合您的问题。

最新更新