طريقة بديهية للعمل مع البيانات المستمرة في DART.
Brick هي واجهة استعلام قابلة للتمديد لتطبيقات DART. إنه حل الكل في واحد مسؤول عن تمثيل بيانات الأعمال في التطبيق ، بغض النظر عن من أين تأتي بياناتك. باستخدام الطوب ، يمكن للمطورين التركيز على تنفيذ التطبيق ، دون الاهتمام بمكان حياة البيانات. استلهم الطوب من الحاجة إلى تطبيقات للعمل في وضع عدم الاتصال أولاً ، حتى لو تمثل واجهة برمجة التطبيقات مصدر الحقيقة.
أضف الحزم:
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 :قم بتكوين بنية دليل التطبيق الخاصة بك لمطابقة توقعات Brick:
mkdir -p lib/brick/adapters lib/brick/db ; إضافة نماذج تحتوي على منطق التطبيق الخاص بك. يجب حفظ النماذج باستخدام .model.dart لاحقة (أي lib/brick/models/person.model.dart ).
تشغيل dart run build_runner build لإنشاء النماذج الخاصة بك وأحيانًا الترحيل. إعادة تشغيل بعد كل تغيير نموذج جديد أو dart run build_runner watch للأجيال التلقائية. ستحتاج إلى تشغيل هذا مرة أخرى بعد أول ترحيل.
تمديد مستودع موجود أو إنشاء خاص بك (يحتوي Supabase على بعض الاستثناءات):
// 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,
),
);
}ربح.
قم بإنشاء نموذج كمنطق أعمال التطبيق:
// brick/models/user.dart
@ConnectOfflineFirstWithRest ()
class User extends OfflineFirstWithRestModel {}وتوليد الكود التسلسلي (DE) لجلب من وإلى مقدمي خدمات متعددة:
$ (flutter) pub run build_runner buildمستودع يجلب البيانات وإرجاع البيانات عبر مقدمي خدمات متعددة. إنها نقطة الوصول الفردية للبيانات في تطبيقك:
class MyRepository extends OfflineFirstWithRestRepository {
MyRepository ();
}
final repository = MyRepository ();
// Now the models can be queried:
final users = await repository. get < User >();وراء الكواليس ، يمكن لهذا المستودع استطلاع ذاكرة التخزين المؤقت للذاكرة ، ثم SQLite ، ثم API REST. يحدد المستودع بذكاء كيف ومتى يستخدم كل من مقدمي الخدمات لإرجاع البيانات الأسرع والأكثر موثوقية.
// 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);يمكن أن تتلقى الاستعلامات أيضًا تحديثات تفاعلية . يتلقى الدفق المشترك جميع النماذج من استعلامه كلما تم تحديث النسخة المحلية (على سبيل المثال عندما يتم ترطيب البيانات في جزء آخر من التطبيق):
final users = repository. subscribe < User >(). listen ((users) {})بمجرد إنشاء نموذج ، يتم إرساله إلى المستودع والعودة إلى كل مزود:
final user = User ();
await repository. upsert < User >(user);يمكن للمستودعات دعم الجمعيات والتسلسل التلقائي (DE) لنماذج الأطفال.
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);الطوب أصلاً في التسلسل البدائي ، والجمعيات ، وأكثر من ذلك.
إذا كانت لا تزال غامضة ، تحقق من تعلم مقاطع الفيديو والبرامج التعليمية والأمثلة التي تحطم الطوب.