相关疑难解决方法(0)

如何在没有上下文的情况下在 Flutter 中使用 GoRouter 进行路由?

我想解决的问题: 我使用 GoRouter 的应用程序需要能够从 main() 内路由到命名路由。由于大多数路由都是“context.go”形式,因此我无法在 main 中执行此操作。

背景

我的应用程序使用 GoRouter。GetX 让我轻松定义命名路由并从 main() 传递参数,这非常完美。

然而,GetX 和 GoRouter 最终给我带来了问题。GoRouter 最终在应用程序的其他部分将没有上下文。

如果有一种方法可以让它们简单地共存,我会对此持开放态度。

我使用了 GetIt 包的服务定位器模式来与 navigatorKey 关联。当我测试它时它会起作用 - 但这涉及创建两个 MaterialApp。

然而,这个应用程序使用GoRouter,它似乎没有使用navigatorKey。

我想从 main() 内部转到特定的路线。服务定位器模式似乎适用于 GoRouter,就像适用于 MaterialApp 的 Navigator 2.0 一样——但我找不到如何执行此操作的示例。

更详细的上下文:

这是我目前在 main() 中的内容。

你可以看到我面临的关键挑战是在 main 中传递数据参数的监听器(我从第三方 SDK 得到这个——我不需要它在 main 中,但无论如何它都需要监听应用程序的状态)。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();

  FFAppState(); // Initialize FFAppState

  GetSocial.addOnInitializedListener(() => {
        // GetSocial SDK is ready to use
      });

  setupLocator();

  runApp(MyApp());

  locator<LandingPageData>().referralID = "defaultReferralID";

  registerListeners();
} …
Run Code Online (Sandbox Code Playgroud)

service-locator flutter gorouter

13
推荐指数
3
解决办法
1万
查看次数

如何在没有上下文的情况下在应用程序中的任何位置显示 Dialog?

大家好,这是我一直在问自己的一个问题。我也看到了一些答案,但它没有解决我的问题,我发现的一些类似问题是:Flutter showDialog with navigator key 而不是传递上下文使用不包含 Navigator 的上下文请求的 Navigator 操作

我想要实现的是在我的应用程序中的任何地方(所以在我的应用程序的任何页面中)显示来自同一段代码的弹出对话框(所以它都是集中的)。问题是,从那段代码中,我无法访问 BuildContext,这是因为我基于不是来自用户操作(如按钮点击)的事件显示此弹出窗口,而它们可能是 Firestore 侦听器,或发生在我的代码深处的错误(因此我可以向用户显示错误消息),因为我对代码如此深入,通常我无权访问 BuildContext。

在类似的问题中,我发现了一些看起来像解决方案的东西。这些解决方案使用 GlobalKey 作为导航器,因此可以从任何地方访问它,关于如何在应用程序的任何地方访问它有一些不同的选项,在我的情况下,我选择了一个单例(我的“存储库”)来存储这个 globalKey。然后当事件被触发时,我使用 globalKey 来获取上下文并显示一个对话框,但它抛出了这个错误:

Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.
Run Code Online (Sandbox Code Playgroud)

@Hemanth Raj 提到您的根 Widget 需要是 MaterialApp,我确实有一个 MaterialApp 作为我的根。

这是我拥有的应用程序结构的近似值:

void main() async {

  // Here I create the navigatorKey …
Run Code Online (Sandbox Code Playgroud)

android dart flutter

11
推荐指数
1
解决办法
3704
查看次数

标签 统计

flutter ×2

android ×1

dart ×1

gorouter ×1

service-locator ×1