BlocProvider.of () вызывается с контекстом, не содержащим Bloc типа

@override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
    providers: [
         BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
         BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
               ],
    child: Scaffold(
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
        },
      ),
      appBar: appbar(),
      body: pannel(),
    )
    );
  }

При обработке жеста было выдано следующее утверждение:

  • BlocProvider.of () вызывается с контекстом, который не содержит Bloc типа TripDetailBloc.
  • Не удалось найти предка, начиная с контекста, переданного в BlocProvider.of<TripDetailBloc>().
  • Это может произойти, если используемый вами контекст исходит из виджета над BlocProvider.
  • использованный контекст: TripDetailPage (зависимости: [MediaQuery], состояние: _TripDetailPageState # d4ab3)

person Yogish Shenoy    schedule 04.07.2020    source источник


Ответы (2)


Измените свой код на этот:

Widget build(BuildContext context) {
  
  return MultiBlocProvider(
      providers: [
        BlocProvider<TripDetailBloc>(create: (BuildContext context) => TripDetailBloc()),
        BlocProvider<PopUpBloc>(create: (BuildContext context) => PopUpBloc()),
      ],
      child: Builder(
        builder: (context) {
          return Scaffold(
            floatingActionButton: FloatingActionButton(
              child: Icon(Icons.add),
              onPressed: () {
                BlocProvider.of<TripDetailBloc>(context).add(AddTripDetailPannelEvent());
              },
            ),
            appBar: appbar(),
            body: pannel(),
          );
        }
      )
  );
}

Если вы присмотритесь, я превратил ваши леса в конструктор виджетов.

person samezedi    schedule 04.07.2020

Оберните свой каркас в виджет-конструктор и используйте этот контекст. Контекст, который использует .of (context), такой же, как и у метода build (BuildContext context), поэтому он его не находит.

person EdwynZN    schedule 04.07.2020