我正在使用BLoC模式学习和构建Flutter应用程序,并且在许多教程和存储库中,我看到人们对于BLoC的每个状态都具有单独的类,而对于其他具有相同属性的州类则具有单独的类定义。 是否有用于定义状态类的标准BLoC方法?还是个人选择?
具有多个状态类的示例
abstract class LoginState extends Equatable {
LoginState([List props = const []]) : super(props);
}
class LoginInitial extends LoginState {
@override
String toString() => 'LoginInitial';
}
class LoginLoading extends LoginState {
@override
String toString() => 'LoginLoading';
}
class LoginFailure extends LoginState {
final String error;
LoginFailure({@required this.error}) : super([error]);
@override
String toString() => 'LoginFailure { error: $error }';
}
具有单个状态类的示例
@immutable
class MyFormState extends Equatable {
final String email;
final bool isEmailValid;
final String password;
final bool isPasswordValid;
final bool formSubmittedSuccessfully;
bool get isFormValid => isEmailValid && isPasswordValid;
MyFormState({
@required this.email,
@required this.isEmailValid,
@required this.password,
@required this.isPasswordValid,
@required this.formSubmittedSuccessfully,
}) : super([
email,
isEmailValid,
password,
isPasswordValid,
formSubmittedSuccessfully,
]);
factory MyFormState.initial() {
return MyFormState(
email: '',
isEmailValid: false,
password: '',
isPasswordValid: false,
formSubmittedSuccessfully: false,
);
}
MyFormState copyWith({
String email,
bool isEmailValid,
String password,
bool isPasswordValid,
bool formSubmittedSuccessfully,
}) {
return MyFormState(
email: email ?? this.email,
isEmailValid: isEmailValid ?? this.isEmailValid,
password: password ?? this.password,
isPasswordValid: isPasswordValid ?? this.isPasswordValid,
formSubmittedSuccessfully:
formSubmittedSuccessfully ?? this.formSubmittedSuccessfully,
);
}
@override
String toString() {
return '''MyFormState {
email: $email,
isEmailValid: $isEmailValid,
password: $password,
isPasswordValid: $isPasswordValid,
formSubmittedSuccessfully: $formSubmittedSuccessfully
}''';
}
}
何时应使用哪个? 两者之间的优缺点是什么?