다트의 지속적인 데이터로 작업하는 직관적 인 방법.
Brick은 DART 응용 프로그램의 확장 가능한 쿼리 인터페이스입니다. 데이터의 출처에 관계없이 애플리케이션에서 비즈니스 데이터를 대표하는 올인원 솔루션입니다. Brick을 사용하여 개발자는 데이터가 살고있는 위치에 대한 우려없이 애플리케이션 구현에 집중할 수 있습니다. 브릭은 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 :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, 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);벽돌은 기본적으로 프리미티브, 연관성 등을 연속화합니다.
여전히 어두운 경우 비디오, 튜토리얼 및 벽돌을 분해하는 예제를 확인하십시오.