Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/GetDutchie/brick
An intuitive way to work with persistent data in Dart
https://github.com/GetDutchie/brick
dart flutter graphql mobile-development offline rest sqlite
Last synced: about 2 months ago
JSON representation
An intuitive way to work with persistent data in Dart
- Host: GitHub
- URL: https://github.com/GetDutchie/brick
- Owner: GetDutchie
- Created: 2020-01-09T19:33:01.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-17T15:20:01.000Z (2 months ago)
- Last Synced: 2024-07-17T19:00:01.639Z (2 months ago)
- Topics: dart, flutter, graphql, mobile-development, offline, rest, sqlite
- Language: Dart
- Homepage: https://getdutchie.github.io/brick/#/
- Size: 9.35 MB
- Stars: 290
- Watchers: 59
- Forks: 26
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
![An intuitive way to work with persistent data](./docs/logo.svg)
An intuitive way to work with persistent data in Dart.
## [Full documentation](https://getdutchie.github.io/brick/)
## Why Brick?
* Out-of-the-box [offline access](packages/brick_offline_first) to data
* [Handle and hide](packages/brick_build) complex serialization/deserialization logic
* Single [access point](docs/data/repositories.md) and opinionated DSL
* Automatic, [intelligently-generated migrations](docs/sqlite.md#intelligent-migrations)
* Legible [querying interface](docs/data/query.md)## What is Brick?
Brick is an extensible query interface for Dart applications. It's an [all-in-one solution](https://www.youtube.com/watch?v=2noLcro9iIw) 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](https://www.youtube.com/watch?v=jm5i7e_BQq0). Brick was inspired by the need for applications to work offline first, even if an API represents your source of truth.
## Quick Start
1. Add the packages:
```yaml
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:
```
1. Configure your app directory structure to match Brick's expectations:
```bash
mkdir -p lib/brick/adapters lib/brick/db;
```
1. Add [models](docs/data/models.md) that contain your app logic. Models **must be** saved with the `.model.dart` suffix (i.e. `lib/brick/models/person.model.dart`).
1. Run `dart run build_runner build` to generate your models and [sometimes migrations](docs/sqlite.md#intelligent-migrations). Rerun after every new model change or `dart run build_runner watch` for automatic generations. You'll need to run this again after your first migration.
1. Extend [an existing repository](docs/data/repositories.md) or create your own:
```dart
// 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,
),
);
}
```
1. Profit.