Монтировать общие виджеты на каждом экране в приложении Flutter - PullRequest
0 голосов
/ 25 марта 2020

Как мне добавить общий виджет для каждого экрана в приложении. Я нашел другой ответ в StackOverflow, но я не хотел бы добавлять страницу CommonWidgets на каждую страницу отдельно. Я ищу способ объявить общие виджеты только один раз.

Я пытаюсь включить Экран оповещения, который может быть доступен через приложение флаттера, и я хочу, чтобы виджет AlertsScreen управлялся состоянием (т.е. , pu sh значений до AlertsScreenState отовсюду, тогда всплывают оповещения).

Я сделал что-то вроде этого:

MaterialApp(
  builder: (BuildContext context, Widget widget) {
    setErrorBuilder();

    return Column(
      children: <Widget>[
        Expanded(
          child: widget,
        ),
        AlertsScreen(),
      ],
    );
  },
  title: 'App name',
  onGenerateRoute: Router.onGenerateRoute,
  initialRoute: Router.splashScreen,
  navigatorKey: Router.navigator.key,
),

Это работает нормально, и даже я мог бы сделать управление состоянием mobx прекрасно, но когда я пытаюсь отобразить любой виджет, используя контекст внутри AlertsScreen виджет, который выдает мне ошибку:

[ОШИБКА: flutter / lib / ui / ui_dart_state. cc (157)] Необработанное исключение: запрошена операция навигатора с контекстом, который не включить навигатор. Контекст, используемый для pu sh или всплывающих маршрутов из навигатора, должен соответствовать контексту виджета, являющегося потомком виджета навигатора.

Flu sh пример бара:

Flushbar(
      title: 'title',
      message: 'body',
      duration: const Duration(seconds: 5),
    ).show(context);

Вышеуказанная ошибка выдается всякий раз, когда я пытаюсь показать Flushbar, используя контекст виджета AlertsScreen. Я подозреваю, что эта ошибка возникает из-за того, что навигатор в данный момент отображает другой виджет приложения, а AlertsScreen не может правильно получить доступ к контексту.

Как мне заставить его работать?

...