Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ / /

CRUD — 更新 — Flutter SDK

在此页面上

  • 更新对象
  • 更新对象属性
  • 更新或插入对象

更新到RealmObjects必须在写事务(write transaction)中进行。有关写入事务的更多信息,请参阅:写入事务。

SDK 支持更新和更新更新或插入(upsert)操作。 更新或插入(upsert)或插入操作会插入对象的新实例,或更新符合特定条件的现有对象。 有关详细信息,请参阅本页上的“更新或插入对象”部分。

您无法更新非对称对象。 这是因为非对称对象是特殊的只写对象,不会持久保存到数据库中。 有关如何在应用程序中使用非对称对象的信息,请参阅将数据流式传输到 Atlas - Flutter SDK。

本页上的示例使用两种对象类型:PersonTeam

@RealmModel()
class _Person {
@PrimaryKey()
late ObjectId id;
late String name;
late List<String> hobbies;
}
@RealmModel()
class _Team {
@PrimaryKey()
late ObjectId id;
late String name;
late List<_Person> crew;
late RealmValue eventLog;
}

要修改对象的属性,请在写事务区块中更新属性。

realm.write(() {
spaceshipTeam.name = 'Galactic Republic Scout Team';
spaceshipTeam.crew
.addAll([Person(ObjectId(), 'Luke'), Person(ObjectId(), 'Leia')]);
});

要更新或插入(upsert)或插入对象,请调用 Realm .add() updatetrue并在ACID 事务区块内将可选的 标志设立为 。如果具有给定主键的对象不存在,则该操作将插入具有该主键键的新对象。如果已经存在具有该主键的对象,则该操作将更新该主键的现有对象。

final id = ObjectId();
// Add Anakin Skywalker to the realm with primary key `id`
final anakin = Person(
id,
"Anakin Skywalker",
);
realm.write(() {
realm.add<Person>(anakin);
});
// Overwrite the 'Anakin' Person object
// with a new 'Darth Vader' object
final darthVader = Person(id, 'Darth Vader');
realm.write(() {
realm.add<Person>(darthVader, update: true);
});

后退

读取