Flutter: событие с параметрами при использовании BLOC
Зачастую нужно вызвать не просто событие, но и передать ему параметры. Делается это примерно так:
event.dart
abstract class MyStaticEvent {}
class InitEvent extends MyStaticEvent {}
class StartUpdateList extends MyStaticEvent {} // Запущен процесс обновления списка статистики
class UpdateList extends MyStaticEvent {} // Обновить список статистики пользователя
class UpdateListFull extends MyStaticEvent {
final DateTime startDate;
final DateTime endDate;
final int car;
UpdateListFull(this.startDate,this.endDate,this.car);
} // Обновить список статистики пользователя
В нужном месте дернем вызов UpdateListFull:
actions: [
IconButton(
icon: SvgPicture.asset('lib/images/galka.svg'),
onPressed: () {
print("Нажманули сохранение");
BlocProvider.of<MyStaticBloc>(context).add(StartUpdateList());
BlocProvider.of<MyStaticBloc>(context).add(UpdateListFull(startDate??DateTime.now(),endDate??DateTime.now(),globals.UserInfo["default_car"]));
Navigator.pop(context);
},
),
],
Ну и сам bloc.dart:
on<UpdateListFull>((event, emit) async {
print("FullList: $event");
MyStaticState res = MyStaticState();
print("--обновляем список статистики ");
TRequests req = new TRequests();
http.Response response;
await Future.delayed(Duration(seconds: 2), () async {
try {
response=await req.asyncRequest("rfqwrferf", jsonEncode({
"offset" : globals.time_offset.toString(),
"dtfrom" : globals.HumanDateFormat2(event.startDate),
"dtto" : globals.HumanDateFormat2(event.endDate),
"autoes" : "[${event.car.toString()}]"
}));
if (response.statusCode==200) {
Map<String, dynamic> answer = jsonDecode(response.body);
if (answer["error"]==true){
EasyLoading.showToast(answer["errortxt"]);
} else {
res.StaticList = answer["result"];
res.loading=true;
print("--пришел список статистики заправки автомобилей: ${res.StaticList}");
}
} else {
EasyLoading.showToast("Ошибка обращения к API");
}
emit(res);
} catch (e) {
EasyLoading.showToast("Ошибка обращения к API $e");
};
emit(res);
});
});