パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v4.1.0

brick_offline_first_with_graphql_build

GraphQL を使用した Brick オフラインファーストドメイン用のコード生成ライブラリ

AndroidiOSmacOSWindowsLinux
30日間ダウンロード
101
いいね数
0
Pub ポイント
140

パッケージをインストール

flutter pub add brick_offline_first_with_graphql_build

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Brick オフラインファースト ドメイン向けのコード生成ライブラリで、GraphQL と統合され、ローカルストレージとリモートAPI間でのスムーズなデータ同期を可能にします。GraphQL スキーマに基づいてDartモデルとリポジトリロジックを生成し、オフライン優先アプリ開発を簡素化します。このパッケージは複数のプラットフォームをサポートしており、型安全で保守性の高いデータレイヤーの作成を容易にします。コード生成を活用することで、ボイラープレートを減らし、開発者の生産性を向上させます。

用途

  • オフライン優先のモバイルアプリケーションの構築
  • ローカルおよびリモートのGraphQLエンドポイント間でデータを同期する
  • モデルおよびリポジトリの生成を自動化する
  • 型安全なデータアクセスレイヤーの作成
  • アプリケーションでリアルタイムデータの更新を有効にする
  • データレイヤー実装における手動ボイラープレートの削減

主な機能

  • GraphQL スキーマから Dart クラスを生成します
  • オフライン優先のデータ永続化をサポート
  • Brick のドメインアーキテクチャと統合されます
  • リポジトリの実装を生成します
  • データ操作における型の安全性を保証します
  • ローカルデータとリモートデータ間の自動同期を促進します

適している対象

  • オフライン優先アプリに Brick を使用する開発者
  • GraphQL を活用したモバイルアプリを開発するチーム
  • 強力なローカルデータ処理を必要とするプロジェクト
  • 自動データ同期が必要なアプリ
  • コード生成ツールを探しているDart開発者
  • 保守可能なデータレイヤー設計を重視するプロジェクト

注意事項

  • Brick および GraphQL に精通している必要があります
  • コード生成のための適切なスキーマ定義が必要です
  • コード生成のため、ビルド時間が延長される可能性があります
  • スキーマ管理に外部ツールに依存しています
  • 複雑なデータ要件を持つ大規模プロジェクトに最適
  • 主流パッケージと比べてドキュメントが限られている

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

An intuitive way to work with persistent data

An intuitive way to work with persistent data in Dart.

Full documentation

Why Brick?

What is Brick?

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

  1. Add the packages:

    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:
    
  2. Configure your app directory structure to match Brick's expectations:

    mkdir -p lib/brick/adapters lib/brick/db;
    
  3. Add models that contain your app logic. Models must be saved with the .model.dart suffix (i.e. lib/brick/models/person.model.dart).

  4. 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.

  5. Extend an existing repository or create your own (Supabase has some exceptions):

    // 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,
              ),
            );
    }
    
  6. Profit.

Usage

Create a model as the app's business logic:

// brick/models/user.dart
@ConnectOfflineFirstWithRest()
class User extends OfflineFirstWithRestModel {}

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:

class MyRepository extends OfflineFirstWithRestRepository {
  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.

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);

Brick natively serializes primitives, associations, and more.

If it's still murky, check out Learn for videos, tutorials, and examples that break down Brick.

カテゴリー

依存関係

依存関係一覧 15 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。