我正在开发一个从 firebase 云消息传递接收通知的应用程序。我收到消息后将其保存在 Hive 中。我有一个通知屏幕,显示从配置单元读取的通知,该通知在收到通知时立即更新。这一直运作良好。
现在的问题是,应用程序在后台运行时收到的通知(不是终止/终止)保存在配置单元中,但导航到通知屏幕时屏幕不会更新(看不到配置单元中的更新),直到应用程序终止并且重新运行。
我读到这是因为 onBackgroundMessage 处理程序在不同的隔离上运行,并且隔离无法共享存储。看来我需要一种方法将 Hive 通知更新从 onBackgroundMessage 处理程序传递到主隔离。
这是我到目前为止的实现
push_message.dart 实例保存在hive中的通知类
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:app_name/helpers/helpers.dart';
part 'push_message.g.dart';
@HiveType(typeId: 1)
class PushMessage extends HiveObject {
@HiveField(0)
int id = int.parse(generateRandomNumber(7));
@HiveField(1)
String? messageId;
@HiveField(2)
String title;
@HiveField(3)
String body;
@HiveField(4)
String? bigPicture;
@HiveField(5)
DateTime? sentAt;
@HiveField(6)
DateTime? receivedAt;
@HiveField(7)
String? payload;
@HiveField(8, defaultValue: '')
String channelId = 'channel_id';
@HiveField(9, defaultValue: 'channel name')
String channelName …Run Code Online (Sandbox Code Playgroud) dart dart-isolates flutter firebase-cloud-messaging flutter-hive