Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

데이터 고정 - Flutter SDK

이 페이지의 내용

  • Realm 동결
  • RealmResults 고정
  • RealmObject 동결
  • RealmObject에서 RealmList 고정
  • 데이터가 동결되었는지 확인

동결하면 동결 시점의 영역에 데이터의 변경 불가능한 스냅샷이 생성됩니다. 동결된 객체는 라이브 상태가 아니며 자동으로 업데이트되지 않습니다. 동결된 데이터에는 쓸 수 없습니다. 한 번 동결된 데이터는 동결을 해제할 수 없습니다.

다음 Realm 객체 유형을 고정할 수 있습니다.

  • Realm

  • RealmResults

  • RealmObject

  • RealmList

Realm 영역( ) 를 사용하여 전체 Realm의 동결 스냅샷 을 생성합니다. . 동결된 영역 작업을 마치면 메모리 누수를 방지하기 위해 닫아야 합니다.

final config = Configuration.local([Person.schema, Scooter.schema]);
final realm = Realm(config);
// Add scooter owned by Mace Windu
final maceWindu = Person(ObjectId(), "Mace", "Windu");
final purpleScooter =
Scooter(ObjectId(), "Purple scooter", owner: maceWindu);
realm.write(() {
realm.add(purpleScooter);
});
// Create frozen snapshot of realm
final frozenRealm = realm.freeze();
// Update data in the realm
final quiGonJinn = Person(ObjectId(), "Qui-Gon", "Jinn");
realm.write(() {
purpleScooter.owner = quiGonJinn;
});
// Data changes not in the frozen snapshot
final purpleScooterFrozen =
frozenRealm.query<Scooter>("name == \$0", ["Purple scooter"]).first;
print(purpleScooterFrozen.owner!.firstName); // prints 'Mace'
// You must also close the frozen realm before exiting the process
frozenRealm.close();

RealmResults.freeze() 를 사용하여 RealmResults 의 동결된 스냅샷 을 생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.

// Add data to the realm
final maceWindu = Person(ObjectId(), "Mace", "Windu");
final jocastaNu = Person(ObjectId(), "Jocasta", "Nu");
realm.write(() => realm.addAll([maceWindu, jocastaNu]));
// Get RealmResults and freeze data
final people = realm.all<Person>();
final frozenPeople = people.freeze();
// Update data in the non-frozen realm
final newLastName = "Foo";
realm.write(() {
for (var person in people) {
person.lastName = newLastName;
}
});
// Data changes not in the frozen snapshot
final frozenFooPeople =
frozenPeople.query("lastName == \$0", [newLastName]);
print(frozenFooPeople.length); // prints 0
// You must also close the frozen realm associated
// with the frozen RealmResults before exiting the process
frozenPeople.realm.close();

RealmObject.freeze() 를 사용하여 의 동결된 스냅샷 을 RealmObject 생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.

final person = realm.query<Person>(
'firstName == \$0 AND lastName == \$1', ["Count", "Dooku"]).first;
// Freeze RealmObject
final frozenPerson = person.freeze();
// Change data in the unfrozen object.
realm.write(() {
realm.delete(person);
});
// Frozen person snapshot still exists even though data deleted
// in the unfrozen realm
print(frozenPerson.isValid); // prints true
print(person.isValid); // prints false
// You must also close the frozen realm associated
// with the frozen RealmObject before exiting the process
frozenPerson.realm.close();

RealmList.freeze() 를 사용하여 에 RealmList RealmObject 의 동결된 스냅샷 을 생성합니다. . 고정된 데이터에 대한 작업을 마친 후에는 메모리 누수를 방지하기 위해 연결된 영역 을 닫아야 합니다.

final firstPerson =
realm.query<Person>("firstName = \$0", ["Yoda"]).first;
// Freeze RealmList in a RealmObject
final firstPersonAttributesFrozen = firstPerson.attributes.freeze();
// Change data in the unfrozen realm
final newAttribute = "quick";
realm.write(() {
// Append item to list
firstPerson.attributes.add(newAttribute);
});
final index = firstPersonAttributesFrozen.indexOf(newAttribute);
print(index); // prints -1 because cannot find new attribute
// You must also close the frozen realm associated
// with the frozen RealmList before exiting the process
firstPersonAttributesFrozen.realm.close();

isFrozen 속성으로 동결 가능한 데이터 유형이 있는지 확인합니다. isFrozen 은 객체가 동결된 경우 true 를 반환하고 라이브 객체인 경우 false 을 반환합니다.

// You can check if all freezable types are frozen
// with the `isFrozen` property.
final realm = Realm(config);
print(realm.isFrozen);
final people = realm.all<Person>();
print(people.isFrozen);
final firstPerson =
realm.query<Person>("firstName = \$0", ["Yoda"]).first;
print(firstPerson.isFrozen);
final firstPersonAttributes = firstPerson.attributes;
print(firstPersonAttributes.isFrozen);

돌아가기

변경 사항에 대한 반응