Я пытаюсь заставить приложение открывать глубокие ссылки, такие как «appname:///loadgame/gameid», но когда мы пытаемся открыть ссылки, когда приложение закрыто, оно просто переходит на черный экран.
Я пробовал ждать загрузки приложения, задерживать навигацию по gorouter на несколько секунд и выполнять еще несколько действий, но это просто не работает.
GoRouter называется appRouter.
Когда приложение работает в фоновом режиме, оно работает нормально, но оно должно работать и когда оно не работает.
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State createState() => _MyAppState();
}
class _MyAppState extends State {
late AppLinks _appLinks;
late dynamic _sub;
Uri? _pendingInitialUri;
bool deadStartHandled = false;
@override
void initState() {
super.initState();
_initAppLinks();
}
Future _initAppLinks() async {
_appLinks = AppLinks();
// cold start
final initialUri = await _appLinks.getInitialLink();
if (initialUri != null) {
_pendingInitialUri = initialUri;
if (!mounted) return;
_handleIncomingLink(_pendingInitialUri!, true);
deadStartHandled = true;
_pendingInitialUri = null;
} else {
// app is running
_sub = _appLinks.uriLinkStream.listen(
(Uri? uri) {
if (uri != null) {
deadStartHandled = false;
_handleIncomingLink(uri, false);
}
},
);
}
}
void _handleIncomingLink(Uri uri, bool appStart) {
if (uri.scheme == 'appname' &&
(uri.path == '/' || uri.toString() == 'appname://')) {
debugPrint('Custom scheme URL intercepted: $uri');
return;
} else {
if (appStart) {
//this one sends directly to '/' but nothing happens
context.go(uri.path);
//this one shows black screen
//appRouter.go(uri.path);
} else {
appRouter.go(uri.path);
}
return;
}
}
@override
void dispose() {
super.dispose();
_sub.cancel();
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
context.read();
return MaterialApp.router(
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('sv'),
],
title: 'AppName',
theme: AppTheme().getTheme(),
routerConfig: appRouter,
builder: (context, child) {
return Stack(
children: [
child!,
if (context.watch().shouldShowLoader)
LoadingScreen(context: context),
],
);
},
);
}
}
Я также пытался установить что-то подобное в инициализации, но выдает ту же ошибку, просто черный экран.
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_pendingInitialUri != null) {
_handleIncomingLink(_pendingInitialUri!, deadStartHandled);
_pendingInitialUri = null;
}
});
Подробнее здесь: https://stackoverflow.com/questions/798 ... een-for-me
Открытие диплинка в мертвом приложении просто дает мне черный экран? ⇐ Android
Форум для тех, кто программирует под Android
1769616992
Anonymous
Я пытаюсь заставить приложение открывать глубокие ссылки, такие как «appname:///loadgame/gameid», но когда мы пытаемся открыть ссылки, когда приложение закрыто, оно просто переходит на черный экран.
Я пробовал ждать загрузки приложения, задерживать навигацию по gorouter на несколько секунд и выполнять еще несколько действий, но это просто не работает.
GoRouter называется appRouter.
Когда приложение работает в фоновом режиме, оно работает нормально, но оно должно работать и когда оно не работает.
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State createState() => _MyAppState();
}
class _MyAppState extends State {
late AppLinks _appLinks;
late dynamic _sub;
Uri? _pendingInitialUri;
bool deadStartHandled = false;
@override
void initState() {
super.initState();
_initAppLinks();
}
Future _initAppLinks() async {
_appLinks = AppLinks();
// cold start
final initialUri = await _appLinks.getInitialLink();
if (initialUri != null) {
_pendingInitialUri = initialUri;
if (!mounted) return;
_handleIncomingLink(_pendingInitialUri!, true);
deadStartHandled = true;
_pendingInitialUri = null;
} else {
// app is running
_sub = _appLinks.uriLinkStream.listen(
(Uri? uri) {
if (uri != null) {
deadStartHandled = false;
_handleIncomingLink(uri, false);
}
},
);
}
}
void _handleIncomingLink(Uri uri, bool appStart) {
if (uri.scheme == 'appname' &&
(uri.path == '/' || uri.toString() == 'appname://')) {
debugPrint('Custom scheme URL intercepted: $uri');
return;
} else {
if (appStart) {
//this one sends directly to '/' but nothing happens
context.go(uri.path);
//this one shows black screen
//appRouter.go(uri.path);
} else {
appRouter.go(uri.path);
}
return;
}
}
@override
void dispose() {
super.dispose();
_sub.cancel();
}
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
context.read();
return MaterialApp.router(
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('sv'),
],
title: 'AppName',
theme: AppTheme().getTheme(),
routerConfig: appRouter,
builder: (context, child) {
return Stack(
children: [
child!,
if (context.watch().shouldShowLoader)
LoadingScreen(context: context),
],
);
},
);
}
}
Я также пытался установить что-то подобное в инициализации, но выдает ту же ошибку, просто черный экран.
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_pendingInitialUri != null) {
_handleIncomingLink(_pendingInitialUri!, deadStartHandled);
_pendingInitialUri = null;
}
});
Подробнее здесь: [url]https://stackoverflow.com/questions/79878084/opening-deeplink-on-a-dead-app-just-gives-black-screen-for-me[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия