Flutter Odoo集成插件odoo_provider_builder的使用

Flutter Odoo集成插件odoo_provider_builder的使用

Odoo Provider Builder

由于使用odoo_provider实现IOdooModel需要编写大量代码,因此我开发了这个插件。通过该插件,您可以更轻松地编写模型。

请将此包作为项目的开发依赖添加。

使用方法

1. 创建您的模型,结构类似于以下示例(例如:user.dart

import 'package:odoo_provider/odoo_provider.dart';

part 'user.g.dart'; // 这是必需的

// 定义模型类,指定Odoo中的模型名称、表名称以及字段
@OdooModel(className: "User", tableName: "res.users", columns: [
  DbColumn(name: "id", type: int),    // 字段名和类型
  DbColumn(name: "login", type: String),
  DbColumn(name: "name", type: String)
])
void _;

2. 然后运行以下命令:

flutter pub run build_runner build

如果上述命令成功执行,您将在同一目录下看到生成的文件user.g.dart

如果您想了解更多关于build_runner的用法,可以查看官方文档

示例代码

以下是一个完整的示例代码,展示如何使用odoo_provider_builder插件与Odoo进行集成。

1. 创建模型文件 user.dart

import 'package:odoo_provider/odoo_provider.dart';

part 'user.g.dart'; // 生成的文件

// 定义用户模型
@OdooModel(className: "User", tableName: "res.users", columns: [
  DbColumn(name: "id", type: int),
  DbColumn(name: "login", type: String),
  DbColumn(name: "name", type: String)
])
void _;

2. 生成模型文件

在终端中运行以下命令:

flutter pub run build_runner build

成功后会生成user.g.dart文件。

3. 编写主程序 main.dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:odoo_provider/odoo_provider.dart';
import 'user.dart'; // 引入自定义模型

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  List<User> users = []; // 存储从Odoo获取的用户数据

  @override
  void initState() {
    super.initState();
    fetchUsers(); // 初始化时调用获取用户数据的方法
  }

  Future<void> fetchUsers() async {
    final odoo = await OdooConnection.connect('http://your_odoo_instance_url', 'db_name', 'username', 'password');
    final result = await odoo.call<User>('search_read', args: [const [], ['id', 'login', 'name']]);
    setState(() {
      users = result; // 将返回的数据赋值给users列表
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Odoo User List'),
      ),
      body: ListView.builder(
        itemCount: users.length,
        itemBuilder: (context, index) {
          final user = users[index];
          return ListTile(
            title: Text(user.name),
            subtitle: Text(user.login),
          );
        },
      ),
    );
  }
}

4. 运行项目

确保您的Odoo实例正在运行,并且提供了API访问权限。然后在终端中运行以下命令启动应用:

flutter run

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

1 回复

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


odoo_provider_builder 是一个用于在 Flutter 应用中与 Odoo 集成的插件。它基于 provider 状态管理库,简化了与 Odoo 后端 API 的交互。通过这个插件,你可以轻松地在 Flutter 应用中调用 Odoo 的模型方法、查询数据、创建记录等。

安装

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

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

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

基本用法

1. 初始化 Odoo 客户端

在使用 odoo_provider_builder 之前,你需要初始化一个 Odoo 客户端。通常,你可以在应用的 main.dart 文件中进行初始化:

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

void main() {
  final odooClient = OdooClient(
    baseUrl: 'https://your-odoo-instance.com',
    database: 'your_database',
    username: 'your_username',
    password: 'your_password',
  );

  runApp(
    OdooProvider(
      client: odooClient,
      child: MyApp(),
    ),
  );
}

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

2. 使用 OdooProvider 访问 Odoo 数据

在需要使用 Odoo 数据的页面中,你可以通过 OdooProvider 来访问 Odoo 客户端,并调用相应的方法。

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final odooProvider = OdooProvider.of(context);

    return Scaffold(
      appBar: AppBar(
        title: Text('Odoo Integration'),
      ),
      body: FutureBuilder(
        future: odooProvider.client.searchRead(
          model: 'res.partner',
          domain: [],
          fields: ['name', 'email'],
        ),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('Error: ${snapshot.error}'));
          } else {
            final records = snapshot.data;
            return ListView.builder(
              itemCount: records.length,
              itemBuilder: (context, index) {
                final record = records[index];
                return ListTile(
                  title: Text(record['name']),
                  subtitle: Text(record['email']),
                );
              },
            );
          }
        },
      ),
    );
  }
}

3. 调用 Odoo 模型方法

你可以使用 OdooProvider 来调用 Odoo 模型的方法。例如,创建一个新的合作伙伴记录:

void createPartner(BuildContext context) async {
  final odooProvider = OdooProvider.of(context);
  final result = await odooProvider.client.create(
    model: 'res.partner',
    values: {
      'name': 'New Partner',
      'email': 'new.partner@example.com',
    },
  );

  if (result != null) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Partner created successfully!')),
    );
  } else {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Failed to create partner.')),
    );
  }
}

高级用法

1. 使用 OdooModel 进行数据绑定

odoo_provider_builder 提供了 OdooModel 类,用于将 Odoo 模型与 Flutter 组件进行绑定。你可以通过继承 OdooModel 来创建自定义的模型类。

class PartnerModel extends OdooModel {
  PartnerModel(OdooClient client) : super(client, model: 'res.partner');

  Future<List<dynamic>> getPartners() async {
    return await searchRead(domain: [], fields: ['name', 'email']);
  }

  Future<dynamic> createPartner(Map<String, dynamic> values) async {
    return await create(values: values);
  }
}

然后在 OdooProvider 中注册这个模型:

OdooProvider(
  client: odooClient,
  models: {
    'partner': PartnerModel(odooClient),
  },
  child: MyApp(),
);

在页面中使用这个模型:

final partnerModel = OdooProvider.of(context).getModel<PartnerModel>('partner');

2. 使用 OdooBuilder 进行数据绑定

OdooBuilder 是一个方便的 Widget,用于在 Odoo 数据发生变化时自动重建 UI。

OdooBuilder<PartnerModel>(
  model: 'partner',
  builder: (context, model) {
    return FutureBuilder(
      future: model.getPartners(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        } else if (snapshot.hasError) {
          return Center(child: Text('Error: ${snapshot.error}'));
        } else {
          final records = snapshot.data;
          return ListView.builder(
            itemCount: records.length,
            itemBuilder: (context, index) {
              final record = records[index];
              return ListTile(
                title: Text(record['name']),
                subtitle: Text(record['email']),
              );
            },
          );
        }
      },
    );
  },
);
回到顶部