😊

【Flutter × Realm】flutterでrealmを使ってみる

2023/01/03に公開

初めに/概要

flutterプロジェクトでRealmを使用する方法を紹介します。

realmのflutter対応(rc)が最近ということもあり、なかなかflutter × realmの記事が見当たらなかったので、第一弾として、今回の記事を作成しました。

今回の記事では、第一弾として、"flutterプロジェクトにrealm導入"から"サンプルデータの挿入作成"までを紹介します。

対象

flutterにrealmを入れてみたいのだが、どのように実装したら良いのかわからない方

目標

  • flutterにrealmを導入
  • realmにデータを保存

実装

Realmのインストール

ターミナルにて以下、実行

flutter pub add realm

Modelファイルを作成

part 'schema.g.dart';:生成されるファイルの名前は生成元のファイルと同じ名前でないといけないので、同じ名前にしましょう。

schema.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テーブル

最終コード

main.dart
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