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);
      });
    });

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.