Flutter firebase 无法直接登陆子页面

布彭德拉·阿查里亚

Flutter/Firebase 的各位,大家好

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

用例:

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

设想:

用户从手机的网络浏览器点击动态链接,如果用户有一个应用程序并进入特定页面,应用程序就会打开。

我能做什么?

我可以在应用程序中打开特定页面。但是,当用户点击动态链接 url 后,它首先打开应用程序的主页,然后被重定向到子页面。首次登陆首页后,登陆特定页面有1-2秒的延迟。我想要的是 - 省略用户登陆主页,只登陆动态链接的特定页面

**Code Format:**

Home Page : It has some Game
      

The router has 4 different subpages : 

Default Home Page that will show game, and the rest other pages are based on the dynamic link provided Ex: Page_1, Page_2, and Page_3. 

**What am I looking help or guidance?**

The suggestion I am looking is to avoid landing in home page (game landing page) when dynamic link is clicked from web url of the mobile.



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;

    @override
  void initState() {
    WidgetsBinding.instance.addObserver(this);
    super.initState();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      _timerLink = new Timer(const Duration(milliseconds: 1), () {
        _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 MaterialApp(
      title: 'Game Name',
      home: Center(
        child: CircularProgressIndicator(),
      ),
      navigatorObservers: <NavigatorObserver>[observer],
      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()
      },
    ));
  }
}

Any help or suggestions is appreciated.
Thanks!
解说员

您可以做的只是在您的第一个屏幕上显示加载屏幕(可能类似于启动屏幕?)。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flutter Firebase Cloud功能无法调用

来自分类Dev

Firebase托管-Flutter Web App托管额外的.html页面

来自分类Dev

Flutter Web Firebase-按子收集字段获取收集

来自分类Dev

Flutter-Firebase中的Hero小部件子图像网址

来自分类Dev

我无法在Flutter项目中添加Firebase库

来自分类Dev

Flutter Google Maps和Firebase无法一起使用

来自分类Dev

Flutter无法调用CallBack函数以解决Firebase云混乱

来自分类Dev

使用Firebase In App Messaging插件时Flutter无法完成项目

来自分类Dev

Flutter-无法构建插件firebase_core

来自分类Dev

Flutter-用户登录Firebase时FutureBuilder无法重建吗?

来自分类Dev

Flutter Firebase Dynamic Link Navigator.push无法导航

来自分类Dev

Flutter Firebase Auth无法在Google Play中使用

来自分类Dev

无法在Google Chrome上运行Flutter Firebase Web应用

来自分类Dev

向Firebase Flutter注册后无法导航到主页

来自分类Dev

Flutter - 无法使用 Firebase 身份验证登录

来自分类Dev

Flutter:对Firebase的CRUD澄清

来自分类Dev

Flutter Firebase时间戳

来自分类Dev

登录Firebase / Flutter

来自分类Dev

Flutter Firebase通知消息

来自分类Dev

Flutter : getDownloadUrl (firebase storage)

来自分类Dev

Flutter:getDownloadUrl(Firebase存储)

来自分类Dev

Flutter-Firebase SDK

来自分类Dev

(Flutter Web)Firebase Storage无法与Firebase插件一起使用

来自分类Dev

Flutter:iOS不显示Flutter Firebase Crashlytics

来自分类Dev

如何获取Umbraco登陆页面以选择子页面作为默认页面

来自分类Dev

如何获取Umbraco登陆页面以选择子页面作为默认页面

来自分类Dev

直接从登陆页面点击忘记密码时出现错误 Url not found

来自分类Dev

Android Flutter Firebase通知问题

来自分类Dev

在Flutter应用程序上跳过登录页面(Google + FireBase)

Related 相关文章

  1. 1

    Flutter Firebase Cloud功能无法调用

  2. 2

    Firebase托管-Flutter Web App托管额外的.html页面

  3. 3

    Flutter Web Firebase-按子收集字段获取收集

  4. 4

    Flutter-Firebase中的Hero小部件子图像网址

  5. 5

    我无法在Flutter项目中添加Firebase库

  6. 6

    Flutter Google Maps和Firebase无法一起使用

  7. 7

    Flutter无法调用CallBack函数以解决Firebase云混乱

  8. 8

    使用Firebase In App Messaging插件时Flutter无法完成项目

  9. 9

    Flutter-无法构建插件firebase_core

  10. 10

    Flutter-用户登录Firebase时FutureBuilder无法重建吗?

  11. 11

    Flutter Firebase Dynamic Link Navigator.push无法导航

  12. 12

    Flutter Firebase Auth无法在Google Play中使用

  13. 13

    无法在Google Chrome上运行Flutter Firebase Web应用

  14. 14

    向Firebase Flutter注册后无法导航到主页

  15. 15

    Flutter - 无法使用 Firebase 身份验证登录

  16. 16

    Flutter:对Firebase的CRUD澄清

  17. 17

    Flutter Firebase时间戳

  18. 18

    登录Firebase / Flutter

  19. 19

    Flutter Firebase通知消息

  20. 20

    Flutter : getDownloadUrl (firebase storage)

  21. 21

    Flutter:getDownloadUrl(Firebase存储)

  22. 22

    Flutter-Firebase SDK

  23. 23

    (Flutter Web)Firebase Storage无法与Firebase插件一起使用

  24. 24

    Flutter:iOS不显示Flutter Firebase Crashlytics

  25. 25

    如何获取Umbraco登陆页面以选择子页面作为默认页面

  26. 26

    如何获取Umbraco登陆页面以选择子页面作为默认页面

  27. 27

    直接从登陆页面点击忘记密码时出现错误 Url not found

  28. 28

    Android Flutter Firebase通知问题

  29. 29

    在Flutter应用程序上跳过登录页面(Google + FireBase)

热门标签

归档