#flutter-bloc #freezed
#flutter-bloc #замороженный
Вопрос:
У меня есть эти закрытые классы для состояния cubit:
part of 'logged_out_nickname_cubit.dart';
@freezed
abstract class LoggedOutNickNameState with _$LoggedOutNickNameState {
factory LoggedOutNickNameState.initialised(
LoggedOutNickNameViewModel vm, String nickNameKey, FormGroup form) =
_Initialised;
factory LoggedOutNickNameState.submitted(LoggedOutNickNameViewModel vm) =
_Submitted;
}
Вот cubit:
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:reactive_forms/reactive_forms.dart';
import 'package:vepo/domain/user_registration/use-cases/logged_out_use_cases/get_user_field_from_local_use_case.dart';
import 'package:vepo/presentation/modules/logged_out/logged_out_nickname/logged_out_nick_name_view_model.dart';
part 'logged_out_nickname_state.dart';
part 'logged_out_nickname_cubit.freezed.dart';
class LoggedOutNickNameCubit extends Cubit<LoggedOutNickNameState> {
LoggedOutNickNameCubit(
this.vm, this.nickNameKey, this.form, this.getUserFieldFromLocalUseCase)
: super(LoggedOutNickNameState.initialised(vm, nickNameKey, form)) {
form.control(nickNameKey).value =
getUserFieldFromLocalUseCase.invoke(nickNameKey);
form.markAsDirty();
}
void submitPressed() => emit(LoggedOutNickNameState.submitted(vm));
void initialise() =>
emit(LoggedOutNickNameState.initialised(vm, nickNameKey, form));
final LoggedOutNickNameViewModel vm;
final String nickNameKey;
final FormGroup form;
final GetUserFieldFromLocalUseCase getUserFieldFromLocalUseCase;
}
Проблема в том, что в представлении я пытаюсь получить доступ loggedOutNicknameCubit.state.form
, и поскольку форма не существует ни в одном из закрытых классов, она не распознается как находящаяся в состоянии блока и не может быть использована, на мой взгляд:
Получатель ‘form’ не определен для типа ‘LoggedOutNickNameState’
Исправление заключается в добавлении поля ко всем закрытым классам, которые не используют его как обнуляемое, например:
factory LoggedOutNickNameState.submitted(LoggedOutNickNameViewModel vm,
{@nullable @Default(null) FormGroup form}) = _Submitted;
Есть ли способ отключить ошибку, которая не включает добавление поля как null в закрытый класс, который в нем не нуждается?
Ответ №1:
Вы можете использовать приведение для получения этих переменных
(loggedOutNicknameCubit.state as _Initialised).form