brick
1.0.0
DART中使用持久數據的直觀方式。
磚是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 in Automatic Generations。第一次遷移後,您需要再次運行此操作。
擴展現有存儲庫或創建自己的(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);磚內序列化的原始序列,關聯等。
如果仍然模糊,請查看學習視頻,教程和破壞磚頭的示例。