全局on_message回调火力扑扑

时间:2020-02-11 04:47:59

标签: firebase flutter dart

在我的应用中,我已经配置了Firebase推送通知,并且具有以下配置代码。它在我在initState中实现此代码的页面上显示了onMessage。我在应用程序中有多页表单字段,并且希望在应用程序中的任何页面上显示警报。有没有什么方法可以在每个屏幕上显示警报而无需在每个页面上的initState中调用该函数?

_firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async {
        showDialog(
                context: context,
                builder: (context) => AlertDialog(
                        content: ListTile(
                        title: Text(message['notification']['title']),
                        subtitle: Text(message['notification']['body']),
                        ),
                        actions: <Widget>[
                        FlatButton(
                            child: Text('Ok'),
                            onPressed: () => Navigator.of(context).pop(),
                        ),
                    ],
                ),
            );
        print("onMessage: $message");
        final notification = message['notification'];
        setState(() {
          messages.add(Message(
              title: notification['title'], body: notification['body']));
        });
      },
      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");

        final notification = message['data'];
        setState(
          () {
            messages.add(
              Message(
                title: '${notification['title']}',
                body: '${notification['body']}',
              ),
            );
          },
        );
        Navigator.pushNamed(context, '/notify');
      },

1 个答案:

答案 0 :(得分:1)

您仅应致电FCM配置一次,否则您将遇到问题(无论如何,我的经验)。如果您在主屏幕的initState中调用.configure,则树(下级)下方,您导航并从其返回的任何页面都将通过onMessage回调对FCM通知做出反应。