ObjectBox for Dart/Flutter
ObjectBox is a super-fast database storing Dart objects locally.
@Entity() class Person { int id;String firstName; String lastName; }
// Note: in Flutter you also need to specify a directory, see examples. final store = Store(getObjectBoxModel()); final box = store.box();
var person = Person() ..firstName = "Joe" ..lastName = "Green";
final id = box.put(person); // Create
person = box.get(id); // Read
person.lastName = "Black"; box.put(person); // Update
box.remove(person.id); // Delete
// find all people whose name start with letter 'J' final query = box.query(Person_.firstName.startsWith('J')).build(); final people = query.find(); // find() returns List
Head over to examples for more.
Add the following dependencies to start using ObjectBox and code generator.
dependencies: objectbox: ^0.12.0 objectbox_flutter_libs: anydev_dependencies: build_runner: ^1.0.0 objectbox_generator: any
flutter pub get
${ARCHS_STANDARD)with
arm64(or
$ARCHS_STANDARD_64_BIT). See FAQ for details.
dependencies: objectbox: ^0.12.0dev_dependencies: build_runner: ^1.0.0 objectbox_generator: any
(flutter|dart) pub get
shell script bash
macOS: dart might later complain that it cannot find the
libobjectbox.dylib. You probably have to unsign the
dartbinary - see this dart issue for details.
Windows: copy the downloaded
lib/objectbox.dllto
C:\Windows\System32\(requires admin privileges).
ObjectBox Dart is still not on par with other language bindings where ObjectBox is available. To bring all the missing features to Dart, we're asking the community to help out. PRs are more than welcome! The ObjectBox team will try its best to guide you and answer questions.
Also, please let us know your feedback GitHub issues, either comment on an existing one or open a new one. For example, if you experience errors or if you have ideas for how to improve the API. Thanks!
Q: After adding ObjectBox, the size of the APK increased significantly. Why is that?
A: Flutter compresses its native libraries (.so files) by default in the APK.
ObjectBox instructs the Android build to use uncompressed native libraries instead
(following the official Android recommendations).
This setting affects the Flutter native libraries as well. Thus the now uncompressed Flutter libraries add to the APK size as well;
we've seen an additional 19 MB for the standard Flutter libraries.
This is bad, right? Nope, actually uncompressed libraries use less storage space on device and have other advantages.
For details, please review the official Android recommendations
and the ObjectBox FAQ entry on this.
Both links also explain how to force compression using
android:extractNativeLibs="true".
Q: Flutter iOS builds for armv7 fail with "ObjectBox does not contain that architecture", does it not support 32-bit devices?
A: No, only 64-bit iOS devices are supported. When ObjectBox was first released for iOS all the latest iOS devices had 64-bit support,
so we decided to not ship armv7 support. To resolve the build error, in your XCode project
look under Architectures and replace
${ARCHS_STANDARD)with
arm64(or
$ARCHS_STANDARD_64_BIT).
Copyright 2020 ObjectBox Ltd. All rights reserved.Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.