FlutterのIsarでenumのリストを保存する方法

2024年5月28日火曜日

Flutter

t f B! P L

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をそのインデックスに変換し、整数のリストとしてデータベースに保存し、読み込み時にはそれを元に戻す形で対応します。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ