I tried to migrate flutter_bloc v 8.0.0. After I read the documentation, then I know that I need to migrate mapEventToState to on. After that I don't get an error but _getMonks event is not trigger. Here is my code. Is there anything I miss out?
class MonkBloc extends Bloc<MonkEvent, MonkState> {
final MonkRespository monkRespository;
late List<Monk> monks;
MonkBloc({required this.monkRespository}) : super(MonkInitial()) {
on<GetMonksEvent>((event, emit) => _getMonks);
on<MonkSearchEvent>((event, emit) => _searchMonks);
}
Stream<MonkState> _getMonks(Emitter<MonkState> emit) async* {
emit(MonkLoading());
try {
final List<Monk> monks = await monkRespository.fetchMonks();
emit(MonkLoaded(monks: monks));
} catch (e) {
emit (MonkError(error: (e.toString())));
}
}
Stream<MonkState> _searchMonks(String query, Emitter<MonkState> emit) async* {
emit(MonkLoading());
try {
final List<Monk> monks = await monkRespository.searchMonks(query);
emit(MonkLoaded(monks: monks));
} catch (e) {
emit(MonkError(error: (e.toString())));
}
}
}
class MonkScreen extends StatefulWidget {
static const routeName = '/monk';
final String? title;
final MonkScreenMode? screenMode;
const MonkScreen({Key? key, this.title, this.screenMode}) : super(key: key);
@override
State<MonkScreen> createState() => _MonkScreenState();
}
class _MonkScreenState extends State<MonkScreen> {
_loadMonks() async {
BlocProvider.of<MonkBloc>(context).add(const GetMonksEvent());
}
@override
void initState() {
super.initState();
_loadMonks();
}
@override
Widget build(BuildContext context) {
return BaseWidget(
child: Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
appBar: AppBar(
centerTitle: true,
backgroundColor: Theme.of(context).backgroundColor,
elevation: 0,
title: AutoSizeText(
widget.title!,
style: Theme.of(context).appBarTheme.titleTextStyle,
),
leading: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(
Icons.arrow_back,
color: Theme.of(context).primaryIconTheme.color!,
),
),
actions: [
IconButton(
onPressed: () {
showSearch(
context: context,
delegate: MonkSearch(screenMode: widget.screenMode!));
},
icon: Icon(
Icons.search,
color: Theme.of(context).primaryIconTheme.color!,
),
),
],
),
body: BlocBuilder<MonkBloc, MonkState>(
builder: (BuildContext context, MonkState monkState) {
if (monkState is MonkError) {
return const SomethingWentWrongScreen();
} else if (monkState is MonkLoaded) {
return listViewBuilder(
context, monkState.monks, widget.screenMode!);
}
return const Center(
child: CircularProgressIndicator(),
);
},
),
),
);
}
}