如何高效使用flutter bloc状态管理

问题描述 投票:0回答:1

我对 flutter bloc 管理比较陌生,之前我使用的是 Provider 状态管理,我有一个关于 flutter bloc 状态的问题

假设我正在使用 Bloc 来执行与用户相关的操作或功能

用户块可能有以下状态

abstract class UserState {}

class UserInitialState extends UserState {}

class UserLoadingState extends UserState {}

class UserLoadedState extends UserState {
  final UserModel userModel;
  UserLoadedState({required this.userModel});
}

class UserErrorState extends UserState {
  final String error;
  UserErrorState({required this.error});
}

class UserInvalidFormErrorState extends UserState {
  final String error;
  UserErrorState({required this.error});
}

当用户更新其个人资料详细信息时,我会发出“UserInvalidFormErrorState”状态,并且由于表单验证而出现一些错误

问题是,如果我发出“UserInvalidFormErrorState”状态,则 UserLoadedState 在我显示用户详细信息的屏幕中不再可用

如何解决这个问题

flutter dart flutter-bloc
1个回答
0
投票

我建议您通过组合用户数据和错误消息来更改

UserLoadedState
的结构。

abstract class UserState {}

class UserLoadedState extends UserState {
  final UserModel userModel;
  final String? error;  // Optional error message

  UserLoadedState({
    required this.userModel,
    this.error,
  });
}

通过这种结构,可以避免在验证表单出现问题时更改错误状态。 您只需发出一个新的

UserLoadedState
实例,其中包含用户信息,并且可能伴有消息错误(如果有)

void updateUserDetails(UserModel userModel) async {
  try {
    yourValidateUserData(userModel);
    emit(UserLoadedState(userModel: userModel)); // emit without error
  } catch (e) {
    emit(UserLoadedState(userModel: userModel, error: e.toString())); // emit with error
  }
}

在 UI 端检查是否有错误消息处于

UserLoadedState
状态,如有必要则显示,同时保留用户数据

© www.soinside.com 2019 - 2024. All rights reserved.