使用OneSignal Flutter SDK v5.0.1遇'shared' getter未定义错误求助
问题原因
onesignal_flutter 5.0.0及以上版本做了重大API重构,彻底移除了OneSignal.shared单例对象,所有原有的实例方法都改为直接通过OneSignal类调用静态方法。你看到的GitHub官方示例应该是基于4.x及以下旧版本编写的,自然和当前5.0.1版本不兼容,这就是报错的核心原因。
修改后的可用代码
import 'package:onesignal_flutter/onesignal_flutter.dart'; Future<void> initOneSignal() async { // 设置调试日志级别(可选) OneSignal.setLogLevel(OSLogLevel.verbose, OSLogLevel.none); // 使用App ID初始化OneSignal await OneSignal.initialize("API_KEY", iOSSettings: { OSiOSSettings.autoPrompt: false, // 若需要默认iOS权限弹窗则设为true OSiOSSettings.inAppLaunchUrl: true, }); // 请求用户通知权限并获取状态 final permissionStatus = await OneSignal.requestPermission(); if (permissionStatus != OSNotificationPermission.authorized) { // 处理权限未授权的逻辑,比如弹窗提示用户前往设置开启权限 } }
关键API变更点
- 移除
OneSignal.shared,所有操作直接调用OneSignal类的静态方法 - 原
init方法更名为initialize - 原
getPermissionSubscriptionState被拆分:权限请求直接用requestPermission()获取状态;如需设备订阅信息,可使用OneSignal.getDeviceState() setLogLevel现在需要传入两个参数:日志级别和视觉日志级别(第二个参数传OSLogLevel.none可关闭视觉日志输出)
内容的提问来源于stack exchange,提问作者OGDEV1990
相关产品推荐
相关产品推荐

