我想要在main()之外和任何小工具之外读取GoRouter.

GoRouter提供程序的定义如下:

final goRouterProvider = Provider<GoRouter>(
  (ref) {
    return GoRouter(...);
}

然后,当我初始化flutter_local_notifications时,我希望使用ProviderContainer读取此提供程序,类似于我在main()方法上所做的操作:

static final FlutterLocalNotificationsPlugin _localNotificationsPlugin =FlutterLocalNotificationsPlugin();

_localNotificationsPlugin.initialize(
  initializationSettings,
  onDidReceiveNotificationResponse: (details) async {
      final container = ProviderContainer();
      container.read(goRouterProvider).pushNamed(AppRoute.someRandomRoute.name);
  },
);

在这种情况下,我仍然在同一个屏幕上结束(没有采取导航操作),但与GoRouter初始化时相同的日志(log)(由于debugLogDiagnostics: true标志).

我将这比作从main()方法向下传递容器,后者确实如预期的那样导航到目的地.

这是否意味着ProviderContainer().read(GoRouterProvider)正在创建一个新的GoRouter实例?

推荐答案

是的,没错,这是新的复制品.要获取旧实例,您需要该实例所在的容器.

您可以使用参数强制转换容器,也可以通过BuildContext进行转换:

final providerContainer = ProviderScope.containerOf(context);

但无论如何,您都需要访问容器以获取旧实例的值.

Flutter相关问答推荐

Cupertino Buttino SheetAction on按下可触发加载指示器,然后勾选并延迟

想更新ListView上的索引点击块Flutter

Flutter 蜂窝-检索非基元数据类型列表

在Flutter 中实现中小型应用程序栏标题

如何在Flutter中制作弯曲文本

dart /长笛中的返回早期模式和拆分方法

Flutter 未处理的异常 - 对 null 值使用 Null 判断运算符

'type' Icon '不是类型' IconData '的子类型

不使用 GlobalKey 仍然收到 GlobalKey 被多次使用的错误

Flutter Firebase 升级后出现问题? ARC 语义问题 (Xcode): Select 器appleCredentialWithIDToken:rawNonce:fullName:没有已知的类方法

Flutter - firebase_auth_web 5.4.0 依赖于 intl ^0.17.0 但我必须使用更高版本 (intl ^0.18.0)

如何对齐卡片小部件中的图标按钮?

我无法从 Cloud firestore 访问文档字段并在 statefulwidget 类中显示它

Pub get 尚未运行

Flutter:当我通过 Transform.rotate 旋转水平 ListView 时,左右边缘被切断

为什么 orientation == Orientation.portrait 总是正确的,尽管我的设备已经处于横向

在 Flutter 中将提取的 Listview.builder 与两个列表一起使用

Flutter 在气泡聊天消息上对齐时间戳文本

Navigator.push '!_debugLocked' 上的错误:不正确

如何从圆角go 除背景 colored颜色