【发布时间】:2022-11-22 23:29:23
【问题描述】:
我的 flutter 应用程序中有一个后台通知处理程序,它是一个顶级函数,如下所示:
Future<void> _onBackgroundMessage(RemoteMessage message) async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
final chatClient = StreamChatClient(STREAM_API_KEY);
print(Utils.user?.uid);
print(Utils.user?.streamToken);
chatClient.connectUser(
su.User(id: Utils.user?.uid ?? ''),
Utils.user?.streamToken ?? '',
connectWebSocket: false,
);
NotificationUtils.handleGetStreamNotification(message, chatClient);
SharedPreferences prefs = await SharedPreferences.getInstance();
int appBadgeCounter = prefs.getInt(appBadgePrefsKey) ?? 0;
FlutterAppBadger.updateBadgeCount(appBadgeCounter + 1);
}
在通知处理程序中,我需要使用 uid 和令牌连接到单独的服务器。我有一个 Utils 单例类,我在其中将应用程序用户存储为变量。我在我的主页有状态小部件类中初始化这个 Utils 应用程序变量,并在整个应用程序中保留它。这样,我可以最大限度地减少对用户数据的数据库调用次数。
但是,在这个顶级通知处理程序中,Utils.user 始终为空。这个顶级函数存在于我的主页有状态小部件类中,但它仍然是一个顶级函数。
我想避免为应用程序收到的每个通知调用数据库。有没有办法得到这个Utils。用户数据不为空??
【问题讨论】: