处理 Flutter 应用程序中的动态链接以转到应用程序内的特定页面

问题描述

我在 Firebase 控制台中创建了一个动态链接,并在 Flutter 中添加代码以将我带到我的应用程序中的特定页面。这有效。我现在不确定如何在 Flutter 中创建更多动态链接,以便在 Firebase Console 中创建新的动态链接后将我带到我的应用程序中的更多/其他页面。我从教程中遵循以下代码

  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,title: 'Dynamic Links Example',routes: <String,WidgetBuilder>{
      '/': (BuildContext context) => MyApp(),'/helloworld': (BuildContext context) => LinkPage(),},));
}

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

class _MyAppState extends State<MyApp> {
  String _linkMessage;
  bool _isCreatingLink = false;
  String _testString =
      "To test: long press link and then copy and click from a non-browser "
      "app. Make sure this isn't being tested on iOS simulator and iOS xcode "
      "is properly setup. Look at firebase_dynamic_links/README.md for more "
      "details.";

  @override
  void initState() {
    super.initState();
    initDynamicLinks(); //
  }

  void setupNotification() async {
    _firebaseMessaging.getToken().then((token) {
      print(token);
    });

    _firebaseMessaging.configure(
      onMessage: (Map<String,dynamic> message) async {
        print("Message: $message");
      },onResume: (Map<String,onLaunch: (Map<String,);
  }

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

      print(deepLink);

      if (deepLink != null) {
        Navigator.pushNamed(context,'/helloworld');
      }
    },onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });

    final PendingDynamicLinkData data =
        await FirebaseDynamicLinks.instance.getinitialLink();
    final Uri deepLink = data?.link;

    if (deepLink != null) {
      Navigator.pushNamed(context,'/helloworld');
    }
  }

  Future<void> _createDynamicLink(bool short) async {
    setState(() {
      _isCreatingLink = true;
    });

    final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'http://cx4k7.app.goo.gl',link: Uri.parse('My http url'),androidParameters: AndroidParameters(
        packageName: 'my package id/name',minimumVersion: 0,),dynamicLinkParametersOptions: DynamicLinkParametersOptions(
        shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,);

    Uri url;
    if (short) {
      final ShortDynamicLink shortLink = await parameters.buildShortLink();
      url = shortLink.shortUrl;
    } else {
      url = await parameters.buildUrl();
    }

    setState(() {
      _linkMessage = url.toString();
      _isCreatingLink = false;
    });
  }

解决方法

关于如果 deeplink not null 会发生什么的 if 语句是找到答案的关键。因此,只需编写一些 if 语句即可说明当深层链接与 FCM 控制台中的值相同时会发生什么