Я изучаю и создаю приложение Flutter, используя шаблон BLoC, и во многих учебных пособиях и репозиториях я видел людей, имеющих отдельный класс для каждого состояния 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
}''';
}
}
Какой из них следует использовать, когда?В чем преимущество и недостаток между ними?