DARTの永続的なデータを使用する直感的な方法。
Brickは、DARTアプリケーション用の拡張可能なクエリインターフェイスです。これは、データがどこから来たのかに関係なく、アプリケーション内のビジネスデータを表現するためのオールインワンソリューションです。ブリックを使用して、開発者は、データがどこに住んでいるかを懸念なく、アプリケーションの実装に集中できます。ブリックは、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サフィックス(IE 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);ブリックは、ネイティブにプリミティブ、関連性などをシリアル化します。
それでも曖昧な場合は、ビデオ、チュートリアル、レンガを分解する例については、ご覧ください。