如何通过字符串或变量简洁获取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
相关产品推荐
相关产品推荐

