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

Flutter中Isar数据库如何为同一类型创建多个集合?

Isar 同类型对象创建多个集合的实现方案

Isar 不支持同一个模型类直接绑定多个集合,每个@Collection注解的类仅能对应唯一的同名集合,无法重复添加注解是框架的正常限制,可通过以下两种方案实现需求:

方案1:子类继承实现独立集合(推荐,完全物理隔离)

把原模型类的@Collection注解移除,创建两个继承自该类的子类,分别添加@Collection注解即可,无需重复定义字段:

import 'package:isar/isar.dart';

// 原基础模型类,不添加@Collection注解
class ProgramModel {
  @Id()
  int? id;
  String? title;
}

// 第一个集合对应的实体类
@Collection()
class FirstProgramCollection extends ProgramModel {}

// 第二个集合对应的实体类
@Collection()
class SecondProgramCollection extends ProgramModel {}

后续操作两个集合时,分别调用isar.firstProgramCollections和isar.secondProgramCollections即可,两个集合完全独立,互不影响,支持单独设置索引、单独清理数据等操作。

方案2:新增区分字段实现逻辑隔离(轻量场景适用)

如果不需要物理隔离两个数据集,可在原模型类中新增一个区分标识字段,查询、写入时通过该字段过滤即可:

import 'package:isar/isar.dart';

@Collection()
class ProgramModel {
  @Id()
  int? id;
  String? title;
  // 区分逻辑集合:1对应第一个集合,2对应第二个集合,可根据需求扩展
  int collectionType = 1;
}

// 查询第一个逻辑集合的数据
final firstCollectionData = isar.programModels.filter().collectionTypeEqualTo(1).findAll();
// 查询第二个逻辑集合的数据
final secondCollectionData = isar.programModels.filter().collectionTypeEqualTo(2).findAll();

该方案无需新增类,适合两个集合数据结构完全一致、仅逻辑上拆分的场景,数据量较小的情况下性能无明显差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:36:09