วิธีที่ใช้งานง่ายในการทำงานกับข้อมูลถาวรใน DART
อิฐเป็นอินเทอร์เฟซแบบสอบถามที่ขยายได้สำหรับแอปพลิเคชัน DART เป็นโซลูชันแบบ all-in-one ที่รับผิดชอบในการเป็นตัวแทนของข้อมูลธุรกิจในแอปพลิเคชันไม่ว่าข้อมูลของคุณจะมาจากไหน การใช้อิฐนักพัฒนาสามารถมุ่งเน้นไปที่การใช้แอปพลิเคชันโดยไม่ต้องกังวลว่าข้อมูลจะอยู่ที่ไหน อิฐได้รับแรงบันดาลใจจากความต้องการแอปพลิเคชันในการทำงานออฟไลน์ก่อนแม้ว่า API จะแสดงถึงแหล่งที่มาของความจริงของคุณ
เพิ่มแพ็คเกจ:
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 :กำหนดค่าโครงสร้างไดเรกทอรีแอพของคุณให้ตรงกับความคาดหวังของอิฐ:
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 จากนั้น REST API ที่เก็บจะกำหนดวิธีและเวลาที่จะใช้ผู้ให้บริการแต่ละรายเพื่อส่งคืนข้อมูลที่เร็วที่สุดและเชื่อถือได้มากที่สุด
// 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);อิฐทำให้เกิดความเป็นต้นฉบับดั้งเดิมการเชื่อมโยงและอื่น ๆ
หากยังคงมืดมนลองดูเรียนรู้วิดีโอบทเรียนและตัวอย่างที่ทำลายอิฐ