FlutterのIsarデータベースでenum
のリストを保存および読み込みする方法について解説します。Isarデータベースでは、enum
自体の保存はサポートされていますが、enum
のリストに関してはサポートがないため、enum
を整数値に変換して保存し、読み込む際に整数値からenum
に変換する必要があります。
1. Enumの定義
まず、Flutterでenum
を定義します。例えば、次のようなenum
を考えます:
enum Status { active, inactive, unknown }
2. Isarのモデルクラスの定義
Isarのモデルでは、enum
のリストを整数のリストとして定義します。@Collection()
アノテーションを使ってクラスをマークし、Isarのスキーマとして認識させます。
import 'package:isar/isar.dart';
()
class User {
int id = Isar.autoIncrement;
late List<int> statuses;
List<Status> get statusEnums => statuses.map((s) => Status.values[s]).toList();
set statusEnums(List<Status> enums) => statuses = enums.map((e) => e.index).toList();
}
この例では、statuses
フィールドは整数のリストとして保存され、statusEnums
プロパティを通じてenum
のリストに変換されます。
3. データの保存と読み込み
データを保存する際には、enum
のリストを整数のリストに変換して保存します。読み込み時には、整数のリストをenum
に変換します。
final isar = await Isar.open([UserSchema]);
final user = User()..statusEnums = [Status.active, Status.inactive];
await isar.writeTxn(() async {
await isar.users.put(user);
});
final savedUser = await isar.users.get(user.id);
final loadedStatuses = savedUser?.statusEnums;
この方法により、Isarでenum
のリストを効果的に扱うことができます。各enum
をそのインデックスに変換し、整数のリストとしてデータベースに保存し、読み込み時にはそれを元に戻す形で対応します。
0 件のコメント:
コメントを投稿