当应用程序在后台时使用 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,但如果应用程序已在 Login
或 Main
页面中打开,则不会通过再次Splash Screen
。
然后,我尝试将其放入InheritedWidget
,但是,没有得到任何结果。
所以我的问题是:我应该在哪里以及如何设置 uni_links
以便即使应用程序打开我也可以捕获所有传入的 link?
或者更好,我可以使用 App Links/Universal 链接的替代方案吗?
虽然这不是最好和最优雅的方法,但我解决了这个问题。
首先,我没有正确使用 getLinksStream
而不是
(link) => (link) {...}
是
(link) {...}
然后,我需要把这个订阅放在我的Splash Screen
中,不要销毁它,这样它才能监听新的事件。
如果大家有更好的解决方案,欢迎补充
对于这种情况,你需要同时使用getInitialUri()和getUriLinksStream(),
如果应用程序直接启动,您将从 getInitialUri 获取 uri,如果应用程序已经 运行 在后台,您将从 getUriLinksStream.
获取 uri
我的应用程序具有以下结构:
- 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,但如果应用程序已在 Login
或 Main
页面中打开,则不会通过再次Splash Screen
。
然后,我尝试将其放入InheritedWidget
,但是,没有得到任何结果。
所以我的问题是:我应该在哪里以及如何设置 uni_links
以便即使应用程序打开我也可以捕获所有传入的 link?
或者更好,我可以使用 App Links/Universal 链接的替代方案吗?
虽然这不是最好和最优雅的方法,但我解决了这个问题。
首先,我没有正确使用 getLinksStream
而不是
(link) => (link) {...}
是
(link) {...}
然后,我需要把这个订阅放在我的Splash Screen
中,不要销毁它,这样它才能监听新的事件。
如果大家有更好的解决方案,欢迎补充
对于这种情况,你需要同时使用getInitialUri()和getUriLinksStream(), 如果应用程序直接启动,您将从 getInitialUri 获取 uri,如果应用程序已经 运行 在后台,您将从 getUriLinksStream.
获取 uri