An intuitive way to work with persistent data in Dart.
Full documentation
Why Brick?
- 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
What is Brick?
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.
Quick Start
- Add the packages:
dependencies: # Or brick_offline_first_with_graphql brick_offline_first_with_rest: sqflite: # optional dev_dependencies: # Or brick_offline_first_with_graphql_build: any brick_offline_first_with_rest_build: build_runner:
- Configure your app directory structure to match Brick's expectations:
mkdir -p lib/brick/adapters lib/brick/db;
- Add models that contain your app logic. Models must be saved with the
.model.dart
suffix (i.e.lib/brick/models/person.model.dart
). - Run
dart run build_runner build
to generate your models and sometimes migrations. Rerun after every new model change ordart run build_runner watch
for automatic generations. You'll need to run this again after your first migration. - Extend an existing repository or create your own:
// lib/brick/repository.dart import 'package:brick_offline_first_with_rest/brick_offline_first_with_rest.dart'; import 'package:brick_rest/brick_rest.dart'; import 'package:brick_sqlite/brick_sqlite.dart'; import 'package:my_app/brick/brick.g.dart'; import 'package:sqflite/sqflite.dart' show databaseFactory; import 'package:my_app/brick/db/schema.g.dart'; export 'package:brick_core/query.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, databaseFactory: databaseFactory, modelDictionary: sqliteModelDictionary, ), offlineQueueManager: RestRequestSqliteCacheManager( 'brick_offline_queue.sqlite', databaseFactory: databaseFactory, ), ); }
- Profit.