У меня есть этот виджет загрузчика, который проверяет наличие ссылок Dynami c и перемещается по маршруту /game
(виджет gamePage()
), если приложение было открыто с использованием ссылки Dynami c. если приложение было открыто вручную, оно будет перемещаться по маршруту /home
.
Мой код прекрасно работает, когда приложение закрывается, а затем открывается по динамической ссылке c. Но когда приложение уже открыто и находится на домашней странице, код не работает, поскольку контекст пуст.
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(),
},
),
);
}
Я новичок во Флаттере, поэтому любая помощь приветствуется. Спасибо.