You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:03:14