Flutter插件unruffled_feathersjs的使用方法详解

Flutter插件unruffled_feathersjs的使用方法详解

Unruffled x FeathersJS

unruffled_feathersjs 是一个用于 Flutter 的 FeathersJS 客户端,它默认支持离线管理。


快速开始

1. 添加到 pubspec.yaml

在你的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  json_annotation: ^4.5.0
  unruffled_feathersjs: ^1.5.0

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

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


2. 声明模型

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

import 'package:json_annotation/json_annotation.dart';
import 'package:unruffled_feathersjs/unruffled_feathersjs.dart';

// 使用注解生成适配器
@UnruffledFeathersJsData()
[@JsonSerializable](/user/JsonSerializable)()
class User extends DataModel<User> {
  [@override](/user/override)
  [@JsonKey](/user/JsonKey)(name: '_id') // 例如 MongoDB 对象具有 '_id' 作为唯一标识符
  int? id;

  String name;
  String surname;
  int age;

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

  // 自动生成 JSON 序列化方法
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

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

flutter pub run build_runner build

注意: 你的类必须包含 String? keyObject? id,并将其传递给 super()

  • id 指的是远程对象的 ID。
  • key 指的是由 Unruffled 生成的本地对象 ID。

3. 注册适配器

对于非 Web 平台,使用 path_provider 包来生成目录路径。

import 'package:path_provider/path_provider.dart';

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

4. 初始化 Unruffled

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

await unruffled.init();

🚀 这样就完成了!你可以开始使用了!


使用方法

unruffled_feathersjs 提供默认的身份验证和刷新令牌方法,如果需要可以覆盖这些方法。

1. 身份验证

final data = {
  "email": "test@test.com",
  "password": "test123",
  "strategy": "local",
};

Map<String, dynamic> result = await unruffled.authenticate(body: data);

默认情况下,unruffled_feathersjs 使用 DefaultTokenStorageImpl() 自动保存访问令牌并在 Authorization 头部中传递。对于更复杂的情况,你可以通过创建 UnruffledFeathersJs 的混入类或添加 Dio 拦截器来自定义实现。

2. 其他功能

unruffled_feathersjs 扩展了 unruffled,更多文档请查看包的 官方文档


示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:unruffled_feathersjs/unruffled_feathersjs.dart';
import 'package:json_annotation/json_annotation.dart';

// 用户模型
[@JsonSerializable](/user/JsonSerializable)()
class User extends DataModel<User> {
  [@override](/user/override)
  [@JsonKey](/user/JsonKey)(name: '_id')
  int? id;

  String name;
  String surname;
  int age;

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

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化路径
  final dir = await getApplicationSupportDirectory();
  var unruffled = UnruffledFeathersJs(
        baseDirectory: dir,
        defaultBaseUrl: 'http://example.com',
    )
    .registerRepository(UserRepository());

  // 初始化 Unruffled
  await unruffled.init();

  // 身份验证
  final data = {
    "email": "test@test.com",
    "password": "test123",
    "strategy": "local",
  };

  Map<String, dynamic> result = await unruffled.authenticate(body: data);

  print('身份验证结果: $result');
}

更多关于Flutter插件unruffled_feathersjs的使用方法详解的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件unruffled_feathersjs的使用方法详解的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


unruffled_feathersjs 是一个用于 Flutter 的插件,旨在与 Feathers.js 后端服务进行无缝集成。Feathers.js 是一个轻量级的、实时的、基于 Node.js 的 RESTful 和 WebSocket API 框架。unruffled_feathersjs 插件可以帮助 Flutter 开发者更容易地与 Feathers.js 后端进行交互,尤其是在处理实时数据时。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 unruffled_feathersjs 依赖:

dependencies:
  flutter:
    sdk: flutter
  unruffled_feathersjs: ^0.1.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 基本使用

初始化 Feathers.js 客户端

在使用 unruffled_feathersjs 之前,你需要初始化 Feathers.js 客户端。通常,你可以在应用的 main.dart 文件中进行初始化。

import 'package:unruffled_feathersjs/unruffled_feathersjs.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 Feathers.js 客户端
  await UnruffledFeathersJs.init(
    baseUrl: 'https://your-feathersjs-server.com', // 你的 Feathers.js 服务器地址
    socketOptions: SocketOptions(), // 可选的 WebSocket 配置
  );

  runApp(MyApp());
}

创建数据模型

unruffled_feathersjs 使用数据模型来与 Feathers.js 服务进行交互。你需要为每个 Feathers.js 服务创建一个数据模型。

import 'package:unruffled_feathersjs/unruffled_feathersjs.dart';

class User extends DataModel {
  String? name;
  int? age;

  User({this.name, this.age});

  @override
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }

  @override
  User fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }
}

使用服务进行 CRUD 操作

你可以使用 FeathersService 来进行 CRUD 操作。

import 'package:unruffled_feathersjs/unruffled_feathersjs.dart';

class UserService extends FeathersService<User> {
  UserService() : super(path: 'users'); // 'users' 是 Feathers.js 服务的路径
}

// 在应用中使用
final userService = UserService();

// 创建用户
final newUser = User(name: 'John Doe', age: 30);
await userService.create(newUser);

// 获取用户列表
final users = await userService.find();

// 获取单个用户
final user = await userService.get('userId');

// 更新用户
final updatedUser = user.copyWith(name: 'Jane Doe');
await userService.update('userId', updatedUser);

// 删除用户
await userService.remove('userId');

实时数据订阅

unruffled_feathersjs 支持通过 WebSocket 订阅实时数据更新。

final subscription = userService.onCreated().listen((user) {
  print('New user created: ${user.name}');
});

3. 高级功能

认证与授权

unruffled_feathersjs 支持 Feathers.js 的认证与授权机制。你可以使用 AuthService 来处理用户登录、注销等操作。

final authService = AuthService();

// 用户登录
await authService.authenticate({
  'strategy': 'local',
  'email': 'user@example.com',
  'password': 'password',
});

// 用户注销
await authService.logout();

错误处理

unruffled_feathersjs 提供了丰富的错误处理机制,你可以捕获和处理 Feathers.js 服务返回的错误。

try {
  await userService.create(newUser);
} on FeathersJsException catch (e) {
  print('Feathers.js error: ${e.message}');
}
回到顶部