Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev0.7.1

odoo_rpc

Biblioteca cliente RPC do Odoo para Dart com rastreamento de alterações na sessão por meio de fluxo.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
1,6 mil
Curtidas
73
Pontos Pub
150

Instalar pacote

flutter pub add odoo_rpc

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

O pacote odoo_rpc é uma biblioteca Dart que permite comunicação fluida com sistemas ERP Odoo usando RPC (Chamada Remota de Procedimento). Ele oferece suporte à gestão de sessões com rastreamento em tempo real por meio de streams, permitindo que desenvolvedores monitorem dinamicamente o status de autenticação e mudanças na sessão. Projetado para uso multiplataforma, funciona em Android, iOS, Web, macOS, Windows e Linux. O pacote simplifica a integração com os serviços de backend do Odoo, sendo ideal para criar aplicações nativas ou web que interagem com dados e fluxos de trabalho do Odoo.

Casos de uso

  • Integração de aplicativos Flutter com o Odoo ERP
  • Monitoramento em tempo real de sessões em aplicativos corporativos
  • Construindo ferramentas de CRM ou estoque com backend Odoo
  • Sincronizando dados entre aplicativos Flutter e Odoo
  • Automatizando operações do Odoo a partir de clientes móveis

Principais recursos

  • Rastreamento de alterações de sessão baseado em fluxo
  • Compatibilidade multiplataforma
  • Comunicação RPC segura com o Odoo
  • Suporte para autenticação e persistência de sessão
  • Configuração fácil por meio do comando Flutter pub add

Indicado para

  • Desenvolvedores Flutter construindo aplicativos integrados a ERP
  • Equipes de aplicativos empresariais usando o Odoo como backend
  • Desenvolvedores que precisam de atualizações em tempo real da sessão
  • Aplicativos móveis e de desktop que exigem conectividade com o Odoo
  • Equipes trabalhando em soluções empresariais baseadas no Odoo

Considerações

  • Requer um servidor Odoo ativo com RPC habilitado
  • A configuração de autenticação deve ser tratada com cuidado
  • Documentação limitada além do uso básico
  • Depende de conexão de rede estável com o Odoo
  • Não adequado para integrações não Odoo

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

Odoo RPC Client Library

Odoo RPC Client Library for Dart.

Features

  • Initialize client with previously stored Odoo Session.
  • Authenticate via database name, login and password.
  • Issue JSON-RPC requests to JSON controllers.
  • Execute public methods via CallKw.
  • Get Odoo Session updates via stream.
  • Terminate session (logout).
  • Catch exceptions when session expires.

Usage

To use this plugin, add odoo_rpc as a dependency in your pubspec.yaml file. For example:

dependencies:
  odoo_rpc: <latest_version>

Examples

Basic RPC-call

import 'dart:io';
import 'package:odoo_rpc/odoo_rpc.dart'

main() async {
  final client = OdooClient('https://my-db.odoo.com');
  try {
    await client.authenticate('my-db', 'admin', 'admin');
    final res = await client.callRPC('/web/session/modules', 'call', {});
    print('Installed modules: \n' + res.toString());
  } on OdooException catch (e) {
    print(e);
    client.close();
    exit(-1);
  }
  client.close();
}

RPC-Calls with tracking session changes. Odoo server will issue new session_id on each call.

import 'dart:io';
import 'package:odoo_rpc/odoo_rpc.dart'


sessionChanged(OdooSession sessionId) async {
  print('We got new session ID: ' + sessionId.id);
  store_session_somehow(sessionId);
}


main() async {
  var prev_session = restore_session_somehow();
  var client = OdooClient("https://my-db.odoo.com", sessionId: prev_session);

  // Subscribe to session changes to store most recent one
  var subscription = client.sessionStream.listen(sessionChanged);

  try {
    final session = await client.authenticate('my-db', 'admin', 'admin');
    var res = await client.callRPC('/web/session/modules', 'call', {});
    print('Installed modules: \n' + res.toString());

    // logout
    await client.destroySession();
  } on OdooException catch (e) {
    print(e);
    subscription.cancel();
    client.close();
    exit(-1);
  }

  try {
    await client.checkSession();
  } on OdooSessionExpiredException {
    print('Session expired');
  }

  subscription.cancel();
  client.close();
}

Flutter example using FutureBuilder.

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

final orpc = OdooClient('https://my-odoo-instance.com');
void main() async {
  await orpc.authenticate('odoo-db', 'admin', 'admin');
  runApp(MyApp());
}

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

class HomePage extends StatelessWidget {
  Future<dynamic> fetchContacts() {
    return orpc.callKw({
      'model': 'res.partner',
      'method': 'search_read',
      'args': [],
      'kwargs': {
        'context': {'bin_size': true},
        'domain': [],
        'fields': ['id', 'name', 'email', '__last_update', 'image_128'],
        'limit': 80,
      },
    });
  }

  Widget buildListItem(Map<String, dynamic> record) {
    var unique = record['__last_update'] as String;
    unique = unique.replaceAll(RegExp(r'[^0-9]'), '');
    final avatarUrl =
        '${orpc.baseURL}/web/image?model=res.partner&field=image_128&id=${record["id"]}&unique=$unique';
    return ListTile(
      leading: CircleAvatar(backgroundImage: NetworkImage(avatarUrl)),
      title: Text(record['name']),
      subtitle: Text(record['email'] is String ? record['email'] : ''),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contacts'),
      ),
      body: Center(
        child: FutureBuilder(
            future: fetchContacts(),
            builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
              if (snapshot.hasData) {
                return ListView.builder(
                    itemCount: snapshot.data.length,
                    itemBuilder: (context, index) {
                      final record =
                          snapshot.data[index] as Map<String, dynamic>;
                      return buildListItem(record);
                    });
              } else {
                if (snapshot.hasError) return Text('Unable to fetch data');
                return CircularProgressIndicator();
              }
            }),
      ),
    );
  }
}

For more complex usage consider odoo_repository as abstraction layer between your flutter app and Odoo backend.

Web platform notice

This package intentionally uses http package instead of dart:io so web platform could be supported. However RPC calls via web client (dart js) that is hosted on separate domain will not work due to CORS requests currently are not correctly handled by Odoo. See https://github.com/odoo/odoo/pull/37853 for the details.

To make it work from different host we must follow the rules of CORS. Make sure your odoo server has these CORS headers:

Access-Control-Allow-Methods: GET, OPTIONS, PUT, POST
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Origin: https://{YOUR_FLUTTER_APP_DOMAIN}
Access-Control-Allow-Credentials: true // This is super important

And for WebApp you must use BrowserClient or something similar. The withCredentials = true is crucial. It allows the httpClient to carry on cookies from Browser. On Web browser, it won't allow you to directly access set-cookie header. As it is a forbidden header: https://fetch.spec.whatwg.org/#forbidden-request-header But it will automatically add this cookie to the BrowserClient whenever you make rpc call to your odoo server once authenticated.

OdooClient(BASE_URL,
  sessionId: ODOO_SESSION,
  httpClient: BrowserClient()..withCredentials = true,
  isWebPlatform = true,
)

For Web always listen to loginStream stream in order to get if user logged in or logged out. As session_id will be unaccesible on Web platform.

Issues

Please file any issues, bugs or feature requests as an issue on our GitHub page.

Want to contribute

If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please send us your pull request.

Author

Odoo RPC Client Library is developed by ERP Ukraine.

Categorias

Dependências

Lista de dependências 2 itens

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.