1

フリーズされたライブラリでブロックを使用しています。ユーザーがアプリを開いたときに、最初のラジオボタンが選択されている必要があります。初期状態と初期イベントが呼び出されたことを通知するオブザーバーブロックが作成されましたが、印刷すると

print("Print me Please ${state.maybeMap(orElse: () {}, radioClickState: (mstate) => mstate.value)}");

出力はNULLです。

アプリケーション層を実装するブロック:

class NoteBloc extends Bloc<NoteEvent, NoteState> {
  NoteBloc() : super(const NoteState.initial());

  @override
  Stream<NoteState> mapEventToState(
    NoteEvent event,
  ) async* {
   if(state is Initial){
     yield const  NoteState.radioClickState(value:1);
   }
  }
}

イベントコードは次のとおりです。

class NoteEvent with _$NoteEvent {
  const factory NoteEvent.started() = Started;
  const factory NoteEvent.radioClickEvent({required  int value} ) =
      RadioClickEvent;
}

州コードは次のとおりです。

class NoteState with _$NoteState {
  const factory NoteState.initial() = Initial;
  const factory NoteState.radioClickState({required int value}) =
      RadioClickState;
}

materialApp 内のコードは次のとおりです。

  home: BlocProvider<NoteBloc>(
    lazy: false,
    create: (context) => NoteBloc(),
    child: const HomePage(),
  ),

ラジオグループが実装したホームページ:

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocConsumer<NoteBloc, NoteState>(
      listener: (context, state) {},
      builder: (context, state) {
      print("Print me Please ${state.maybeMap(
                      orElse: () {}, radioClickState: (mstate) => mstate.value)}");
        return Scaffold(
            // body
            body: Column(
              children: [
                Radio<int>(
                  value: 1,
                  groupValue: state.maybeMap(
                      orElse: () {}, radioClickState: (mstate) => mstate.value),
                  onChanged: (int? value) {},
                ),
                Radio<int>(
                  value: 2,
                  groupValue: state.maybeMap(
                      orElse: () {}, radioClickState: (mstate) => mstate.value),
                  onChanged: (int? value) {},
                ),
              ],
      },
    );
  }
}
4

1 に答える 1