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

Flutter Isar数据库不支持TimeOfDay类型的替代方案咨询

在Isar v3中处理TimeOfDay字段的替代方案

方案1:结合现有JSON序列化用@JsonConverter注解

Isar v3支持通过json_serializable的转换器来处理自定义类型,刚好你已有JSON序列化能力,可以直接复用:

  1. 实现TimeOfDay与字符串的转换转换器:
class TimeOfDayConverter implements JsonConverter<TimeOfDay, String> {
  const TimeOfDayConverter();

  @override
  TimeOfDay fromJson(String json) {
    final parts = json.split(':');
    return TimeOfDay(hour: int.parse(parts[0]), minute: int.parse(parts[1]));
  }

  @override
  String toJson(TimeOfDay object) {
    return '${object.hour.toString().padLeft(2, '0')}:${object.minute.toString().padLeft(2, '0')}';
  }
}
  1. 在Isar模型的TimeOfDay字段上添加该转换器注解:
@Collection()
class YourModel {
  Id id = Isar.autoIncrement;

  @TimeOfDayConverter()
  TimeOfDay? scheduledTime;
}
  1. 确保build.yaml中启用Isar的JSON序列化支持:
targets:
  $default:
    builders:
      isar_generator:
        options:
          json_serializable: true

方案2:拆分字段原生存储

把TimeOfDay拆成Isar原生支持的int类型字段,通过封装的getter/setter来实现TimeOfDay的读写:

@Collection()
class YourModel {
  Id id = Isar.autoIncrement;

  int? _hour;
  int? _minute;

  TimeOfDay? get scheduledTime {
    if (_hour == null || _minute == null) return null;
    return TimeOfDay(hour: _hour!, minute: _minute!);
  }

  set scheduledTime(TimeOfDay? time) {
    _hour = time?.hour;
    _minute = time?.minute;
  }
}

这种方式无需额外依赖,读写效率更高,适合对性能有要求的场景。

方案3:手动字符串转换存储

和你之前用Hive的逻辑类似,直接将TimeOfDay转成字符串存在Isar的String字段,通过计算属性处理转换:

@Collection()
class YourModel {
  Id id = Isar.autoIncrement;

  String? _timeString;

  TimeOfDay? get scheduledTime {
    if (_timeString == null) return null;
    final parts = _timeString!.split(':');
    return TimeOfDay(hour: int.parse(parts[0]), minute: int.parse(parts[1]));
  }

  set scheduledTime(TimeOfDay? time) {
    if (time == null) {
      _timeString = null;
    } else {
      _timeString = '${time.hour.toString().padLeft(2, '0')}:${time.minute.toString().padLeft(2, '0')}';
    }
  }
}

该方式逻辑直接,完全匹配你之前的使用习惯,无需引入新工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:45:37