퀵 스타트 - Flutter SDK
이 페이지의 내용
이 페이지에는 Realm을 Flutter 앱에 빠르게 통합하기 위한 정보가 포함되어 있습니다.
시작하기 전에 다음 사항을 확인하세요.
객체 모델 정의
애플리케이션의 데이터 모델 은 Realm 내에 저장된 데이터의 구조를 정의합니다. 객체 스키마 가 있는 애플리케이션 코드의 클래스를 통해 애플리케이션의 데이터 모델 을 정의할 수 있습니다.Dart Realm 그런 다음 RealmObjectBase 를 생성해야 합니다. 애플리케이션 내에서 사용되는 클래스입니다.
자세한 내용은 Realm 객체 스키마 정의를 참조하세요.
데이터 모델 생성
애플리케이션의 데이터 모델을 정의하려면 애플리케이션 코드에 Realm 모델 클래스 정의를 추가하세요.
다음은 Realm 모델 클래스를 정의할 때 고려해야 할 몇 가지 사항입니다.
클래스 정의 파일 맨 위에 있는 패키지를 가져옵니다.
파일에서 클래스에 비공개 이름(
_
로 시작하는 이름)을 지정합니다(예: 클래스_Car
가 있는 파일). 다음 RealmObject 클래스 생성 섹션의 명령을 사용하여 공개 RealmObject 클래스를 생성합니다. 이 명령은_Car
와 같은 공개 클래스를 출력합니다.모델을 정의하는 코드 앞에
part car.realm.dart
와 같이 생성된 파일 이름을 포함해야 합니다. 이는 RealmObject 클래스를 생성하는 데 필요합니다.
import 'package:realm/realm.dart'; part 'car.realm.dart'; ()class _Car { () late ObjectId id; late String make; late String? model; late int? miles; }
import 'package:realm_dart/realm.dart'; part 'car.realm.dart'; ()class _Car { () late ObjectId id; late String make; late String? model; late int? miles; }
RealmObject 클래스 생성
이제 데이터 모델 클래스 Car
에서 RealmObject 클래스 Car
를 생성합니다.
dart run realm generate
dart run realm_dart generate
이 명령을 실행하면 앞의 데이터 모델 생성 섹션에 따라 모델 클래스를 정의한 디렉토리에 있는 car.realm.dart
파일에 Car
클래스가 만들어집니다. 이 Car
클래스는 공개이며 _Car
데이터 모델 클래스와 동일한 라이브러리의 일부입니다. 생성된 Car
클래스는 애플리케이션 전체에서 사용됩니다.
_Car
에 변경이 있을 때마다 데이터 모델 클래스가 새 Car
클래스를 생성하도록 관찰하려면 다음을 실행합니다.
dart run realm generate --watch
dart run realm_dart generate --watch
Realm 열기
구성 사용 클래스를 사용하여 스키마와 Realm이 로컬 전용인지 또는 동기화되는지 여부를 포함하여 열려는 Realm의 세부 사항을 제어할 수 있습니다.
구성을 영역 생성자에 전달하여 해당 영역의 인스턴스를 생성합니다.
final config = Configuration.local([Car.schema]); final realm = Realm(config);
이제 해당 영역 인스턴스를 사용하여 데이터베이스의 객체로 작업할 수 있습니다.
자세한 내용은 Realm 구성 및 열기를 참조하세요.
Realm 객체 사용
Realm을 연 후에는 쓰기 트랜잭션(write transaction) 차단을사용하여 그 안에 객체를 생성할 수 있습니다.
자세한 내용은 쓰기 트랜잭션(write transaction)를 참조하세요.
객체 생성
새 Car
을 생성하려면 Car
클래스의 인스턴스를 인스턴스화하고 이를 쓰기 트랜잭션(write transaction) 블록의 영역에 추가합니다.
final car = Car(ObjectId(), 'Tesla', model: 'Model S', miles: 42); realm.write(() { realm.add(car); });
객체 업데이트
자동차를 수정하려면 쓰기 트랜잭션(write transaction) 블록에서 자동차의 속성을 업데이트합니다.
realm.write(() { car.miles = 99; });
객체 쿼리
Realm.all() 메서드 를 사용하여 Realm에 있는 데이터 모델의 모든 객체 컬렉션을 메서드:
final cars = realm.all<Car>(); final myCar = cars[0]; print('My car is ${myCar.make} ${myCar.model}');
컬렉션 을 필터링하여 Realm 을 사용하여 객체의 특정 세그먼트를 조회 합니다. 쿼리() 메서드. query()
메서드의 인수에서 RQL 연산자 를 사용하여 필터링을 수행합니다.
final cars = realm.query<Car>('make == "Tesla"');
객체 삭제
쓰기 트랜잭션(write transaction) 블록에서 Realm.delete() 메서드를 호출하여 다음과 같이 자동차를 삭제합니다.
realm.write(() { realm.delete(car); });
변경 사항에 대한 반응
쿼리, 단일 객체 또는 객체 내의 목록에 대한 변경 사항을 수신하고 응답합니다. 변경 리스너는 마지막 호출 이후의 변경 사항을 포함하는 콜백 함수를 인수로 사용하여 호출하는 스트림입니다.
쿼리 를 수신하려면 RealmResults.changes.listen()을 사용합니다.
// Listen for changes on whole collection final characters = realm.all<Character>(); final subscription = characters.changes.listen((changes) { changes.inserted; // Indexes of inserted objects. changes.modified; // Indexes of modified objects. changes.deleted; // Indexes of deleted objects. changes.newModified; // Indexes of modified objects after accounting for deletions & insertions. changes.moved; // Indexes of moved objects. changes.results; // The full List of objects. changes.isCleared; // `true` after call to characters.clear(); otherwise, `false`. }); // Listen for changes on RealmResults. final hobbits = fellowshipOfTheRing.members.query('species == "Hobbit"'); final hobbitsSubscription = hobbits.changes.listen((changes) { // ... all the same data as above });
구독을 일시 중지했다가 다시 시작할 수도 있습니다.
subscription.pause(); // The changes.listen() method won't fire until subscription is resumed. subscription.resume();
변경 사항 수신을 마친 후에는 메모리 누수를 방지하기 위해 변경 리스너를 닫습니다.
await subscription.cancel();
자세한 내용은 변경 사항에 대응을 참조하세요.
Realm 닫기
영역 작업을 마친 후에는 메모리 누수를 방지하기 위해 영역을 닫습니다.
realm.close();
Realm과 MongoDB Atlas 동기화
Realm 및 Atlas Device Sync를 Flutter 앱에 통합할 수 있습니다. Atlas Device Sync는 클라이언트 애플리케이션과 Atlas의 MongoDB database 클러스터 간에 데이터를 동기화하는 MongoDB Atlas App Services입니다.
Device Sync를 사용하여 Atlas와 데이터를 동기화하기 위해 Flutter SDK는 Flexible Sync를 사용합니다. Flexible Sync를 사용하면 클라이언트 앱에서 동기화하는 데이터에 대한 쿼리를 정의할 수 있습니다.
참고
로컬에서 Realm을 사용하기 위해 Device Sync를 추가할 필요는 없습니다.
전제 조건
클라이언트 앱에서 Realm과 Device Sync를 사용하려면 먼저 Atlas App Services를 사용하여 Device Sync를 구성해야 합니다.
Flexible Sync를 활성화합니다.
owner_id
을 쿼리 가능 필드 로 설정합니다.Device Sync 를 사용할 때 사용자에게 어떤 권한이 있는지 결정하는 규칙을 정의합니다 . 이 예시 에서는 컬렉션별 역할 이 없는 모든 컬렉션 에 적용되는 기본값 역할 을 할당합니다. 이 예시 에서
user.id
사용자는 로그인한 사용자의owner_id
가 객체 의 와 일치하는 데이터를 읽고 쓰기 (write) 수 있습니다.{ "roles": [ { "name": "owner-read-write", "apply_when": {}, "document_filters": { "write": { "owner_id": "%%user.id" }, "read": { "owner_id": "%%user.id" } }, "read": true, "write": true, "insert": true, "delete": true, "search": true } ] }
이제 애플리케이션 업데이트를 배포하세요.
팁
Realm Flutter 템플릿 앱 사용
클라이언트 및 해당 App Service 백엔드 에 Device Sync 가 이미 설정하다 상태에서 Flutter 앱 이 작동하도록 하려면 Flutter 템플릿 앱 flutter.todo.flex
을 사용하세요.
App Services 초기화
인증 및 동기화와 같은 App Services 기능을 사용하려면 앱 ID를 사용하여 App Services 앱에 액세스합니다. App Services UI에서 앱 ID 찾기를 수행할 수 있습니다.
final app = App(AppConfiguration(appId));
자세한 내용은 App Services에 연결하기를 참조하세요.
사용자 인증
App Services UI에서 익명 인증을 활성화하면 사용자는 식별 정보를 제공하지 않고도 앱에 즉시 로그인할 수 있습니다.
final loggedInUser = await app.logIn(Credentials.anonymous());
자세한 내용은 사용자 인증을 참조하세요.
동기화된 Realm 열기
Device Sync 를 활성화하고 사용자를 인증한 후에는 Configuration.flexibleSync() 를 사용하여 동기화된 영역 을 엽니다. . 그런 다음 구성을 Realm () 에 전달합니다. 영역 인스턴스 를 엽니다. 동기화된 영역 에는 다른 Configuration.path 가 있어야 합니다 . 다른 열린 로컬 전용 Realm에서.
final config = Configuration.flexibleSync(loggedInUser, [Todo.schema]); final realm = Realm( config, );
자세한 내용은 동기화된 Realm 열기를 참조하세요.
동기화 구독 추가
이제 구독을 생성하여 Device Sync를 사용하여 Atlas와 데이터를 동기화하세요. SubscriptionSet.update() 메서드 내에 구독을 추가합니다. 콜백 함수.
업데이트 차단 콜백 함수에는 MutableSubscriptionSet() 객체 를 인수로 사용합니다. MutableSubscriptionSet.add()
를 사용하여 새 구독 을 추가합니다.
// Check if the subscription already exists before adding final userTodoSub = realm.subscriptions.findByName('getUserTodos'); if (userTodoSub == null) { realm.subscriptions.update((mutableSubscriptions) { // server-side rules ensure user only downloads their own Todos mutableSubscriptions.add(realm.all<Todo>(), name: 'getUserTodos'); }); }
자세한 내용은 동기화 구독 관리를 참조하세요.
추가 예시 및 다음 단계
Realm SDK 및 Atlas App Services 백엔드 설정하다 을 사용하여 미리 만들어진 Flutter 애플리케이션 을 시작하려면 Flutter 템플릿 앱
flutter.todo.flex
을(를) 사용합니다.Device Sync가 포함된 Realm SDK를 Flutter 앱에 추가하는 방법에 대한 안내는 Realm Flutter SDK 튜토리얼을 참조하세요.
위에서 설명한 Flutter SDK 메서드의 추가 예제와 기타 자세한 내용은 Realm Dart 샘플 Github 리포지토리를 참조하세요.