Flutter: событие с параметрами при использовании BLOC
Зачастую нужно вызвать не просто событие, но и передать ему параметры. Делается это примерно так:
event.dart
1 2 3 4 5 6 7 8 9 10 11 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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); }); }); |