realm_dart 20.2.0
realm_dart: ^20.2.0 copied to clipboard
The official Realm SDK for Dart. Realm is a mobile database - an alternative to SQLite and key-value stores.
Warning
We announced the deprecation of Atlas Device Sync + Realm SDKs in September 2024. For more information please see:
For a version of realm-dart without sync features, install version 20 or see the community branch.
Realm is a mobile database that runs directly inside phones, tablets or wearables. This repository holds the source code for the Realm SDK for Flutter™ and Dart™.
Features #
- Mobile-first: Realm is the first database built from the ground up to run directly inside phones, tablets, and wearables.
- Simple: Realm’s object-oriented data model is simple to learn, doesn’t need an ORM, and the API lets you write less code to get apps up & running in minutes.
- Modern: Realm supports latest Dart and Flutter versions and is built with sound null-safety.
- Fast: Realm is faster than even raw SQLite on common operations while maintaining an extremely rich feature set.
Getting Started #
-
Import Realm in a dart file
app.dartimport 'package:realm/realm.dart'; // import realm package part 'app.realm.dart'; // declare a part file. @RealmModel() // define a data model class named `_Car`. class _Car { late String make; late String model; int? kilometers = 500; } -
Generate RealmObject class
Carfrom data model class_Car.dart run realm generate -
Open a Realm and add some objects.
var config = Configuration.local([Car.schema]); var realm = Realm(config); var car = Car("Tesla", "Model Y", kilometers: 5); realm.write(() { realm.add(car); }); -
Query objects in Realm.
var cars = realm.all<Car>(); Car myCar = cars[0]; print("My car is ${myCar.make} model ${myCar.model}"); cars = realm.all<Car>().query("make == 'Tesla'"); -
Get stream of result changes for a query.
final cars = realm.all<Car>().query(r'make == $0', ['Tesla']); cars.changes.listen((changes) { print('Inserted indexes: ${changes.inserted}'); print('Deleted indexes: ${changes.deleted}'); print('Modified indexes: ${changes.modified}'); }); realm.write(() => realm.add(Car('VW', 'Polo', kilometers: 22000)));
Samples #
For complete samples check the Realm Flutter and Dart Samples.
Documentation #
For API documentation go to
Use realm package for Flutter and realm_dart package for Dart applications.
For complete documentation of the SDKs, refer to the docs/guides.
If you are using the Realm SDK for the first time, refer to the Quick Start documentation.
Realm Flutter SDK #
Realm Flutter package is published to realm.
Environment setup for Realm Flutter #
- Realm Flutter supports the platforms iOS, Android, Windows, MacOS and Linux.
- Flutter 3.10.2 or newer.
- For Flutter Desktop environment setup, see Desktop support for Flutter.
- Cocoapods v1.11 or newer.
- CMake 3.21 or newer.
Usage #
The full contents of catalog.dart is listed after the usage
-
Add
realmpackage to a Flutter application.flutter pub add realm -
For running Flutter widget and unit tests run the following command to install the required native binaries.
dart run realm install -
Import Realm in a dart file (ex.
catalog.dart).import 'package:realm/realm.dart'; -
Declare a part file
catalog.realm.dartin the beginning of thecatalog.dartdart file after all imports.import 'dart:io'; part 'catalog.realm.dart'; -
Create a data model class.
It should start with an underscore
_Itemand be annotated with@RealmModel()@RealmModel() class _Item { @PrimaryKey() late int id; late String name; int price = 42; } -
Generate RealmObject class
Itemfrom data model class_Item.On Flutter use
dart run realmto runrealmpackage commandsdart run realm generateA new file
catalog.realm.dartwill be created next to thecatalog.dart.*The generated file should be committed to source control
-
Use the RealmObject class
Itemwith Realm.// Create a Configuration object var config = Configuration.local([Item.schema]); // Open a Realm var realm = Realm(config); var myItem = Item(0, 'Pen', price: 4); // Open a write transaction realm.write(() { realm.add(myItem); var item = realm.add(Item(1, 'Pencil')..price = 20); }); // Objects `myItem` and `item` are now managed and persisted in the realm // Read object properties from realm print(myItem.name); print(myItem.price); // Update object properties realm.write(() { myItem.price = 20; myItem.name = "Special Pencil"; }); // Get objects from the realm // Get all objects of type var items = realm.all<Item>(); // Get object by index var item = items[1]; // Get object by primary key var itemByKey = realm.find<Item>(0); // Filter and sort object var objects = realm.query<Item>("name == 'Special Pencil'"); var name = 'Pen'; objects = realm.query<Item>(r'name == $0', [name]); // Close the realm realm.close();
Full contents of catalog.dart #
import 'package:realm/realm.dart';
part 'catalog.realm.dart';
@RealmModel()
class _Item {
@PrimaryKey()
late int id;
late String name;
int price = 42;
}
// Create a Configuration object
var config = Configuration.local([Item.schema]);
// Open a Realm
var realm = Realm(config);
var myItem = Item(0, 'Pen', price: 4);
// Open a write transaction
realm.write(() {
realm.add(myItem);
var item = realm.add(Item(1, 'Pencil')..price = 20);
});
// Objects `myItem` and `item` are now managed and persisted in the realm
// Read object properties from realm
print(myItem.name);
print(myItem.price);
// Update object properties
realm.write(() {
myItem.price = 20;
myItem.name = "Special Pencil";
});
// Get objects from the realm
// Get all objects of type
var items = realm.all<Item>();
// Get object by index
var item = items[1];
// Get object by primary key
var itemByKey = realm.find<Item>(0);
// Filter and sort object
var objects = realm.query<Item>("name == 'Special Pencil'");
var name = 'Pen';
objects = realm.query<Item>(r'name == $0', [name]);
// Close the realm
realm.close();
Realm Dart Standalone SDK #
Realm Dart package is published to realm_dart.
Environment setup for Realm Dart #
- Realm Dart supports the platforms Windows, Mac and Linux.
- Dart SDK 3.0.2 or newer.
Usage #
-
Add
realm_dartpackage to a Dart application.dart pub add realm_dart -
Install the
realm_dartpackage into the application. This downloads and copies the required native binaries to the app directory.dart run realm_dart install -
Import realm_dart in a dart file (ex.
catalog.dart).import 'package:realm_dart/realm.dart'; -
To generate RealmObject classes with realm_dart use this command.
On Dart use
dart run realm_dartto runrealm_dartpackage commandsdart run realm_dart generateA new file
catalog.realm.dartwill be created next to thecatalog.dart.*The generated file should be committed to source control
-
The usage of the Realm Dart SDK is the same like the Realm Flutter above.
Building the source #
See CONTRIBUTING.md for instructions about building the source.
Code of Conduct #
This project adheres to the MongoDB Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to community-conduct@mongodb.com.
License #
Realm Flutter and Dart SDKs and Realm Core are published under the Apache License 2.0.