Cara intuitif untuk bekerja dengan data persisten di DART.
Brick adalah antarmuka kueri yang dapat diperluas untuk aplikasi DART. Ini adalah solusi all-in-one yang bertanggung jawab untuk mewakili data bisnis dalam aplikasi, terlepas dari dari mana data Anda berasal. Menggunakan batu bata, pengembang dapat fokus pada penerapan aplikasi, tanpa perhatian di mana data tinggal. Brick terinspirasi oleh kebutuhan akan aplikasi untuk bekerja secara offline terlebih dahulu, bahkan jika API mewakili sumber kebenaran Anda.
Tambahkan paket:
dependencies :
# Or brick_offline_first_with_graphql
# Or brick_offline_first_with_supabase
brick_offline_first_with_rest :
sqflite : # optional
dev_dependencies :
# Or brick_offline_first_with_graphql_build: any
# Or brick_offline_first_with_supabase_build: any
brick_offline_first_with_rest_build :
build_runner :Konfigurasikan struktur direktori aplikasi Anda agar sesuai dengan harapan bata:
mkdir -p lib/brick/adapters lib/brick/db ; Tambahkan model yang berisi logika aplikasi Anda. Model harus disimpan dengan akhiran .model.dart (yaitu lib/brick/models/person.model.dart ).
Jalankan dart run build_runner build untuk menghasilkan model Anda dan terkadang migrasi. Rerun setelah setiap perubahan model baru atau dart run build_runner watch untuk generasi otomatis. Anda harus menjalankan ini lagi setelah migrasi pertama Anda.
Perluas repositori yang ada atau buat sendiri (SupAbase memiliki beberapa pengecualian):
// 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,
),
);
}Laba.
Buat model sebagai logika bisnis aplikasi:
// brick/models/user.dart
@ConnectOfflineFirstWithRest ()
class User extends OfflineFirstWithRestModel {}Dan menghasilkan kode serialisasi (DE) untuk mengambil ke dan dari beberapa penyedia:
$ (flutter) pub run build_runner buildRepositori mengambil dan mengembalikan data di beberapa penyedia. Ini adalah titik akses tunggal untuk data di aplikasi Anda:
class MyRepository extends OfflineFirstWithRestRepository {
MyRepository ();
}
final repository = MyRepository ();
// Now the models can be queried:
final users = await repository. get < User >();Di belakang layar, repositori ini dapat polling cache memori, lalu sqlite, lalu API istirahat. Repositori secara cerdas menentukan bagaimana dan kapan menggunakan masing -masing penyedia untuk mengembalikan data tercepat dan paling andal.
// Queries can be general:
final query = Query (where : [ Where ( 'lastName' ). contains ( 'Muster' )]);
final users = await repository. get < User >(query : query);
// Or singular:
final query = Query . where ( 'email' , '[email protected]' , limit1 : true );
final user = await repository. get < User >(query : query);Kueri juga dapat menerima pembaruan reaktif . Aliran yang berlangganan menerima semua model dari kueri setiap kali salinan lokal diperbarui (misalnya ketika data terhidrasi di bagian lain dari aplikasi):
final users = repository. subscribe < User >(). listen ((users) {})Setelah model dibuat, itu dikirim ke repositori dan kembali ke setiap penyedia:
final user = User ();
await repository. upsert < User >(user);Repositori dapat mendukung serialisasi asosiasi dan otomatis (DE) model anak.
class Hat extends OfflineFirstWithRestModel {
final String color;
Hat ({ this .color});
}
class User extends OfflineFirstWithRestModel {
// user has many hats
final List < Hat > hats;
}
final query = Query . where ( 'hats' , Where ( 'color' ). isExactly ( 'brown' ));
final usersWithBrownHats = repository. get < User >(query : query);Bata secara asli membuat serial primitif, asosiasi, dan banyak lagi.
Jika masih keruh, lihat pelajari video, tutorial, dan contoh yang memecah bata.