Página inicial do Docs → Desenvolver aplicações → Atlas Device SDKs
Tipos de dados - Flutter SDK
Nesta página
O Flutter SDK suporta tipos de dados de linguagem de gráfico, um subconjunto limitado de BSON tipos e UUID.
Para saber como tipos de dados específicos são mapeados para tipos BSON em um Esquema de Serviços de Aplicativo, consulte Mapeamento de Modelo de Dados na documentação de Serviços de Aplicativo do Atlas.
Tipos de Dart
O Realm é compatível com os seguintes tipos de Dart:
int
double
bool
String
DateTime
DateTime
Ao utilizar o DateTime
com o Realm Flutter SDK, você pode declará-lo no modelo como faria com qualquer outro tipo de Dart:
()class _Vehicle { () late ObjectId id; late String nickname; late DateTime dateLastServiced; }
No entanto, é importante observar que o Realm armazena DateTime
em UTC. Ao utilizar o DateTime
, você deve criá-lo em UTC ou convertê-lo com .toUtc()
antes de armazená-lo. Se seu aplicativo exigir, você poderá convertê-lo novamente para o fuso horário local ou desejado ao ler do Realm.
// Create a Realm object with date in UTC, or convert with .toUtc() before storing final subaruOutback = realm.write<Vehicle>(() { return realm.add( Vehicle(ObjectId(), 'Subie', DateTime.utc(2022, 9, 18, 12, 30, 0))); }); final fordFusion = Vehicle(ObjectId(), 'Fuse', DateTime(2022, 9, 18, 8, 30, 0).toUtc()); realm.write(() { realm.add(fordFusion); }); // When you query the object, the `DateTime` returned is UTC final queriedSubaruOutback = realm.all<Vehicle>().query('nickname == "Subie"')[0]; // If your app needs it, convert it to Local() or the desired time zone final localizedSubieDateLastServiced = queriedSubaruOutback.dateLastServiced.toLocal();
Referência de objetos do Realm
Você também pode fazer referência a um ou mais objetos Realm de outro. Saiba mais na documentação de propriedades de relacionamento.
Collections
Uma collection de Realm contém zero ou mais instâncias de um tipo de dados compatível com Realm. Em uma collection Realm, todos os objetos em uma collection são do mesmo tipo.
Você pode filtrar e classificar qualquer coleção usando a linguagem de consulta do domínio. As coleções são objetos ativos, portanto, sempre refletem o estado atual da instância do domínio. O conteúdo de uma coleção é atualizado quando novos elementos são adicionados ou excluídos da coleção ou de seu domínio.
Você também pode ouvir as alterações na coleção assinando as notificações de alteração.
O Realm tem os seguintes tipos de coleções:
Lista de domínios
Objetos de Realm podem conter listas de qualquer tipo de dados suportado. O Realm usa a RealmList tipo de dados para armazenar os dados.
Quando você inclui RealmObjects
como os itens em um RealmList
, ele representa um relacionamento para muitos.
Excluir um objeto do banco de dados o removerá de qualquer RealmLists em que ele estava presente. Portanto, um RealmList
de RealmObject
tipos nunca conterão valores nulos. Além disso, um RealmList
pode conter múltiplas referências para o mesmo RealmObject
.
Um RealmList
de tipos primitivos pode conter valores nulos. Se você não quiser permitir valores nulos em uma lista, use tipos não anuláveis na declaração da lista (por exemplo, use List<int>
em vez de List<int?>
).
Um RealmList
é mutável e você pode adicionar e remover elementos em um RealmList
dentro de uma transação de escrita.
Adicionar um RealmList a um esquema
Você pode adicionar um RealmList
ao seu esquema de objetos definindo uma propriedade como tipo List<T>
, em que T
pode ser qualquer tipo de dados Realm suportado (exceto outras collections), em seu Realm Object Model.
()class _Player { () late ObjectId id; late String username; // `inventory` property of type RealmList<Item> // where Items are other RealmObjects late List<_Item> inventory; // `traits` property of type RealmList<String> // where traits are Dart Strings. late List<String> traits; } ()class _Item { () late ObjectId id; late String name; late String description; }
Trabalhe com um RealmList
Alterado na versão 2.0.0: Obtenha RealmList
pelo nome da propriedade com dynamic.getList()
O exemplo seguinte demonstra algum uso básico do RealmList
. Para obter mais informações sobre todos os métodos disponíveis, consulte a referência RealmList documentação.
final artemis = realm.write(() => realm.add(Player(ObjectId(), 'Art3mis', inventory: [ Item(ObjectId(), 'elvish sword', 'sword forged by elves'), Item(ObjectId(), 'body armor', 'protects player from damage'), ], traits: [ 'brave', 'kind' ]))); // Get a RealmList by property name with dynamic.getList() final inventory = artemis.dynamic.getList('inventory'); // Use RealmList methods to filter results RealmList<String> traits = artemis.traits; final brave = traits.firstWhere((element) => element == 'brave'); final elvishSword = artemis.inventory.where((item) => item.name == 'elvish sword').first; // Query RealmList with Realm Query Language final playersWithBodyArmor = realm.query<Player>("inventory.name == \$0", ['body armor']); print("LEN ${playersWithBodyArmor.length}");
RealmSet
Objetos de Realm podem conter conjuntos de qualquer tipo de dados suportado, exceto outra collection. O Realm usa o RealmSet tipo de dados para armazenar os dados. Em uma RealmSet
collection , todos os valores são únicos. RealmSet
estende o conjunto de dart nativo tipo de dados com propriedades e métodos adicionais específicos do Realm.
Quando você inclui RealmObjects
como os itens em um RealmSet
, ele representa um relacionamento para muitos.
Um RealmSet
é mutável e você pode adicionar e remover elementos em um RealmSet
dentro de uma transação de escrita.
Adicionar um RealmSet a um esquema
Você pode adicionar um RealmSet
ao seu esquema de objetos definindo uma propriedade como tipo Set<T>
, em que T
pode ser qualquer tipo de dados Realm suportado, exceto outras collections, em seu Realm Object Model.
Ao definir um RealmSet em um esquema:
Um conjunto de tipos primitivos pode ser definido como anulável ou não anulável. Por exemplo,
Set<int>
eSet<int?>
são válidos em um esquema de Realm.Um conjunto de tipos
RealmObject
eRealmValue
pode ser somente não anulável. Por exemploSet<RealmValue>
é válido, masSet<RealmValue?>
não é válido.Você não pode definir valores padrão ao definir um conjunto em um esquema. Por exemplo,
Set mySet = {0,1,2}
não é válido.
()class _RealmSetExample { late Set<String> primitiveSet; late Set<int?> nullablePrimitiveSet; late Set<_SomeRealmModel> realmObjectSet; } ()class _SomeRealmModel { late ObjectId id; }
Trabalhar com um RealmSet
Alterado na versão 2.0.0: Obtenha RealmSet
pelo nome da propriedade com dynamic.getSet()
O exemplo seguinte demonstra algum uso básico do RealmSet
. Para obter mais informações sobre todos os métodos disponíveis, consulte a referência do RealmSet documentação.
final realm = Realm( Configuration.local([RealmSetExample.schema, SomeRealmModel.schema])); // Pass native Dart Sets to the object to create RealmSets final setExample = RealmSetExample( primitiveSet: {'apple', 'pear'}, nullablePrimitiveSet: {null, 2, 3}, realmObjectSet: {SomeRealmModel(ObjectId())}); // Add RealmObject to database realm.write(() => realm.add(setExample)); // Once you add the sets, they are of type RealmSet RealmSet primitiveSet = setExample.primitiveSet; // Modify RealmSets of RealmObjects in write transactions realm.write(() { // Add element to a RealmSet with RealmSet.add() setExample.realmObjectSet.add(SomeRealmModel(ObjectId())); // Remove element from a RealmSet with RealmSet.remove() setExample.primitiveSet.remove('pear'); }); // Check if a RealmSet contains an element with RealmSet.contains() if (setExample.primitiveSet.contains('apple')) { print('Set contains an apple'); } // Get RealmSet by property name with dynamic.getSet() final getSetResult = setExample.dynamic.getSet('primitiveSet'); // Check number of elements in a RealmSet with RealmSet.length print( 'Set now has ${getSetResult.length} elements'); // Prints 'Set now has 1 elements' // Query RealmSets using Realm Query Language final results = realm.query<RealmSetExample>('\$0 IN nullablePrimitiveSet', [null]);
RealmMap
Novidades na versão 1.7.0.
RealmMap é uma coleção que contém pares de valores-chave de <String, T>
, onde T
é qualquer tipo de dados suportado pelo SDK. As chaves de mapa não podem conter .
ou começar com , a $
menos que você use codificação percentual.
Um RealmMap
é mutável e você pode adicionar e remover elementos em um RealmMap
dentro de uma transação de escrita. Você pode ouvir as alterações de entrada do RealmMap usando um ouvinte de alterações.
Adicionar um RealmMap a um esquema
Você pode adicionar um RealmMap
ao seu esquema de objetos definindo uma propriedade como tipo RealmMap<String, T>
, em que T
pode ser qualquer tipo de dados Realm suportado (exceto outras collections), em seu Realm Object Model.
()class _MapExample { late Map<String, int> map; late Map<String, int?> nullableMap; }
Use um RealmMap
Alterado na versão 2.0.0: Obtenha RealmMap
pelo nome da propriedade com dynamic.getMap()
O exemplo seguinte demonstra algum uso básico do RealmMap
. Para obter mais informações sobre todos os métodos disponíveis, consulte a referência do RealmMap documentação.
final realm = Realm(Configuration.local([MapExample.schema])); // Pass native Dart Maps to the object to create RealmMaps final mapExample = MapExample( map: { 'first': 1, 'second': 2, 'third': 3, }, nullableMap: { 'first': null, 'second': 2, 'third': null, }, ); // Add RealmObject to the database realm.write(() => realm.add(mapExample)); // Once you add maps, they are of type RealmMap RealmMap map = mapExample.map; // Modify RealmMaps in write transactions realm.write(() { // Update value by key with .update() or [value] = newValue mapExample.nullableMap['second'] = null; mapExample.map.update('first', (value) => 5); mapExample.nullableMap.update('fourth', (v) => 4, ifAbsent: () => null); // Add a new map entry with .addEntries() const newMap = {'fourth': 4}; mapExample.map.addEntries(newMap.entries); }); // Check a RealmMap with .containsKey() or .containsValue() if (mapExample.map.containsKey('first')) { print('Map contains key "first"'); } else if (mapExample.map.containsValue(null)) { print('Map contains null value'); } else { print('These aren\'t the maps you\'re looking for'); } // Get a RealmMap by property name with dynamic.getMap() final getPrimitiveMap = mapExample.dynamic.getMap('map'); // Check the number of elements in a RealmMap with RealmMap.length print( 'Map contains ${getPrimitiveMap.length} elements'); // Prints 'Map contains 4 elements' // Query RealmMaps using Realm Query Language final results = realm.query<MapExample>('map.first == \$0', [5]);
RealmResults
Um RealmResults collection representa os resultados avaliados displicentemente de uma operação de query. Ao contrário de um RealmList
, os resultados são imutáveis: você não pode adicionar ou remover elementos na collection de resultados. Isso ocorre porque o conteúdo de uma collection de resultados é determinado por uma query para banco de dados.
Realm.all() e Realm.query() retornam RealmResults
. Para mais informações sobre como fazer queries no Realm, consulte Operações de leitura.
RealmResults<Player> players = realm.all<Player>(); RealmResults<Player> bravePlayers = realm.query<Player>('ANY traits == \$0', ['brave']);
Os resultados são avaliados preguiçosamente
O Realm só realiza uma query quando você realmente solicita os resultados dessa query, por exemplo, acessando elementos da coleção de resultados. Com essa avaliação preguiçosa, você consegue escrever um código elegante e de alto desempenho para lidar com grandes conjuntos de dados e queries complexas.
As coleções estão ativas
Assim como os objetos ativos, as coleções de Realm geralmente são ativas:
As collection de resultados ativas sempre refletem os resultados atuais da query associada.
As listas ativas de
RealmObjects
sempre refletem o estado atual do relacionamento na Instância de Realm.
No entanto, há dois casos em que uma collection não está ativa:
A coleção não é gerenciada: uma propriedade
RealmList
de um objeto Realm que ainda não foi adicionado a um realm ou que foi copiado de um realm.A coleção está congelada.
Combinado com a monitorização de alterações em uma coleção, as coleções dinâmicas permitem um código mais organizado e responsivo. Por exemplo, suponha que sua visualização exiba os resultados de uma consulta. Você pode manter uma referência à coleção de resultados em sua classe de exibição e, em seguida, ler a coleção de resultados conforme necessário sem precisar atualizá-la ou validar se ela está atualizada.
Importante
Os índices podem mudar
Como os resultados se atualizam automaticamente, não armazene o índice posicional de um objeto na coleção ou a contagem de objetos em uma coleção. O índice armazenado ou o valor de contagem podem estar desatualizados no momento em que você o utiliza.
Tipos de dados adicionais suportados
ObjectId
O ObjectId é um valor exclusivo de 12 bytes específico do MongoDB que você pode usar como identificador para objetos. O ObjectId é indexável e pode ser usado como chave primária.
Para definir uma propriedade como um ObjectId, defina seu tipo como ObjectId
em seu modelo de objeto.
()class _ObjectIdPrimaryKey { () late ObjectId id; }
Chame a função ObjectId()
para definir quaisquer propriedades de identificador exclusivas do seu objeto. Como alternativa, passe uma string para ObjectId()
para definir a propriedade de identificador exclusivo como um valor específico.
final id = ObjectId(); final object = ObjectIdPrimaryKey(id);
UUID
UUID (Universal Unique Identifier) é um 16 valor único de bytes . Você pode usar um UUID como identificador para objetos. Os UUIDs são indexáveis e você pode usá-los como chaves primárias.
Observação
Uso de UUID em vez de ObjectId
Em geral, você pode usar UUID
para quaisquer campos que funcionem como um identificador único. Usar UUID
pode ser particularmente útil se você estiver migrando dados não armazenados no MongoDB, pois é provável que os identificadores exclusivos do seu objeto já sejam do tipo UUID
. Por outro lado, usar ObjectId
pode ser útil para uma coleção de dados que já existe no MongoDB.
Para definir uma propriedade como UUID, defina seu tipo como Uuid
em seu modelo de objeto.
()class _UuidPrimaryKey { () late Uuid id; }
Para definir qualquer propriedade de identificador exclusivo do seu objeto com um valor aleatório, chame um dos métodos Uuid
para criar um UUID, como Uuid.v4()
.
final myId = Uuid.v4(); final object = UuidPrimaryKey(myId);
Decimal128
O Dart não tem um tipo decimal nativo. Você pode usar decimal128, que é uma 128implementação de bits do IEEE-754. Ao definir um tipo de decimal, utilize o Decimal128
tipo BSON.
Ao usar Decimal128
, esteja ciente de que o método Dart compareTo()
implementa uma ordem total que imita o tipo Dart double
. Isto significa que os seguintes fatores são verdadeiros ao utilizar o compareTo()
:
Todos os valores de
NaN
são considerados iguais e maiores que qualquer valor numérico.-Decimal128.zero
é menor queDecimal128.zero
(e o número inteiro 0), mas maior que qualquer valor negativo diferente de zero.O infinito negativo é menor que todos os outros valores e o infinito positivo é maior que todos os valores não NaN.
Todos os outros valores são comparados usando seu valor numérico.
RealmValue
Importante
Flutter SDK v2.0.0 Alterações no RealmValue
Flutter SDK versão 2.0.0 atualiza o RealmValue
para permitir um tipo List
ou Map
de RealmValue
, o que permite mais flexibilidade ao modelar dados não estruturados. Consulte Dados não estruturados do modelo para obter mais informações.
Esta atualização também inclui a seguinte alteração interruptiva, que podem afetar seu aplicativo quando a atualização para a versão2.0.0 ou posterior:
RealmValue.type
agora é uma enumeração deRealmValueType
em vez deType
.RealmValue.uint8List
foi renomeado paraRealmValue.binary
.
Para obter mais informações sobre como atualizar um aplicativo existente de uma versão anterior para a v2.0.0 ou posterior, consulte Atualizar para o Flutter SDK v2.0.0.
O RealmValue tipo de dados é um tipo de dados misto que pode representar qualquer outro tipo de dados válido, exceto objetos embarcados. No Flutter SDK v2.0.0 e posterior, RealmValue
pode representar um List<RealmValue>
ou Map<String, RealmValue>
.
Definir uma propriedade RealmValue
Para definir uma propriedade RealmValue
, defina seu tipo no modelo de objetos. RealmValue
é indexável, mas não pode ser uma chave primária. Você também pode definir propriedades como collection (listas, conjuntos ou mapas) do tipo RealmValue
.
()class _RealmValueExample { () late RealmValue singleAnyValue; late List<RealmValue> listOfMixedAnyValues; late Set<RealmValue> setOfMixedAnyValues; late Map<String, RealmValue> mapOfMixedAnyValues; }
Observação
RealmValue não é anulável, mas pode conter valores nulos
Ao definir seu esquema de objeto Realm, você não pode criar um RealmValue
anulável. No entanto, se você desejar que uma propriedade RealmValue
contenha um valor nulo, você poderá utilizar a propriedade RealmValue.nullValue()
especial.
Crie um RealmValue
Para adicionar um RealmValue
a um Objeto de Realm, chame RealmValue.from()
nos dados ou RealmValue.nullValue()
para definir um valor nulo.
final realm = Realm(Configuration.local([RealmValueExample.schema])); realm.write(() { // Use 'RealmValue.from()' to set values var anyValue = realm.add(RealmValueExample( // Add a single `RealmValue` value singleAnyValue: RealmValue.from(1), // Add a list of `RealmValue` values listOfMixedAnyValues: [Uuid.v4(), 'abc', 123].map(RealmValue.from), // Add a set of `RealmValue` values setOfMixedAnyValues: { RealmValue.from('abc'), RealmValue.from('def') }, // Add a map of string keys and `RealmValue` values mapOfMixedAnyValues: { '1': RealmValue.from(123), '2': RealmValue.from('abc') })); // Use 'RealmValue.nullValue()' to set null values var anyValueNull = realm.add(RealmValueExample( singleAnyValue: RealmValue.nullValue(), listOfMixedAnyValues: [null, null].map(RealmValue.from), setOfMixedAnyValues: {RealmValue.nullValue()}, mapOfMixedAnyValues: {'null': RealmValue.nullValue()}));
Acesso ao tipo de dados RealmValue
Alterado na versão 2.0.0: a enumeração RealmValueType
substitui RealmValue.type
. RealmValue.binary
substitui RealmValue.uint8List
.
Para acessar os dados armazenados em um RealmValue
, você pode utilizar:
RealmValue.value
, que retorna umObject?
.RealmValue.as<T>
, que busca os dados e os converte em um tipo desejado.
for (var obj in data) { for (var mixedValue in obj.listOfMixedAnyValues) { // Use RealmValue.value to access the value final value = mixedValue.value; if (value is int) { sum = sum + value; } else if (value is String) { combinedStrings += value; } // Use RealmValue.as<T> to cast value to a specific type try { final intValue = mixedValue.as<int>(); sum = sum + intValue; } catch (e) { log('Error casting value to int: $e'); } } }
Você pode verificar o tipo de dados atualmente armazenados em uma propriedade RealmValue
acessando a propriedade type
. Começando com o Flutter SDK v2.0.0, retorna uma enumeração RealmValueType
. Em versões anteriores do SDK, o SDK retornou um RealmValue.value.runtimeType
.
O exemplo seguinte utiliza RealmValueType
para executar cálculos baseados no tipo de dados.
final data = realm.all<RealmValueExample>(); for (var obj in data) { final anyValue = obj.singleAnyValue; // Access the RealmValue.type property switch (anyValue.type) { // Work with the returned RealmValueType enums case RealmValueType.int: approximateAge = DateTime.now().year - anyValue.as<int>(); break; case RealmValueType.dateTime: approximateAge = (DateTime.now().difference(anyValue.as<DateTime>()).inDays / 365) .floor(); break; case RealmValueType.string: final birthday = DateTime.parse(anyValue.as<String>()); approximateAge = (DateTime.now().difference(birthday).inDays / 365).floor(); break; // Handle other possible types ... default: log('Unhandled type: ${anyValue.type}'); } }
collection agrupadas de RealmValue
Novidades na versão v2.0.0.
Começando com o Flutter SDK v2.0.0, um tipo de dados RealmValue
pode conter collection (uma lista ou mapa, mas não um conjunto) de elementos RealmValue
.
Estas collection de dados mistos podem ser aninhadas e conter outras collection. Eles também podem ser escutados para mudanças como uma collection normal.
Você pode aproveitar essas collection aninhadas para definir dados não estruturados ou variáveis em seu Modelo de dados Realm. Para obter mais informações, consulte Modelar dados não estruturados.
Para criar collection aninhadas de dados mistos em seu aplicativo, defina a propriedade de tipo misto em seu Modelo de dados Realm da mesma forma que faria com qualquer outro tipo RealmValue
. Em seguida, você pode criar a lista ou coleções de mapas utilizando RealmValue.from()
.
realm.write(() { realm.add(RealmValueCollectionExample( // Set the RealmValue as a map of mixed data singleAnyValue: RealmValue.from({ 'int': 1, // You can nest RealmValues in collections 'listOfInt': [2, 3, 4], 'mapOfStrings': {'1': 'first', '2': 'second'}, // You can also nest collections within collections 'mapOfMaps': [ { 'nestedMap_1': {'1': 1, '2': 2}, 'nestedMap_2': {'3': 3, '4': 4} } ], 'listOfMaps': [ { 'nestedList_1': [1, 2, 3], 'nestedList_2': [4, 5, 6] } ] })));
Uint8List
8Lista de Uint é um tipo de dados binários de dart:typed_data. Você pode usar esse tipo de dados em modelos de objeto e valores de propriedade.
Para definir uma propriedade como Uint8List
, você deve primeiro importar dart:typed_data
. Em seguida, defina o tipo de objeto como Uint8List
no seu modelo de objeto.
()class _BinaryExample { late String name; late Uint8List requiredBinaryProperty; late Uint8List? nullableBinaryProperty; }
Para adicionar Uint8List
a um objeto de Realm, chame Uint8List.fromList()
nos dados.
final realm = Realm(Configuration.local([BinaryExample.schema])); realm.write(() { realm.addAll([ BinaryExample("Example binary object", Uint8List.fromList([1, 2])) ]); });
Objetos embarcados
O Realm trata cada objeto incorporado como dados aninhados dentro de um objeto pai. Um objeto incorporado herda o ciclo de vida de seu objeto pai. Não pode existir como um objeto de Realm independente. Objetos incorporados têm as seguintes propriedades:
Objetos incorporados são excluídos quando o objeto pai é excluído ou o pai não faz referência a eles.
Não é possível reatribuir um objeto incorporado a outro objeto pai.
não é possível vincular a um objeto incorporado a partir de vários objetos pai.
Você só pode fazer consulta de um objeto incorporado acessando-o por meio de seu objeto pai.
Declare um objeto embarcado passando ObjectType.embeddedObject à @RealmModel()
anotação . Objetos embarcados devem ser anuláveis ao defini-los no do objeto RealmModel
pai. Você também deve incluir o esquema do objeto embarcado na configuração do realm.
O exemplo a seguir mostra como modelar um objeto incorporado em um esquema do Realm. O modelo _Address
está incorporado dentro do modelo _Person
.
// The generated `Address` class is an embedded object. (ObjectType.embeddedObject)class _Address { late String street; late String city; late String state; late String country; } ()class _Person { () late ObjectId id; late String name; // Embedded object in parent object schema late _Address? address; // Must be nullable }
Você pode usar o pai propriedade para acessar o pai do objeto incorporado.
O exemplo a seguir destaca considerações específicas ao lidar com objetos incorporados. O exemplo utiliza o objeto incorporado Address
gerado a partir do RealmModel
_Address
no esquema acima.
// Both parent and embedded objects in schema final realm = Realm(Configuration.local([Person.schema, Address.schema])); // Create an embedded object. final joesHome = Address("500 Dean Street", "Brooklyn", "NY", "USA"); final joePrimaryKey = ObjectId(); final joe = Person(joePrimaryKey, "Joe", address: joesHome); realm.write(() => realm.add(joe)); // Update an embedded object property. realm.write(() { joe.address?.street = "800 Park Place"; }); // Query a collection of embedded objects. // You must access the embedded object through the parent RealmObject type. final peopleWithNewYorkHomes = realm.query<Person>("address.state = 'NY'"); // Overwrite an embedded object. // Also deletes original embedded object from realm. final joesNewHome = Address("12 Maple Way", "Toronto", "ON", "Canada"); realm.write(() { joe.address = joesNewHome; }); // You can access the parent object from an embedded object. final thePersonObject = joesNewHome.parent; // Delete embedded object from parent object. realm.write(() => realm.delete(joe.address!)); // Add address back for the following example. final anotherNewHome = Address("202 Coconut Court", "Miami", "FL", "USA"); realm.write(() { joe.address = anotherNewHome; }); // Deleting the parent object also deletes the embedded object. realm.write(() => realm.delete(joe));
Exemplo
O modelo seguinte inclui alguns tipos de dados suportados.
part 'car.realm.dart'; // The generated `Address` class is an embedded object. (ObjectType.embeddedObject)class _Address { late String street; late String city; late String state; late String country; } ()class _Person { () late ObjectId id; late String name; // Embedded object in parent object schema late _Address? address; // Must be nullable } ()class _Car { () late ObjectId id; String? licensePlate; bool isElectric = false; double milesDriven = 0; late List<String> attributes; late _Person? owner; }