我使用 Firebase 动态链接和命名路由。 我想要的是为动态链接事件安装一个全局侦听器,并在提供令牌时转发到注册页面。 在下面的代码中,我得到了异常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. 这意味着我必须将导航代码放在 MaterialApp 的home:属性下方。 但是在执行此操作时,我必须为每个路由实现动态链接事件处理程序。

class MyApp extends StatelessWidget {
  String title = "Framr";

  @override
  Widget build(BuildContext context) {

    FirebaseDynamicLinks.instance.onLink(
      onSuccess: (linkData) {
        if (linkData != null) {
          try {
            Navigator.pushNamed(context, '/register', arguments: linkData);
            // throws: 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.
          } catch(e) {
            print(e);
          }
        }
        return null;
      }
    );

    return MaterialApp(
      title: "...",
      home: LoginPage(),
      routes: {
        '/createEvent': (context) => CreateEventPage(),
        '/showEvent': (context) => ShowEventPage(),
        '/register': (context) => RegisterPage(),
      },
    );
  }
}

#1楼 票数:0 已采纳

我能够通过使用no_context_navigation包或 GlobalKey 遵循动态链接自述文件中提供的示例来解决缺少上下文来调用 Navigator.pushNamed(...) 的方法来完成这项工作。 注意:您不必使用 no_context_navigation。 您可以自己实现无上下文路由。 这是一个例子

// Add this
import 'package:no_context_navigation/no_context_navigation.dart';

void main() {
  runApp(MaterialApp(
    title: 'Dynamic Links Example',
    // Add this
    navigatorKey: NavigationService.navigationKey,
    routes: <String, WidgetBuilder>{
      '/': (BuildContext context) => MyHomeWidget(), // Default home route
      '/helloworld': (BuildContext context) => MyHelloWorldWidget(),
    },
  ));
}

class MyHomeWidgetState extends State<MyHomeWidget> {
  .
  .
  .
  @override
  void initState() {
    super.initState();
    this.initDynamicLinks();
  }

  void initDynamicLinks() async {
    FirebaseDynamicLinks.instance.onLink(
      onSuccess: (PendingDynamicLinkData dynamicLink) async {
        // Add this.
        final NavigationService navService = NavigationService();
        final Uri deepLink = dynamicLink?.link;

        if (deepLink != null) {
          // This doesn't work due to lack of context
          // Navigator.pushNamed(context, deepLink.path);
          
          // Use this instead
          navService.pushNamed('/helloworld', args: dynamicLink);
        }
      },
      onError: (OnLinkErrorException e) async {
        print('onLinkError');
        print(e.message);
      }
    );
    
    final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri deepLink = data?.link;

    if (deepLink != null) {
      // This doesn't work due to lack of context
      // Navigator.pushNamed(context, deepLink.path);
      
      // Use this instead
      navService.pushNamed('/helloworld', args: dynamicLink);
    }
  }
  .
  .
  .
}

// pubspec.yaml
no_context_navigation: ^1.0.4

  ask by MarcS82 translate from so

未解决问题?本站智能推荐:

1回复

Flutter上的Firebase动态链接

我目前在 Flutter 上使用 Firebase 动态链接。 我遵循了文档并最终得到了我自己的版本: 现在我有几个问题: 什么是uriPrefix? 它需要是合法的吗? 我可以只在链接中使用所需的信息,还是还需要包含命名空间? minimumVersion 由 Flutter 定义。 就我
1回复

Flutter和Firebase动态链接

我想使用 Firebase 动态链接通过点击电子邮件发送的链接在应用程序中打开电子邮件验证消息。 在创建的动态链接中,给出了应用程序的包名称,以便在点击链接时可以启动应用程序。 我的问题是:我是否需要将我的应用程序放在 PlayStore 中以便该应用程序可以被识别和打开,或者即使我的应用程序尚未发
1回复

Flutter中的Firebase动态链接似乎识别出它是通过链接打开的,但该链接始终为空

我正在使用动态链接 ^0.7.0+1 当我按下链接时,它会加载应用程序,但没有导航到我想要的页面,我已经打印了我收到的链接,并且它始终为空,无论是在应用程序在后台或根本没有运行。
2回复

Flutter是否支持Firebase动态链接?

如果是,如何在Flutter中实施Firebase动态链接? 我希望用户在iOS或Android上打开动态链接,然后可以将他们直接带到我的应用程序中的链接内容。
1回复

Flutter-firebase动态链接预览图像在某些应用程序中旋转

我使用 firebase_dynamic_links 在 Flutter 中集成了深度链接。 我已经在 socialMetaTagParameters 中传递了图像的 url,如下面给定的代码。 但问题出在某些应用程序中,例如 Skype、Whatsapp,即使图像 url 提供纵向图像,某些图像也
1回复

使用Firebase动态链接在Flutter应用程序中打开网址内容

我已经成功地为我们的 Flutter 应用程序设置了 Firebase 动态链接(目前仅适用于 Android)并且它适用于以下场景: 从应用程序生成动态链接以在用户之间共享内容 可以从应用程序打开共享内容(如果未安装应用程序,用户将被带到 Play 商店) 如果从应用程序生成的动态链接在桌面网
2回复

Flutter-如何在应用邀请功能的firebase动态链接中传递自定义参数?

你能告诉我如何使用颤振插件 firebase_dynamic_links[ https://pub.dev/packages/firebase_dynamic_links#-readme-tab-]发送和获取参数吗? 我想在深层链接/动态链接中传递用户名和密码等参数,如下所示: 这是传递数据的正确方
1回复

Flutter如何在深层链接(动态链接)中传递列表

我想在颤振链接字符串、int 等的深层链接中传递一个列表,但我不确定。 是否可以以相同的方式通过深层链接传递列表? 或者有另一种方法可以做到这一点? 提前致谢!