小编Ola*_*med的帖子

当 Hive 数据在 flutter 的 FireBaseMessage 的 onBackgroundMessage 处理程序中更新时,如何更新 UI 小部件?

我正在开发一个从 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

5
推荐指数
1
解决办法
2663
查看次数