Flutter插件unruffled的使用_Unruffled 是一个轻量级且可定制的 HTTP 客户端,允许你轻松创建离线优先的应用

Flutter插件unruffled的使用_Unruffled 是一个轻量级且可定制的 HTTP 客户端,允许你轻松创建离线优先的应用

享受定制化的离线优先REST API客户端

Pub Version GitHub

Unruffled 是一个轻量级且可定制的 HTTP 客户端,允许你轻松创建离线优先的应用。

Flutter插件unruffled特性

  • 🧘 通过自动管理离线存储和连接错误来确保安全
  • 🚀 非常可定制
  • 💻 支持所有平台
  • 🤖 直观简单的API
  • 🔒 使用Hive进行强加密

Flutter插件unruffled开始使用

查看快速入门文档以开始使用。

快速开始

1. 添加到 pubspec.yaml

dependencies:
  json_annotation: ^4.5.0
  unruffled: ^1.0.0

dev_dependencies:
  build_runner: any
  json_serializable: ^6.2.0
  unruffled_generator: ^1.0.0

注意:Unruffled 依赖于 json_annotationjson_serializable 来正常工作,请确保在依赖项中添加它们。

2. 声明模型

声明远程服务使用的模型并生成 Unruffled 适配器。

@UnruffledData()
@JsonSerializable()
class User extends DataModel<User> {
  @Id()
  int? id;
  
  String name;
  
  String surname;
  
  int age;

  User({super.unruffledKey, this.id, required this.name, required this.surname, required this.age});
}

构建你的 Flutter 项目以生成 UserRepository()

flutter pub run build_runner build

注意:你的类必须调用 super.unruffledKey

  • unruffledKey 指的是由 unruffled 生成的本地对象ID。

3. 注册适配器

对于除Web以外的所有平台,使用 <a href="https://pub.dev/packages/path_provider">path_provider</a> 生成目录路径。

final dir = await getApplicationSupportDirectory(); // path_provider 包
var unruffled = Unruffled(
      baseDirectory: dir,
      defaultBaseUrl: 'http://example.com',
      dio: dio,
  )
  .registerRepository(UserRepository());

4. 初始化 Unruffled

在使用 Unruffled 之前,确保初始化它。

await unruffled.init();

🚀 就这样,你已经准备好了!

使用方法

1. 创建用户

定义一个用户并调用用户仓库。

final testUser = User(name: 'John', surname: 'Doe');
final repository = unruffled.repository<User>();

通过调用 post() 方法创建用户。

var user = await repository.post(model: testUser);

2. 获取用户

var user = await repository.get(key: user.key);

3. 删除用户

var user = await repository.delete(key: user.key);

4. 查询用户

QueryBuilder 允许你在查询中应用过滤条件。

过滤条件将自动应用于本地查询。 要启用远程查询中的过滤条件,必须实现以下方法:

注意:要获取完整的示例,请检查 unruffled_feathersjs

mixin CustomRemoteRepository<T extends DataModel<T>> on RemoteRepository<T> {
  @override
  Map<String, dynamic> parseLimit(int limit) => {};

  @override
  Map<String, dynamic> parsePage(int page) => {};

  @override
  Map<String, dynamic> parseSort(SortCondition<R> sort) => {};
  
  @override
  Map<String, dynamic> parseEqual(FilterCondition<T> condition) => {};

  @override
  Map<String, dynamic> parseNotEqual(FilterCondition<T> condition) => {};

  @override
  Map<String, dynamic> parseGreaterThan(FilterCondition<T> condition) => {};

  @override
  Map<String, dynamic> parseLessThan(FilterCondition<T> condition) => {};

  @override
  Map<String, dynamic> parseInValues(FilterCondition<T> condition) => {};

  @override
  Map<String, dynamic> parseOrCondition(List<FilterOperation<T>> operations) => {};

  @override
  Map<String, dynamic> parseAndCondition(List<FilterOperation<T>> operations) => {};
}

QueryBuilder 的使用方法:

List<User> users = await repository.getAll(
  queryBuilder: QueryBuilder(
    filterGroup: FilterGroup.or(
      filters: [
        FilterCondition.equal(property: UserField.surname(), value: 'Doe'),
        FilterCondition.greaterThan(property: UserField.age(), value: 18, include: true),
      ],
    ),
    limit: 10,
    page: 1,
    sort: SortCondition(property: UserField.age(), sort: SortType.desc),
  ),
);

5. 管理连接问题

如果出现连接错误,Unruffled 会自动存储请求以便稍后重试。只需调用全局方法:

final operations = unruffled.offlineOperations;
for (var remoteRepository in operations.keys) {
  await operations[remoteRepository].retry(remoteRepository);
}

或者为每个远程仓库调用:

final operations = repository.offlineOperations;
for (var operation in operations) {
  await operation.retry(repository);
}

更多关于Flutter插件unruffled的使用_Unruffled 是一个轻量级且可定制的 HTTP 客户端,允许你轻松创建离线优先的应用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件unruffled的使用_Unruffled 是一个轻量级且可定制的 HTTP 客户端,允许你轻松创建离线优先的应用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


针对您提到的Flutter功能未知插件“unruffled”的潜在使用,由于我无法直接访问或验证该插件的具体实现和功能(因为“unruffled”并非一个广为人知的Flutter插件名,可能是一个自定义或特定项目中的插件),我将提供一个通用的Flutter插件使用示例,并展示如何集成和使用一个假设的插件。请注意,以下代码是示例性质的,您需要根据“unruffled”插件的实际API进行调整。

假设的“unruffled”插件功能

假设“unruffled”插件提供了一些与数据缓存或网络请求相关的功能。以下是如何在Flutter项目中集成和使用该插件的示例代码。

1. 添加插件依赖

首先,在pubspec.yaml文件中添加对该插件的依赖。由于我们不知道“unruffled”插件的确切名称和版本,这里使用unruffled_plugin作为占位符。

dependencies:
  flutter:
    sdk: flutter
  unruffled_plugin: ^0.1.0  # 假设的版本号

2. 导入插件并初始化

在需要使用该插件的Dart文件中导入它,并进行必要的初始化。

import 'package:flutter/material.dart';
import 'package:unruffled_plugin/unruffled_plugin.dart';  // 假设的导入路径

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late UnruffledPlugin unruffled;

  @override
  void initState() {
    super.initState();
    // 初始化插件
    unruffled = UnruffledPlugin();
    // 假设的初始化操作,如配置缓存大小等
    unruffled.initialize(cacheSize: 100);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Unruffled Plugin Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                // 假设的获取数据操作
                String data = await unruffled.fetchData('https://api.example.com/data');
                // 显示数据
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(data)));
              },
              child: Text('Fetch Data'),
            ),
            ElevatedButton(
              onPressed: () async {
                // 假设的缓存数据操作
                bool isCached = await unruffled.cacheData('key', 'value');
                // 显示缓存结果
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Data cached: $isCached')));
              },
              child: Text('Cache Data'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 插件的假设API

以下是根据上述示例假设的UnruffledPlugin类的API。

class UnruffledPlugin {
  // 初始化插件
  Future<void> initialize(int cacheSize) async {
    // 初始化逻辑,如设置缓存大小
  }

  // 从网络获取数据
  Future<String> fetchData(String url) async {
    // 网络请求逻辑
    // 假设返回的是JSON字符串,这里简化为直接返回字符串
    return 'Fetched data from $url';
  }

  // 缓存数据
  Future<bool> cacheData(String key, String value) async {
    // 缓存逻辑
    // 假设总是成功缓存
    return true;
  }
}

注意事项

  • 上述代码是示例性质的,并非“unruffled”插件的实际代码。
  • 您需要根据“unruffled”插件的实际API和功能进行调整。
  • 确保插件已正确安装并可在您的Flutter环境中使用。
  • 如果“unruffled”插件提供了特定的文档或示例代码,请参考那些资料以获取更准确的信息。
回到顶部