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

升级flutter_local_notifications到9.1.1后调用zonedSchedule触发NullPointerException

问题触发原因

  • 时区配置未初始化:flutter_local_notifications 9.0+版本的zonedSchedule方法强制依赖timezone包的时区数据库能力,仅替换方法调用逻辑、未提前完成时区初始化操作时,原生层处理调度逻辑会出现异步流程异常,提前释放MethodChannel的Result回调对象,最终调用success方法时对象为空抛出空指针异常。
  • 插件初始化未完成:调用zonedSchedule前未完成插件全流程初始化、安卓端通知通道未提前注册、安卓13及以上版本未提前获取POST_NOTIFICATIONS权限,都会导致原生层处理调度请求时中途报错销毁回调对象,触发空指针。
  • 时间参数不合法:传入的tz.TZDateTime对象未绑定有效时区信息,比如tz.local未完成本地时区加载就被调用,原生层解析时间参数失败,也会导致回调提前释放触发异常。

对应解决方案

  • 先在应用启动阶段完成时区初始化,示例代码如下:
import 'package:timezone/data/latest_all.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
import 'package:flutter_native_timezone/flutter_native_timezone.dart';

// 在main函数runApp执行前调用该初始化逻辑
Future<void> initTimeZone() async {
  tz.initializeTimeZones();
  final String timeZoneName = await FlutterNativeTimezone.getLocalTimezone();
  tz.setLocalLocation(tz.getLocation(timeZoneName));
}
  • 调用zonedSchedule前确认插件已完成初始化,安卓端提前创建通知通道,安卓13及以上版本先申请通知权限,拿到授权结果后再调用调度方法。
  • 调用方法前先打印校验生成的TZDateTime对象,确认时间值与时区信息均合法后再传入参数。

内容的提问来源于stack exchange,提问作者Robin.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:36:07