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: # Or brick_offline_first_with_graphql brick_offline_first_with_rest: any dev_dependencies: # Or brick_offline_first_with_graphql_build: any brick_offline_first_with_rest_build: any build_runner: any
- 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
flutter pub run build_runner build
to generate your models (orpub run build_runner build
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/brick/repository.dart import 'package:brick_offline_first/offline_first_with_rest.dart'; import 'package:my_app/brick/brick.g.dart'; import 'package:sqflite/sqflite' show databaseFactory; 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, databaseFactory: databaseFactory, modelDictionary: sqliteModelDictionary, ), offlineQueueManager: RestRequestSqliteCacheManager( 'brick_offline_queue.sqlite', databaseFactory: databaseFactory, ), ); }
- Profit.