【问题标题】:Firebase Cloud Messaging onLaunch callbackFirebase 云消息传递 onLaunch 回调
【发布时间】:2020-06-21 19:26:24
【问题描述】:

我的应用程序结构有点乱,但我必须先添加这个补丁,然后我会重新构建整个逻辑。问题是我首先检查是否有 firebase 用户,如果有,我使用 StreamBuilder 从 Firestore 获取当前用户配置文件,然后我有 _firebaseMessaging.configure 方法,因为 onLaunch 和 onResume 我使用这个回调:

void _navigateToGestorResevas(Map<String, dynamic> message, User currentUser) {

    Navigator.push(context,
        MaterialPageRoute(builder: (context) =>
            GestorScreen(user: currentUser)));
  }

因为我需要将用户发送到此屏幕,以便他从 firebase 获取消息。 onResume 这工作正常,但 onLaunch 它会进入屏幕并获取数据,但大约有 20 秒的时间会出现某种故障。它在这个 _initState func 中有和没有快照数据的两种状态之间切换 20-30 次:

final snapshot = await _dbRef.child('mensajes').child(widget.user.id).once();
    if (snapshot.value != null) {
      setState(() {
        hayMensajes = true;
      });
      final data = snapshot.value;
      for (var entry in data.entries) {
        Message message = Message.fromJson(entry.value);
        setState(() {
          message.add(message);
        });
      }
    } else {
      setState(() {
        hayMensajes = false;
      });
    }

有人知道我做错了什么吗?

【问题讨论】:

    标签: flutter dart firebase-cloud-messaging


    【解决方案1】:

    如果我没记错的话,有一些关于 FCM onLaunch 颤振回调的活跃问题。其中一些仍然没有修复。大多数人不得不面对的问题之一是onLaunch 回调被多次调用。我不知道为什么会这样,但就像你的情况一样,你可以通过一些临时修复来解决这个问题。

    如果同一个屏幕被一遍又一遍地推送,并且出现故障,您可以弹出堆栈直到它到达您要打开的那个,并设置一个条件来推送导航器,只有当新路由与旧路由不同时.使用命名路由,

    Navigator.popUntil(context, ModalRoute.withName(routeName));
    
    if (ModalRoute.of(context).settings.name != routeName) {
          Navigator.pushNamed(context, routeName);
    }
    

    我不确定这是否是你问的问题,但我希望至少我的回答能有所帮助。

    【讨论】:

    • 好吧,我只需要应用不同的逻辑来绕过这个问题,但这和你的建议有点相似,所以尽管我不能像答案一样接受它,但目前,我认为它值得一票。
    猜你喜欢
    • 2018-11-29
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多