我对 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 在我显示用户详细信息的屏幕中不再可用
如何解决这个问题
我建议您通过组合用户数据和错误消息来更改
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
状态,如有必要则显示,同时保留用户数据