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

使用health 10.2.0读取无数据日期的Health Connect时Flutter应用崩溃

Flutter health包请求无数据日期范围崩溃的问题解决

问题本质

这是health ^10.2.0包的底层bug。从Android堆栈跟踪能看到,崩溃源于HealthPlugin.kt第3297行的convertRecord方法抛出NullPointerException——当请求的日期范围内没有HealthDataType.NUTRITION类型的数据时,插件在转换Health Connect返回结果时未处理null值,直接导致应用崩溃。

临时规避方案

在官方修复前,用以下方法避免崩溃:

1. 捕获异常

在调用数据获取方法时用try-catch包裹,拦截异常并做兜底处理:

var now = DateTime.now();
var types = [HealthDataType.NUTRITION];
bool requested = await Health().requestAuthorization(types);

List<HealthDataPoint> healthData = [];
try {
  healthData = await Health().getHealthDataFromTypes(
    startTime: now.subtract(Duration(days: 4)),
    endTime: now,
    types: types
  );
} catch (e) {
  // 无数据或获取失败时的逻辑,比如提示用户或保持空列表
  print("健康数据获取失败: $e");
}

2. 提前检测数据存在性

如果需要提前判断是否有数据,可先调用hasData方法(会增加一次API调用):

bool hasNutritionData = await Health().hasData(HealthDataType.NUTRITION);
if (hasNutritionData) {
  // 有数据时再执行获取逻辑
  healthData = await Health().getHealthDataFromTypes(...);
} else {
  // 无数据时直接返回空列表或提示用户
}

彻底解决建议

  • 向health包的官方仓库提交Issue,附上你的复现步骤和完整堆栈信息,推动开发者修复空指针问题。
  • 若有Kotlin开发能力,可fork仓库自行修复:定位到HealthPlugin.kt第3297行,给可能为null的变量添加非空判断(比如用?.或配合空检查),再执行转换逻辑。

内容的提问来源于stack exchange,提问作者Leonardbd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:27:07