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

如何通过字符串或变量简洁获取Isar Collection?优化通用函数实现

Isar通用集合操作的简洁实现方案

你当前用多分支判断实现了Isar集合的通用获取逻辑,这里提供几个更简洁的优化思路:

1. 用Map映射替代分支判断

把模型名称与对应集合的映射关系存入Map,直接通过键值对获取目标集合,后续新增模型只需在Map中补充条目即可:

Future<IsarCollection> getIsarModel(Isar pIsar, String pModelType) async {
  final modelMap = {
    "mymodel1": pIsar.mymodel1,
    "mymodel2": pIsar.mymodel2,
    "mymodel3": pIsar.mymodel3,
  };
  return modelMap[pModelType] ?? pIsar.mymodel3; // 兜底返回默认集合
}

Future<List<dynamic>> listModel(String pModelType) async {
  final isar = await _db;
  final isarModel = getIsarModel(isar, pModelType);  
  return isarModel.where().findAll();       
}

2. 泛型实现类型安全的通用方法

如果不想用字符串传递模型类型,泛型是更安全的选择,能避免拼写错误:

Future<List<T>> listModel<T>() async {
  final isar = await _db;
  return isar.collection<T>().where().findAll();
}

// 调用示例
final myModel1List = await listModel<MyModel1>();
final myModel2List = await listModel<MyModel2>();

3. 直接使用Isar内置的collectionByName方法

Isar原生提供了通过名称获取集合的方法,无需自定义getIsarModel函数:

Future<List<dynamic>> listModel(String pModelType) async {
  final isar = await _db;
  final collection = isar.collectionByName(pModelType);
  return collection.where().findAll();
}

内容的提问来源于stack exchange,提问作者J-L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:19