搜尋套件、儲存庫與 APP 分類

套件詳情v4.0.0+1

brick_rest

Brick 數據持久化庫的 RESTful API 連接器。包含註解、適配器、模型和提供者。

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
1430
喜歡數
2
Pub 分數
160

安裝套件

flutter pub add brick_rest

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Brick_REST 是 Brick(一個資料持久化庫)的 RESTful API 連接器,可實現與 REST API 的無縫整合。它提供註解、適配器、模型和提供者,以簡化跨平台的資料取得、序列化和狀態管理。專為使用 Brick 的開發者設計,可大幅減少樣板程式碼,輕鬆連接後端服務。支援 Android、iOS、Web、macOS、Windows 和 Linux,非常適合需要強大資料同步功能的跨平台應用。

適用情境

  • 將 Flutter 應用連接到 REST API
  • 自動化 JSON 序列化
  • 在跨平台應用中管理遠端資料
  • 同步伺服器資料與本機儲存
  • 建構可擴展的後端整合

主要特色

  • 基於註解的 API 建模
  • 內建的 JSON 到模型轉換
  • 跨平台支援
  • 與 Brick 的持久層整合
  • 基於提供者的資料存取

適合對象

  • 使用 Brick 進行資料持久化的開發者
  • 需要 REST API 集成的專案
  • 跨平台移動和Web應用程式
  • 優先考慮程式碼一致性與可維護性的團隊

使用建議

  • 需要熟悉 Brick 框架
  • 僅限 REST API(不包含 GraphQL)
  • 依賴於 Dart 程式碼產生
  • 可能需要為複雜端點進行額外設定

原始 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.

所屬分類

依賴

依賴清單 4 項

  • brick_core>=2.0.0 <3.0.0
  • http>=1.0.0 <2.0.0
  • logging>=1.0.0 <2.0.0
  • meta>=1.3.0 <2.0.0

原始碼儲存庫

使用此套件的專案

暫無相關資料。