Flutter集成Axelor SDK插件flutter_axelor_sdk的使用

Flutter集成Axelor SDK插件flutter_axelor_sdk的使用

flutter_axelor_sdk

强大的、实用的、可扩展且高度可定制的API集合,通过消除样板代码来简化与Axelor服务器的通信。


目录


开始使用

添加依赖

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

dependencies:
  flutter_axelor_sdk:  
    git:    
      url: https://github.com/Abdktefane/flutter-axelor-sdk.git
      ref: v0.0.1  # 您可以跟踪开发版本 => ref: master

初始化在main.dart

void main()  {
  Axelor.initialize(
    builder: AxelorBuilder(
      client: Dio(),  // 使用Dio作为HTTP客户端
      domain: 'com.axelor.testserver.base.db.', // 替换为您的Axelor服务器前缀
    ),
  );
  runApp(const App());
}

示例

示例:带分页和复杂搜索条件的联系人搜索

Axelor.search(
  model: Contacts.model,                      // 自动构建端点
  baseDomain: Contacts.baseDomain,            // 自动构建端点
  mapper: Contacts.fromJson,                  // 自动将JSON解码并映射到类对象
  page: 0,                                    // 分页支持
  body: AxelorBody(                           // 构造请求体的语法糖
    fields: const ['fullName', 'email'],       // 要检索的字段
    sortBy: const ['fullName', '-createdOn'],  // 排序字段
    criteria: AxelorCriteria.or([             // 复杂搜索条件
      'email'.like('%gmail.com'),             // 匹配以gmail.com结尾的邮箱
      'lang'.equal('FR'),                     // 语言为法语
      'age'.between('18', '40'),              // 年龄在18到40之间
      AxelorCriteria.and([                    // 复合条件
        'firstName'.like('j%'),               // 名字以j开头
        'lastName'.like('s%')                 // 姓氏以s开头
      ])
    ]),
  ),
);

如果不使用Axelor SDK实现相同功能

try {
  final response = await client.post(
    '/ws/rest/com.axelor.contact.db.Contact/search',
    data: {
      'offset': 0,                              // 分页偏移量
      'limit': 10,                              // 每页记录数
      'fields': ['fullName', 'email'],          // 要检索的字段
      'sortBy': ['fullName', '-createdOn'],     // 排序字段
      'data': {
        'criteria': [
          {                                       // 复杂搜索条件
            'operator': 'or',
            'criteria': [
              {'fieldName': 'email', 'operator': 'like', 'value': '%gmail.com'},
              {'fieldName': 'lang', 'operator': '=', 'value': 'FR'},
              {'fieldName': 'age', 'operator': 'between', 'value': 18, 'value2': 40},
              {
                'operator': 'and',
                'criteria': [
                  {'fieldName': 'firstName', 'operator': 'like', 'value': 'j%'},
                  {'fieldName': 'lastName', 'operator': 'like', 'value': 's%'}
                ]
              }
            ]
          }
        ]
      }
    },
  );

  // 解析JSON响应
  final Map<String, dynamic> jsonResponse = jsonDecode(response.data);

  // 检查响应是否成功
  if ((jsonResponse['status'] as int?) != 0) {
    // 将错误传递给UI
    return;
  }

  // 将JSON映射到Contact类
  final contacts = Contacts.fromJson(jsonResponse['data']);
} catch (ex, st) {
  // 将通用错误传递给UI
}
1 回复

更多关于Flutter集成Axelor SDK插件flutter_axelor_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成flutter_axelor_sdk插件可以帮助你与Axelor ERP系统进行交互。以下是如何在Flutter项目中集成和使用flutter_axelor_sdk插件的步骤:

1. 添加依赖

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

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

然后运行flutter pub get来获取依赖。

2. 初始化SDK

在你的Flutter应用中,你需要在应用启动时初始化flutter_axelor_sdk。通常,你可以在main.dart文件中进行初始化。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Axelor SDK
  await AxelorSDK.initialize(
    baseUrl: 'https://your-axelor-instance.com', // 你的Axelor实例的URL
    apiKey: 'your-api-key', // 你的API密钥
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Axelor Flutter App',
      home: HomeScreen(),
    );
  }
}

3. 使用SDK进行API调用

初始化完成后,你可以在应用中使用AxelorSDK来进行各种API调用。以下是一些常见的操作示例:

获取数据

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  List<dynamic> data = [];

  @override
  void initState() {
    super.initState();
    fetchData();
  }

  Future<void> fetchData() async {
    try {
      var response = await AxelorSDK.get('/ws/rest/ModelName'); // 替换为你的模型名称
      setState(() {
        data = response['data'];
      });
    } catch (e) {
      print('Error fetching data: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Axelor Data'),
      ),
      body: ListView.builder(
        itemCount: data.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(data[index]['name']), // 替换为你的字段名称
          );
        },
      ),
    );
  }
}

创建数据

Future<void> createData() async {
  try {
    var response = await AxelorSDK.post(
      '/ws/rest/ModelName', // 替换为你的模型名称
      body: {
        'field1': 'value1',
        'field2': 'value2',
        // 添加其他字段
      },
    );
    print('Data created: ${response['data']}');
  } catch (e) {
    print('Error creating data: $e');
  }
}

更新数据

Future<void> updateData(String id) async {
  try {
    var response = await AxelorSDK.put(
      '/ws/rest/ModelName/$id', // 替换为你的模型名称和ID
      body: {
        'field1': 'newValue1',
        'field2': 'newValue2',
        // 更新其他字段
      },
    );
    print('Data updated: ${response['data']}');
  } catch (e) {
    print('Error updating data: $e');
  }
}

删除数据

Future<void> deleteData(String id) async {
  try {
    await AxelorSDK.delete('/ws/rest/ModelName/$id'); // 替换为你的模型名称和ID
    print('Data deleted');
  } catch (e) {
    print('Error deleting data: $e');
  }
}

4. 处理错误

在进行API调用时,可能会遇到各种错误。你可以使用try-catch块来捕获和处理这些错误。

try {
  var response = await AxelorSDK.get('/ws/rest/ModelName');
  // 处理响应
} catch (e) {
  print('Error: $e');
  // 显示错误信息给用户
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!