Hello Flutter / Firebase员工
我正在尝试实现一个简单的游戏,该游戏接受firebase动态链接并路由到应用程序的特定页面。
用例:
具有路由器的主页,该路由器将根据动态链接请求将页面路由到应用程序
场景:
用户单击电话的网络浏览器中的动态链接,并在用户拥有某个应用并登陆到特定页面的情况下打开该应用。
我能做什么?
我能够在应用程序中打开特定页面。但是,在用户单击动态链接URL之后,它将首先打开应用程序的主页,然后将其重定向到子页面。首次登陆主页后,登陆到特定页面会有1-2秒的延迟。我想要的是-忽略用户登陆首页,而只登陆动态链接的特定页面
var output = "";
var summary = "ZZZZ";
foreach(Char c in summary)
output += (char)(c - 13);
Console.WriteLine(output);
答案 0 :(得分:0)
您所能做的就是在第一个屏幕上显示一个加载屏幕(可能类似于启动屏幕?)。
@override
Widget build(BuildContext context) {
return (new MaterialApp(
title: 'Game',
home: Center(
child: CircularProgressIndicator(),
),
));
}
代码已更新:
void main() {
runApp(new MaterialApp(
title: 'Game Name',
home: _MainScreen(),
routes: <String, WidgetBuilder>{
'/NSef': (BuildContext context) => new SocialAppsPage(
"page-1-title",
"page-1"),
'/82AY': (BuildContext context) => new SocialAppsPage(
"page-2-title",
"page-2"),
'/DW7Y': (BuildContext context) => new SocialAppsPage(
"page-3-title",
"page-3"),
'/core': (BuildContext context) => new GameHomePage()
}, ));
}
class _MainScreen extends StatefulWidget {
@override
State<StatefulWidget> createState() => new _MainScreenState();
}
class _MainScreenState extends State<_MainScreen> with WidgetsBindingObserver {
Timer _timerLink;
@override
BuildContext get context => super.context;
bool fromDynamicLink = false;
verifyOrigin() async {
await Future.delayed(Duration(seconds: 1));
if (!fromDynamicLink){
fromDynamicLink = true;
Navigator.pushNamed(context, "/core");
}
}
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
verifyOrigin();
super.initState();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
fromDynamicLink = true;
_retrieveDynamicLink();
}
}
Future<void> _retrieveDynamicLink() async {
final PendingDynamicLinkData data =
await FirebaseDynamicLinks.instance.retrieveDynamicLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
Navigator.pushNamed(context, deepLink.path);
} else {
Navigator.pushNamed(context, "/core");
}
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
if (_timerLink != null) {
_timerLink.cancel();
}
super.dispose();
}
@override
Widget build(BuildContext context) {
return (new Scaffold(
appBar: AppBar(title: Text('Game Name'),
),
body: Center(
child: CircularProgressIndicator(),
),
));
}
}