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 件のコメント:
コメントを投稿