首页 > 解决方案 > Flutter firebase_messaging 6.0.9 如何将推送通知记录到数据库中 - sqflite: 1.2.0

问题描述

我已经构建了一个应用程序,并将 firebase 消息传递包与 firebase 云通知一起使用。通知到了,我对那部分很满意。我还想做的是将这些通知存储到数据库中,并为用户提供一个方便的部分,直接在应用程序内部列出所有以前的通知。

对于数据库,我使用的是 SQLite 包,我可以毫无问题地设置它。我已经进行了测试并且它有效(我已经创建了存储、更新、删除程序)。

现在我正试图将这两者联系在一起。因此,在 iOS 收到通知后,我想运行其中一个程序来将通知存储在数据库中。但是,它似乎不起作用,我不确定我在这里没有掌握什么。我的代码看起来像这样,只是为了让你明白:

import 'package:flutter/material.dart';
import 'package:thw/utilities/constants.dart';
import 'package:thw/screens/main_screen.dart';
import 'package:thw/widgets/widgetNotifications.dart';
import 'package:thw/services/db.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'dart:io';

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
  if (message.containsKey('data')) {
    // Handle data message
    final dynamic notification = message['data'];
    print(notification);
    await DbModel().dbOpen();
    await DbModel().dbInsert(notification['title'], notification['body']);

  }

  if (message.containsKey('notification')) {
    // Handle notification message
    final dynamic notification = message['notification'];
    print(notification);
    await DbModel().dbOpen();
    await DbModel().dbInsert(notification['title'], notification['body']);
  }
}

class NotificationsScreen extends StatefulWidget {
  @override
  _NotificationsScreenState createState() => _NotificationsScreenState();
}

class _NotificationsScreenState extends State<NotificationsScreen> {

  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
  List notifications;


  @override
  void initState() {
    super.initState();
    notifications = [];
    getAllNotifications();


... more code

我在每个屏幕上都添加了这段代码。我有加载、主屏幕和通知屏幕。但这部分似乎不起作用:

Future<dynamic> myBackgroundMessageHandler(Map<String, dynamic> message) async {
  if (message.containsKey('data')) {
    // Handle data message
    final dynamic notification = message['data'];
    print(notification);
    await DbModel().dbOpen();
    await DbModel().dbInsert(notification['title'], notification['body']);

  }

  if (message.containsKey('notification')) {
    // Handle notification message
    final dynamic notification = message['notification'];
    print(notification);
    await DbModel().dbOpen();
    await DbModel().dbInsert(notification['title'], notification['body']);
  }
}

我想知道我做错了什么?我对它是如何工作的有不好的理解吗?通知到达,但带有 dbOpen 和 dbInsert 的部分似乎从未运行。

标签: flutter

解决方案


推荐阅读