Brick_SQLite는 Flutter 애플리케이션용으로 설계된 데이터 지속성 라이브러리인 Brick을 위한 SQLite 커넥터입니다. Android, iOS, Web, macOS, Windows, Linux 등 여러 플랫폼에서 SQLite를 사용하여 효율적이고 타입 안전하며 반응형 데이터 저장을 가능하게 합니다. Brick의 강력한 ORM 유사 기능과 통합되어 쿼리, 삽입, 업데이트 및 최소한의 보일러플레이트로 데이터 동기화와 같은 데이터베이스 작업을 간소화합니다. 패키지는 마이그레이션, 트랜잭션, 스트림을 통한 실시간 업데이트를 지원하여 견고한 로컬 데이터 관리가 필요한 앱에 적합합니다.
사용 사례
오프라인 우선 모바일 애플리케이션
실시간 데이터 동기화
크로스 플랫폼 데이터 지속성
관계를 가진 복잡한 데이터 모델링
로컬 스토리지와 함께 앱 상태 관리
주요 기능
형 안전한 데이터베이스 작업
내장형 마이그레이션 지원
스트림을 통한 반응형 쿼리
거래 지원
Brick ORM과의 원활한 통합
적합한 대상
데이터 지속성에 Brick을 사용하는 개발자
오프라인 기능이 필요한 앱
다중 플랫폼을 대상으로 하는 프로젝트
유지보수 가능한 데이터베이스 코드를 우선시하는 팀
복잡한 데이터 관계를 가진 애플리케이션
고려 사항
Brick 프레임워크에 익숙해야 합니다
SQLite 백엔드에 제한됨
마이그레이션 관리는 신중한 계획이 필요합니다
성능은 쿼리의 복잡성과 데이터 양에 따라 달라집니다
웹 호환성을 위한 추가 설정 필요
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
An intuitive way to work with persistent data in Dart.
Brick is an extensible query interface for Dart applications. It's an all-in-one solution 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. Brick was inspired by the need for applications to work offline first, even if an API represents your source of truth.
Quick Start
Add the packages:
dependencies:# Or brick_offline_first_with_graphql# Or brick_offline_first_with_supabasebrick_offline_first_with_rest:sqflite:# optionaldev_dependencies:# Or brick_offline_first_with_graphql_build: any# Or brick_offline_first_with_supabase_build: anybrick_offline_first_with_rest_build:build_runner:
Configure your app directory structure to match Brick's expectations:
mkdir -p lib/brick/adapters lib/brick/db;
Add models that contain your app logic. Models must be saved with the .model.dart suffix (i.e. lib/brick/models/person.model.dart).
Run dart run build_runner build to generate your models and sometimes 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.
And generate (de)serializing code to fetch to and from multiple providers:
$ (flutter) pub run build_runner build
Fetching Data
A repository fetches and returns data across multiple providers. It's the single access point for data in your app:
classMyRepositoryextendsOfflineFirstWithRestRepository{
MyRepository();
}
final repository = MyRepository();
// Now the models can be queried:final users = await repository.get<User>();
Behind the scenes, this repository could poll a memory cache, then SQLite, then a REST API. The repository intelligently determines how and when to use each of the providers to return the fastest, most reliable data.
// 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', 'user@example.com', limit1: true);
final user = await repository.get<User>(query: query);
Queries can also receive reactive updates. The subscribed stream receives all models from its query whenever the local copy is updated (e.g. when the data is hydrated in another part of the app):
final users = repository.subscribe<User>().listen((users) {})
Mutating Data
Once a model has been created, it's sent to the repository and back out to each provider:
final user = User();
await repository.upsert<User>(user);
Associating Data
Repositories can support associations and automatic (de)serialization of child models.
classHatextendsOfflineFirstWithRestModel{
finalString color;
Hat({this.color});
}
classUserextendsOfflineFirstWithRestModel{
// user has many hatsfinalList<Hat> hats;
}
final query = Query.where('hats', Where('color').isExactly('brown'));
final usersWithBrownHats = repository.get<User>(query: query);