Flutter客户端通信插件jmixclientv1的使用

Flutter客户端通信插件jmixclientv1的使用

DartJmixClientV1

Github pipeline状态
GitHub仓库大小
GitHub代码大小
GitHub提交活动
GitHub下载总数

pub package
package publisher

用于与jmix 1.x Rest API通信的库。


安装

在Dart项目中安装插件:

dart pub add jmixclientv1

在Flutter项目中安装插件:

flutter pub add jmixclientv1

示例代码

以下是一个完整的示例代码,展示了如何使用jmixclientv1插件进行基本操作。

示例代码:main.dart

import 'package:jmixclientv1/jmixclientv1.dart';
import 'package:jmixclientv1/src/entities/session.dart';

void main() async {
  // 初始化Jmix客户端
  final JmixClient jmixClient = JmixClient(
    protocol: 'http', // 协议(http或https)
    hostname: '127.0.0.1', // 主机名
    port: 8080, // 端口
    clientId: 'your_client_id', // 客户端ID
    clientSecret: 'your_client_secret', // 客户端密钥
  );

  try {
    // 获取访问令牌
    final Session session = await jmixClient.getAccessToken(
      username: 'admin', // 用户名
      password: 'admin', // 密码
    );

    // 打印会话信息
    print('Session Token: ${session.accessToken}');
    print('Refresh Token: ${session.refreshToken}');

    // 获取用户列表
    final List<User> users = await jmixClient.getEntities<User>(
      name: 'User',
      parseCallback: (e) => User.fromMap(e),
    );
    print('Users: $users');

    // 刷新访问令牌
    final Session refreshedSession = await jmixClient.refreshAccessToken(
      refreshToken: session.refreshToken!,
    );
    print('Refreshed Session Token: ${refreshedSession.accessToken}');

    // 查询单个用户
    final User singleUser = await jmixClient.getEntity<User>(
      name: 'User',
      id: users.first.id!,
      parseCallback: (e) => User.fromMap(e),
    );
    print('Single User: ${singleUser.toMap()}');

    // 搜索用户
    final List<User> searchedUsers = await jmixClient.searchEntities<User>(
      name: 'User',
      conditions: [Condition(property: 'username', operator: '=', value: 'admin')],
      parseCallback: (e) => User.fromMap(e),
    );
    print('Searched Users: $searchedUsers');

    // 创建新用户
    final User newUser = await jmixClient.executeService<User>(
      name: 'MobileApp',
      method: 'createUser',
      body: {
        "username": "newUser",
        "password": "password123",
        "firstname": "John",
        "lastname": "Doe",
      },
      parseCallback: (e) => User.fromMap(e),
    );
    print('New User Created: ${newUser.toMap()}');

    // 更新用户密码
    await jmixClient.executeService<void>(
      name: 'MobileApp',
      method: 'updatePassword',
      body: {"password": "updatedPassword"},
      parseCallback: (e) => e,
    );
    print('Password Updated Successfully');

    // 下载文件
    final File downloadedFile = await jmixClient.downloadFile(
      id: 'file_id_here', // 文件ID
      path: 'downloaded_file_path.txt',
    );
    print('File Downloaded: ${downloadedFile.path}');

    // 上传文件
    final Map<String, dynamic> uploadedFile = await jmixClient.uploadFile(
      path: '/path/to/file.txt',
      name: 'uploaded_file_name.txt',
    );
    print('File Uploaded: $uploadedFile');
  } catch (e) {
    print('Error: $e');
  }
}

说明

初始化Jmix客户端

通过构造函数初始化JmixClient对象,并提供必要的配置参数,例如协议、主机名、端口、客户端ID和客户端密钥。

final JmixClient jmixClient = JmixClient(
  protocol: 'http',
  hostname: '127.0.0.1',
  port: 8080,
  clientId: 'your_client_id',
  clientSecret: 'your_client_secret',
);

获取访问令牌

使用getAccessToken方法获取访问令牌,用于后续API调用。

final Session session = await jmixClient.getAccessToken(
  username: 'admin',
  password: 'admin',
);

获取实体数据

使用getEntities方法获取指定实体的数据列表。

final List<User> users = await jmixClient.getEntities<User>(
  name: 'User',
  parseCallback: (e) => User.fromMap(e),
);

查询单个实体

使用getEntity方法查询单个实体。

final User singleUser = await jmixClient.getEntity<User>(
  name: 'User',
  id: users.first.id!,
  parseCallback: (e) => User.fromMap(e),
);

搜索实体

使用searchEntities方法根据条件搜索实体。

final List<User> searchedUsers = await jmixClient.searchEntities<User>(
  name: 'User',
  conditions: [Condition(property: 'username', operator: '=', value: 'admin')],
  parseCallback: (e) => User.fromMap(e),
);

创建新实体

使用executeService方法创建新的实体。

final User newUser = await jmixClient.executeService<User>(
  name: 'MobileApp',
  method: 'createUser',
  body: {
    "username": "newUser",
    "password": "password123",
    "firstname": "John",
    "lastname": "Doe",
  },
  parseCallback: (e) => User.fromMap(e),
);

更新实体

使用executeService方法更新现有实体。

await jmixClient.executeService<void>(
  name: 'MobileApp',
  method: 'updatePassword',
  body: {"password": "updatedPassword"},
  parseCallback: (e) => e,
);

下载文件

使用downloadFile方法下载文件。

final File downloadedFile = await jmixClient.downloadFile(
  id: 'file_id_here',
  path: 'downloaded_file_path.txt',
);

上传文件

使用uploadFile方法上传文件。

final Map<String, dynamic> uploadedFile = await jmixClient.uploadFile(
  path: '/path/to/file.txt',
  name: 'uploaded_file_name.txt',
);

更多关于Flutter客户端通信插件jmixclientv1的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter客户端通信插件jmixclientv1的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


jmixclientv1 是 Jmix 提供的一个 Flutter 客户端通信插件,用于在 Flutter 应用中与 Jmix 后端进行通信。通过这个插件,你可以轻松地在 Flutter 应用中调用 Jmix 后端的 REST API,执行诸如数据查询、实体操作、文件上传等任务。

以下是使用 jmixclientv1 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  jmixclientv1: ^1.0.0  # 使用最新版本

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

2. 初始化插件

在 Flutter 应用的入口文件(通常是 main.dart)中,初始化 jmixclientv1 插件:

import 'package:flutter/material.dart';
import 'package:jmixclientv1/jmixclientv1.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 JmixClient
  JmixClient.initialize(
    baseUrl: 'https://your-jmix-backend-url',  // Jmix 后端的 URL
    authToken: 'your-auth-token',  // 认证令牌(可选)
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Jmix Flutter Demo',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Jmix Flutter Demo'),
        ),
        body: MyHomePage(),
      ),
    );
  }
}

3. 使用插件进行数据操作

你可以在应用的任何地方使用 JmixClient 来与 Jmix 后端进行通信。以下是一些常见的使用示例:

查询数据

import 'package:jmixclientv1/jmixclientv1.dart';

Future<void> fetchData() async {
  try {
    var response = await JmixClient.instance.get('/rest/entities/YourEntity');
    print('Data: ${response.data}');
  } catch (e) {
    print('Error fetching data: $e');
  }
}

创建实体

import 'package:jmixclientv1/jmixclientv1.dart';

Future<void> createEntity() async {
  var entity = {
    'name': 'New Entity',
    'description': 'This is a new entity',
  };

  try {
    var response = await JmixClient.instance.post('/rest/entities/YourEntity', data: entity);
    print('Created entity: ${response.data}');
  } catch (e) {
    print('Error creating entity: $e');
  }
}

更新实体

import 'package:jmixclientv1/jmixclientv1.dart';

Future<void> updateEntity(String id) async {
  var updatedEntity = {
    'id': id,
    'name': 'Updated Entity',
    'description': 'This entity has been updated',
  };

  try {
    var response = await JmixClient.instance.put('/rest/entities/YourEntity/$id', data: updatedEntity);
    print('Updated entity: ${response.data}');
  } catch (e) {
    print('Error updating entity: $e');
  }
}

删除实体

import 'package:jmixclientv1/jmixclientv1.dart';

Future<void> deleteEntity(String id) async {
  try {
    await JmixClient.instance.delete('/rest/entities/YourEntity/$id');
    print('Entity deleted');
  } catch (e) {
    print('Error deleting entity: $e');
  }
}

4. 处理认证

如果 Jmix 后端需要认证,你可以通过 authToken 来进行认证。你可以在初始化时传入 authToken,或者在应用的其他地方动态设置:

JmixClient.instance.setAuthToken('your-new-auth-token');

5. 处理错误

在进行网络请求时,可能会遇到各种错误。建议在调用 JmixClient 的方法时使用 try-catch 块来捕获并处理错误。

6. 其他功能

jmixclientv1 插件还提供了其他功能,如文件上传、分页查询等。你可以参考插件的文档或源代码来了解更多细节。

7. 调试和日志

你可以通过设置 JmixClient 的日志级别来查看详细的请求和响应信息,帮助调试:

JmixClient.instance.setLogLevel(LogLevel.verbose);
回到顶部