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