Flutter:FCM未处理异常:空值检查运算符用于空值
Posted
技术标签:
【中文标题】Flutter:FCM未处理异常:空值检查运算符用于空值【英文标题】:Flutter: FCM Unhandled Exception: Null check operator used on a null value 【发布时间】:2021-07-22 01:46:48 【问题描述】:E/flutter (26872): [错误:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:对空值使用空检查运算符 E/颤振 (26872): #0 MethodChannelFirebaseMessaging.registerBackgroundMessageHandler (包:firebase_messaging_platform_interface/src/method_channel/method_channel_messaging.dart:173:53) E/颤振 (26872): #1 FirebaseMessagingPlatform.onBackgroundMessage= (包:firebase_messaging_platform_interface/src/platform_interface/platform_interface_messaging.dart:108:16)
// Background Messaging Set Up
Future<void> _firebaseMessagingBackgroundHandler(
RemoteMessage message) async
print('background message');
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(....)
我在 android 系统上收到此代码错误。除非应用程序终止,否则一切正常。
适用于 Android 的功能:
终止、onBackground 和 onForeground 时的通知 仅在前台显示日期什么在 Android 上不起作用:
仅在 Terminated 和 onBackground 时提供数据适用于 iOS 的功能:
终止、onBackground 和 onForeground 时的通知 仅在前台显示日期什么在 iOS 上不起作用:
仅在终止时提供数据,我不知道为什么我会在 Android 系统上收到空值错误,我该如何解决这个问题?另外,当应用终止时,我在ios上收不到Data only
推送通知是真的吗?
【问题讨论】:
【参考方案1】:我和你一样的错误,在同一行。我查看了docs,它说明了有关后台消息处理程序的两件事。
-
不能是匿名函数。
它必须是***函数(例如,不是需要初始化的类方法)。
在我的例子中,它不是一个***函数,它是在一个类中声明的。当您将处理程序从任何类或函数中移出,使其成为***函数并且不需要任何类或方法初始化时,错误就会消失。
【讨论】:
top-level
函数是我的愚蠢 -> 把它放在类的顶部。【参考方案2】:
_firebaseMessagingBackgroundHandler 函数应该在主函数之外。
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async
await Firebase.initializeApp();
Future<void> main() async
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(
...
);
【讨论】:
对。当我读到top-level
时,我认为我必须把它放在类或函数的顶部。我意识到这意味着OUTSIDE
。
是的,放在外面:)【参考方案3】:
就我而言,按照文档所说的去做是不够的。所以我意识到我应该在 main 函数的所有内容之前添加WidgetsFlutterBinding.ensureInitialized()
,如下所示:
void main()
WidgetsFlutterBinding.ensureInitialized();
FirebaseMessaging.onBackgroundMessage(_handleMessage);
runApp(const Homino());
【讨论】:
以上是关于Flutter:FCM未处理异常:空值检查运算符用于空值的主要内容,如果未能解决你的问题,请参考以下文章
如何在颤振发布方法中修复“未处理的异常:用于空值的空检查运算符”
Flutter Bloc Test:空值检查运算符用于空值(空安全)
未处理的异常:MissingPluginException(未找到对通道 plugins.flutter.io/connectivity 进行方法检查的实现)