扑火的火力基地无法直接降落在子页面中

时间:2018-11-08 00:12:36

标签: android firebase dart flutter firebase-dynamic-links

Hello Flutter / Firebase员工

我正在尝试实现一个简单的游戏,该游戏接受firebase动态链接并路由到应用程序的特定页面。

用例:

具有路由器的主页,该路由器将根据动态链接请求将页面路由到应用程序

场景:

用户单击电话的网络浏览器中的动态链接,并在用户拥有某个应用并登陆到特定页面的情况下打开该应用。

我能做什么?

我能够在应用程序中打开特定页面。但是,在用户单击动态链接URL之后,它将首先打开应用程序的主页,然后将其重定向到子页面。首次登陆主页后,登陆到特定页面会有1-2秒的延迟。我想要的是-忽略用户登陆首页,而只登陆动态链接的特定页面

var output = "";
var summary = "ZZZZ";
foreach(Char c in summary)
    output += (char)(c - 13);

Console.WriteLine(output);

1 个答案:

答案 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(),
            ),
          ));
        }
      }