【Flutter × Realm】flutterでrealmを使ってみる
初めに/概要
flutterプロジェクトでRealmを使用する方法を紹介します。
realmのflutter対応(rc)が最近ということもあり、なかなかflutter × realmの記事が見当たらなかったので、第一弾として、今回の記事を作成しました。
今回の記事では、第一弾として、"flutterプロジェクトにrealm導入"から"サンプルデータの挿入作成"までを紹介します。
対象
flutterにrealmを入れてみたいのだが、どのように実装したら良いのかわからない方
目標
- flutterにrealmを導入
- realmにデータを保存
実装
Realmのインストール
ターミナルにて以下、実行
flutter pub add realm
Modelファイルを作成
part 'schema.g.dart';
:生成されるファイルの名前は生成元のファイルと同じ名前でないといけないので、同じ名前にしましょう。
import 'package:realm/realm.dart';
part 'schema.g.dart';
@RealmModel()
class _Member {
@PrimaryKey()
late ObjectId id;
late String name;
late String email;
late List<String> skills;
}
@RealmModel()
class _Department {
@PrimaryKey()
late ObjectId id;
late String name;
late List<_Member> members;
}
ターミナルにて以下、実行
flutter pub run realm generate
modelを変更したいときは、上記ファイルを変更して、再度、flutter pub run realm generate
したらOKです。
Realmをインスタンス化
以下のように、realmをインスタンス化させます。
スキーマは先ほど作成したmodelの名前です。
コンストラクタークラスを使用して、スキーマなどrealmの詳細をコントロールします。
List<SchemaObject> schemaObjects = [Member.schema, Department.schema];
final config = Configuration.local(schemaObjects);
realm = Realm(config);
初期データを入れてみる
メンバーモデルと部署モデルを作成したので、サンプルのデータを入れて、きちんとデータをrealmに入っているかを確認します。
final department = Department(ObjectId(), 'develop');
final member = Member(ObjectId(), 'Hana Kojima', 'hana.kojima@sample.com');
department.members.add(member);
realm.write(() => realm.add(department));
デバッグをして、データが作成されているかをrealm studioで確認します。
Departmentテーブル
Memberテーブル
最終コード
import 'package:flutter/material.dart';
import './schemas/schema.dart';
import 'package:realm/realm.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
MyApp({super.key}) {
late Realm realm;
List<SchemaObject> schemaObjects = [Member.schema, Department.schema];
final config = Configuration.local(schemaObjects);
realm = Realm(config);
final department = Department(ObjectId(), 'develop');
final member = Member(ObjectId(), 'Hana Kojima', 'hana.kojima@sample.com');
department.members.add(member);
realm.write(() => realm.add(department));
}
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
~~省略~~
}
最後に
ローカルDBの選択肢の1つとしてrealmがあると思います。
ただ、realmのflutter対応(rc)が最近ということもあり、なかなかflutter × realmの記事が見当たりませんでした。
flutter × realmの最初の一歩として、参考にしていただけると嬉しいです。
以上で終了です。お疲れ様でした!
参考になった方は、ぜひ、いいねをいただけると嬉しいです!
サンプルコードとして、githubのソースコードを共有します。
Discussion