搜索插件、代码仓与 APP 分类

插件详情v4.1.0+1

brick_sqlite

适用于 Brick(Flutter 的数据持久化库)的 SQLite 连接器

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
389
喜欢数
17
Pub 分数
140

安装插件

flutter pub add brick_sqlite

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Brick_SQLite 是 Brick 的 SQLite 连接器,Brick 是一个专为 Flutter 应用设计的数据持久化库。它可在 Android、iOS、Web、macOS、Windows 和 Linux 等多个平台上,使用 SQLite 实现高效、类型安全且响应式的数据存储。通过与 Brick 强大的类似 ORM 的功能集成,它简化了数据库操作,如查询、插入、更新和数据同步,几乎无需编写样板代码。该包支持迁移、事务以及通过流实现的实时更新,非常适合需要强大本地数据管理的应用。

适合场景

  • 离线优先的移动应用
  • 实时数据同步
  • 跨平台数据持久化
  • 复杂的数据建模与关系
  • 使用本地存储的应用程序状态管理

主要特点

  • 类型安全的数据库操作
  • 内置迁移支持
  • 通过流实现的反应式查询
  • 支持交易
  • 与 Brick ORM 的无缝集成

适合对象

  • 使用 Brick 进行数据持久化的开发者
  • 需要离线功能的应用
  • 针对多个平台的项目
  • 优先考虑可维护数据库代码的团队
  • 具有复杂数据关系的应用程序

使用建议

  • 需要熟悉 Brick 框架
  • 仅限 SQLite 后端
  • 迁移管理需要仔细规划
  • 性能取决于查询复杂性和数据量
  • Web 兼容性所需的额外设置

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

所属分类

依赖

依赖清单 6 项

源码仓库

使用此插件的项目

暂无相关数据。