Почему блок не в контексте? - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть виджет BlocProvider над виджетом, где я пытаюсь отправить событие, но я все еще получаю BlocProvider.of() called with a context that does not contain a Bloc of type RenderBloc.

Вот что возвращает мой метод сборки:

return BlocProvider<RenderBloc>(
  builder: (BuildContext context) => RenderBloc(),  
  child: Column(
    children: <Widget>[
      FlatButton(
        child: Text('Render'),
        onPressed: () {
          BlocProvider.of<RenderBloc>(context).add(RenderProjectEvent(project));
        },
      )
    ],
  ),
);

Iтакже пробовал с MultiBlocProvider, получил то же самое.

1 Ответ

1 голос
/ 01 ноября 2019

Вам необходимо создать другой внутренний контекст (например, используя Builder ), чтобы получить доступ к InheritedWidget (Поставщик):

return BlocProvider<RenderBloc>(
  builder: (BuildContext context) => RenderBloc(),  
  child: Builder(
    builder: (cxt) {
      return Column(
        children: <Widget>[
          FlatButton(
            child: Text('Render'),
            onPressed: () {
              BlocProvider.of<RenderBloc>(cxt).add(RenderProjectEvent(project));
            },
          )
        ],
      ),
    ),
  }
);
...