首页 > 解决方案 > 在 Flutter 应用程序的每个屏幕上挂载常用小部件

问题描述

如何在颤振应用程序的每个屏幕上添加一个通用小部件。我在 StackOverflow 上找到了另一个答案,但我不想在每个页面上分别添加 CommonWidgets 页面。我正在寻找一种只声明一次通用小部件的方法。

我正在尝试包含一个可以通过颤振应用程序访问的警报屏幕,并且我希望AlertsScreen小部件是状态驱动的(即,将值推送到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)] 未处理的异常:使用不包含导航器的上下文请求导航器操作。用于从 Navigator 推送或弹出路由的上下文必须是作为 Navigator 小部件后代的小部件的上下文。

冲洗条示例:

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

每当我尝试Flushbar使用小部件的上下文进行显示时,都会引发上述错误AlertsScreen。我怀疑引发此错误是因为导航器当前正在呈现应用程序的另一个小部件并且AlertsScreen无法正确访问上下文。

我如何让它工作?

标签: androidflutterdartmobx

解决方案


推荐阅读