【发布时间】:2020-07-19 12:44:22
【问题描述】:
如果应用程序是使用动态链接打开的,我有这个加载器小部件,它检查动态链接并导航到/game 路由(gamePage() 小部件)。如果应用是手动打开的,它将导航到/home 路由。
当应用程序关闭然后通过动态链接打开时,我的代码可以正常工作。 但是当应用程序已经打开并且在主页上时,代码就不起作用了,因为上下文是空的。
Loader.dart
class Loader extends StatefulWidget {
@override
_LoaderState createState() => _LoaderState();
}
class _LoaderState extends State<Loader> {
Future<void> initDynamicLinks() async {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
print(deepLink);
if (deepLink != null) {
Navigator.pushReplacementNamed(context, '/game'); //this works because app has just started
}
else{
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
if (deepLink != null) {
print(context); // prints null
Navigator.pushReplacementNamed(context, '/game'); //this does not work because the app is already running and its on /home and context is null
}
},
onError: (OnLinkErrorException e) async {
print('error Opening the link');
print(e.message);
}
);
Navigator.pushReplacementNamed(context, '/home'); // load home widget if there are no deep links
}
}
@override
void initState(){
super.initState();
initDynamicLinks();
}
@override
Widget build(BuildContext context) {
//Loading animation widget code
}
}
main.dart
void main() {
runApp(MaterialApp(
initialRoute: "/load",
routes:<String, WidgetBuilder> {
'/load': (context) => Loader(),
'/home': (context) => Home(),
'/game': (context) => gamePage(),
},
),
);
}
我是 Flutter 的新手,因此不胜感激。谢谢。
【问题讨论】:
标签: firebase flutter dart firebase-dynamic-links