我们如何使用 Get X 处理 flutter 中的深层链接以转到应用程序的自定义页面?

问题描述 投票:0回答:2

我们如何使用 Get X 处理 flutter 中的深层链接以转到应用程序的自定义页面?

默认情况下,通过将所需的地址添加到 Android Manifest 文件中:

        <meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" android:host="flutterbooksample.com" />
            <data android:scheme="https" android:host="flutterbooksample.com"/>
        </intent-filter>

当应用程序打开时,应用程序的主页将显示给我们。

我希望实现这一点,我可以将用户定向到所需应用程序的任何页面。一个实际的例子是在网页上支付并返回到应用程序。当我们返回时,我们应该向用户显示有关付款状态的消息,而不是将用户引导至应用程序的首页。

flutter dart deep-linking flutter-getx
2个回答
2
投票

处理深层链接时,在应用程序中进行页面路由。

在我的应用程序中,我通常使用uni_links(https://pub.dev/packages/uni_links),在我的

main.dart
中,我有这样的东西:

StreamSubscription<String> _subUniLinks;

@override
initState() {
    super.initState();
    // universal link setup
    initUniLinks();
}

Future<void> initUniLinks() async {
    try {
        final String initialLink = await getInitialLink();
        await processLink(initialLink);
    } on PlatformException {
    }
    _subUniLinks = linkStream.listen(processLink, onError: (err) {});
}

processLink(String link) async {
    // parse link and decide what to do:
    // - use setState
    // - or use Navigator.pushReplacement
    // - or whatever mechanism if you have in your app for routing to a page
}

@override
dispose() {
    if (_subUniLinks != null) _subUniLinks.cancel();
    super.dispose();
}



0
投票

我的方法与 Didier Prophete 的答案类似,但我在 singleTon 类中使用它,在 main.dart 中调用(在 return MyApp 行上方)

await DeepLinkService().initialDeepLinks();

但我不知道如何取消和处置 StreamSubscription

StreamSubscription? _sub;

Future<void> initialDeepLinks() async {
    try {
      //init deeplink when start from inactive
      final initialLink = await getInitialLink();
      if (initialLink != null) {
        await _handleDeepLink(initialLink);
      }

      //Check deeplink in foreground/background
      _sub = linkStream.listen((String? link) async {
        if (link != null) {
          await _handleDeepLink(link);
        }
      }, onError: (e) {
        DebugLog().show(e.toString());
      });
    } catch (e) {
      DebugLog().show(e.toString());
    }
  }

  // Handle the deep link
  Future<void> _handleDeepLink(String link) async {
    Uri deepLink = Uri.parse(link);
    String path = deepLink.path;
    DebugLog().show('open app from deeplink: $deepLink with path: $path');

    //Switch the path then navigate to destinate page
  }
© www.soinside.com 2019 - 2024. All rights reserved.