我在我的应用程序中设置了深度链接。当应用程序没有打开时(甚至在后台也没有),我打开应用程序的URL,它会把我带到正确的页面。但是点击后退按钮会关闭整个应用程序,因为它没有可以弹出的前一个屏幕。
我想让它转到当前屏幕之前的任何屏幕,或者如果没有前一个屏幕,则转到主屏幕。
这就是我如何设置深度链接:
Future<void> _initApp() async {
await _initUriHandler();
await _incomingLinkHandler();
}
Future<void> _initUriHandler() async {
if (_initialUriLinkHandled) {
return;
}
_initialUriLinkHandled = true;
var navigator = Navigator.of(context);
try {
final initialUrl = await getInitialLink();
if (initialUrl != null) {
Uri uri = Uri.parse(initialUrl);
var goToScreen = getScreen(uri);
if (goToScreen == null) {
return;
}
navigator.pushReplacement(
MaterialPageRoute(builder: (context) => goToScreen));
}
} catch (e) {
navigator.pushReplacementNamed(AppRoutes.main);
}
}
_incomingLinkHandler() {
if (kIsWeb) {
return;
}
var navigator = Navigator.of(context);
_streamSubscription = uriLinkStream.listen((Uri? uri) {
var goToScreen = getScreen(uri);
if (goToScreen == null) {
return;
}
navigator
.pushReplacement(MaterialPageRoute(builder: (context) => goToScreen));
}, onError: (err) => navigator.pushReplacementNamed(AppRoutes.main));
}
1条答案
按热度按时间ymdaylpp1#
您可以使用
WillPopScope
小部件来处理后退按钮的按下。您导航到的屏幕,例如:
GoToScreen
可以写成这样:在GoToScreen构建方法中: