在flutter中处理链接并使用firebase动态链接导航

Posted

技术标签:

【中文标题】在flutter中处理链接并使用firebase动态链接导航【英文标题】:handle link and navigate with firebase dynamic links in flutter 【发布时间】:2020-06-10 16:02:39 【问题描述】:

我在我的颤振项目应用程序中使用 firebase_dynamic_links 0.5.0。我正在使用 bloc 进行状态管理,但导航有问题。我正在正常处理链接,但是当我尝试导航到另一个不起作用的页面时。不知道为什么?

PS : 我已经测试了firebase_dynamic_links example 并且可以正常工作


main() 
  WidgetsFlutterBinding.ensureInitialized();

  // Production code
  ErrorWidget.builder = (FlutterErrorDetails details) => Container();


  runApp(MyApp());

// Myapp 类在这里我得到打印的结果,但导航不起作用

class MyApp extends StatefulWidget 
  @override
  _MyAppState createState() => _MyAppState();


class _MyAppState extends State<MyApp> 
  final _authBloc = AuthBloc();

  final _progressBloc = new ProgressBloc();

  @override
  void initState() 
    super.initState();
    initDynamicLinks();
  



  void initDynamicLinks() async 
    final PendingDynamicLinkData data =
        await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri deepLink = data?.link;

    //print("hhhhhhh" + deepLink.path);

    if (deepLink != null) 
      print("Link :" + deepLink.path);

      // this line don't work 
      Navigator.pushNamed(context, '/helloworld');
    

    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData dynamicLink) async 
      final Uri deepLink = dynamicLink?.link;

      if (deepLink != null) 
        print("Link :" + deepLink.path);

        Navigator.pushNamed(context, '/helloworld');
      
    , onError: (OnLinkErrorException e) async 
      print('onLinkError');
      print(e.message);
    );
  

  @override
  Widget build(BuildContext context) 
    ThemeData themeData = ThemeData(
      fontFamily: Constants.DEFAULT_FONT_NAME,
      textTheme: Theme.of(context)
          .textTheme
          .apply(fontFamily: Constants.DEFAULT_FONT_NAME),
      brightness: Brightness.light,
      canvasColor: Colors.black12,
      scaffoldBackgroundColor: Colors.white,
      primaryIconTheme:
          Theme.of(context).primaryIconTheme.copyWith(color: Colors.white),
      accentIconTheme:
          Theme.of(context).accentIconTheme.copyWith(color: Colors.white),
      primaryTextTheme:
          Theme.of(context).primaryTextTheme.apply(bodyColor: Colors.white),
      primaryColorLight: Colors.white,
      primaryColorBrightness: Brightness.light,
      primarySwatch: Constants.COLOR_PRIMARY,
      primaryColor: Constants.COLOR_PRIMARY,
    );

    var home = Stack(children: <Widget>[
      RootPage(),
      ProgressDialog(),
    ]);

    return ProgressProvider(
      dialog: _progressBloc,
      child: AuthBlocProvider(
        bloc: _authBloc,
        child: StoreBlocProvider(
          store: Store(),
          child: RootProvider(
            bloc: new RootBloc(),
            child: MaterialApp(
              localizationsDelegates: [
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
              ],
              supportedLocales: [
                const Locale('en'), // English
                const Locale('fr'), // Hebrew
              ],
              title: 'Foodynasty',
              theme: themeData,
              debugShowCheckedModeBanner: false,
              routes: <String, WidgetBuilder>
                '/': (BuildContext context) => home,
                '/helloworld': (BuildContext context) => RestaurantShare(
                      restaurantId: 'test',
                    ),
              ,
            ),
          ),
        ),
      ),
    );
  


谢谢你,对不起我的英语不好。

【问题讨论】:

【参考方案1】:

可能是deepLink 为空,而if 语句中的代码未执行。您能否提供一个发送到您的应用的深层链接的示例?可能是firebase_dynamic_links有错误时无法正确解析深层链接。

【讨论】:

以上是关于在flutter中处理链接并使用firebase动态链接导航的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中使用 Firebase 动态链接邀请链接到不同的组

Firebase 身份验证链接不起作用 - 缺少尾部斜杠?

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

当用户点击 Flutter App 中的 Firebase 通知时如何打开链接?

在 Flutter 中的 TextFormField 中,用户输入一个 url 或网站链接以将其保存到 firebase 数据库,并且应该使用浏览器打开该链接

Flutter:使用 Firebase 动态链接,有人可以告诉我如何通过链接传递参数列表以及如何接收它吗?