An intuitive way to work with persistent data in Dart.
- Out-of-the-box offline access to data
- Handle and hide complex serialization/deserialization logic
- Single access point and opinionated DSL
- Automatic, intelligently-generated migrations
- Legible querying interface
Brick is an extensible query interface for Dart applications. It's an all-in-one solution responsible for representing business data in the application, regardless of where your data comes from. Using Brick, developers can focus on implementing the application, without concern for where the data lives. Brick was inspired by the need for applications to work offline first, even if an API represents your source of truth.
- Add the packages:
dependencies: brick_offline_first: any dev_dependencies: brick_offline_first_with_rest_build: any build_runner: any
- Configure your app directory structure to match Brick's expectations:
mkdir -p lib/app/adapters lib/app/db lib/app/models;
- Add models that contain your app logic. Models must be saved in
lib/app/models/<class_as_snake_name>.dart
. - Run
flutter pub run build_runner run
to generate your models (orpub run build_runner run
if you're not using Flutter) and sometimes migrations. Rerun after every new model change orflutter pub run build_runner watch
for automatic generations. - Extend an existing repository or create your own:
// lib/app/repository.dart import 'package:brick_offline_first/offline_first_with_rest.dart'; import 'package:my_app/app/brick.g.dart'; export 'package:brick_offline_first/offline_first_with_rest.dart' show And, Or, Query, QueryAction, Where, WherePhrase; class Repository extends OfflineFirstWithRestRepository { Repository() : super( migrations: migrations, restProvider: RestProvider( 'http://0.0.0.0:3000', modelDictionary: restModelDictionary, ), sqliteProvider: SqliteProvider( _DB_NAME, modelDictionary: sqliteModelDictionary, ), ); }
- Profit.