当应用程序在后台时使用 uni_links

Using uni_links when the app is in the background

我的应用程序具有以下结构:

- InheritedWidget for dependencies
--> Splash Screen Page
--> Login Pages
--> Main Pages

当应用程序第一次运行时,我可以使用 var link = await getInitialLink(); 来获取打开应用程序的 link 的值。

但是,如果我在后台打开应用程序,我无法得到相同的结果。

我尝试使用

getLinksStream().listen((link) => (link) {
          try {
            var _latestUri;
            if (link != null) _latestUri = Uri.parse(link);
            print("=== Formated successfully a link!");
          } on FormatException {
            print("--- A link got here but was invalid");
          }
        });

用于获取 Splash Screen 中的 link,但如果应用程序已在 LoginMain 页面中打开,则不会通过再次Splash Screen

然后,我尝试将其放入InheritedWidget,但是,没有得到任何结果。

所以我的问题是:我应该在哪里以及如何设置 uni_links 以便即使应用程序打开我也可以捕获所有传入的 link?

或者更好,我可以使用 App Links/Universal 链接的替代方案吗?

虽然这不是最好和最优雅的方法,但我解决了这个问题。

首先,我没有正确使用 getLinksStream

而不是

(link) => (link) {...}

(link) {...}

然后,我需要把这个订阅放在我的Splash Screen中,不要销毁它,这样它才能监听新的事件。

如果大家有更好的解决方案,欢迎补充

对于这种情况,你需要同时使用getInitialUri()和getUriLinksStream(), 如果应用程序直接启动,您将从 getInitialUri 获取 uri,如果应用程序已经 运行 在后台,您将从 getUriLinksStream.

获取 uri