Flutter go_router 深层链接行为

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

我确实在我的应用程序中使用 go_router 进行了深度链接处理的初步实现

我的问题:

如果我已经有一个只有几个屏幕的堆栈,并且我打开深层链接,它将清除我的堆栈并仅打开该屏幕。这意味着它会弹出所有以前的屏幕。

期望 - 在我的堆栈顶部打开一个深层链接,只需推送新路线。

有什么想法吗?

深层链接是否可以仅更新屏幕导航属性 - 就像回调一样?

如果我也可以像全局回调一样处理没有导航的深层链接也可以。

该功能是支付——发生在浏览器上。我需要将用户导航回到支付屏幕上之前所在的应用程序。

flutter deep-linking flutter-go-router flutter-deep-link
1个回答
0
投票
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:url_launcher/url_launcher.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
      navigatorObservers: [
        MyRouteObserver(),
      ],
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My App'),
      ),
      body: Center(
        child: Linkify(
          onOpen: (link) async {
            // Check if the app is already running
            if (MyRouteObserver.isAppRunning) {
              // Navigate based on the deep link
              MyRouteObserver().navigatorKey.currentState!.pushNamed(link.url!);
            } else {
              // Open the app and handle deep link in the initial route
              runApp(MyApp());
              MyRouteObserver().initialDeepLink = link.url;
            }
          },
          text: 'Open deep link: https://example.com/deeplink',
        ),
      ),
    );
  }
}

class MyRouteObserver extends RouteObserver<PageRoute<dynamic>> {
  static bool isAppRunning = false;
  String? initialDeepLink;

  final GlobalKey<Navigator
© www.soinside.com 2019 - 2024. All rights reserved.