odoo_view_builder_flutter
A professional visual drag-and-drop editor for generating Odoo XML views โ Form, Tree, and Kanban โ built with Flutter and running on every platform.
โจ Features
| Category | What you get |
|---|---|
| ๐จ Visual Editor | Drag fields from a typed palette onto a live canvas; organise into groups and notebook pages |
| ๐ณ All View Types | Form ยท Tree (List) ยท Kanban โ each with a dedicated editor |
| ๐ Live XML Preview | Syntax-highlighted XML updates in real time as you build |
| โ Validation | Field name rules, XML structure checks, Odoo 14โ18 compatibility warnings |
| ๐ค Multi-Platform Export | Download file ยท Copy to clipboard ยท Native share sheet ยท Web blob download |
| ๐ฅ Import XML | Parse existing Odoo XML back into the visual editor |
| ๐ Template Library | 10 built-in templates for common models (partner, sale order, product โฆ) |
| ๐ Odoo API Connect | Fetch live field definitions directly from a running Odoo instance |
| โฉ Undo / Redo | 50-step history across all edit actions |
| ๐พ Local Persistence | Views auto-saved to SQLite; settings in SharedPreferences |
| ๐ Analytics | Firebase-ready analytics service (works without Firebase too) |
| ๐ Crash Reporting | Crashlytics-ready crash reporter with local log fallback |
๐ธ Screenshots
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โฌ
Back Custom Partner Form (res.partner) </> Export โ
โโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโค
โ FIELD TYPES โ CANVAS โ PROPERTIES โ
โ โ โ โ
โ [Aa] Text โ โโ group: General Info โโโโโโโโ Field: name โ
โ [#] Integer โ โ [name*] [phone] โโ Label: Name โ
โ [.] Float โ โ [email] [website] โโ Widget: char โ
โ [โ] Boolean โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Required: โ โ
โ [๐
] Date โ โ Readonly: โ โ
โ [๐] DateTimeโ โโ group: Address โโโโโโโโโโโโโ Colspan: 1 โ
โ [ยถ] Text โ โ [street] โโ โ
โ [<>] HTML โ โ [city] [zip] โโ โโโโโโโโโโโโโโโ โ
โ [๐] File โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ + Add widget โ
โ [โพ] Select โ โ โ
โ [โ] Many2One โ โ Drop field here โ โ
โ [โฎ] Many2M โ โ โ
โ [โก] One2Many โ โ โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโ
๐ Quick Start
Prerequisites
- Flutter SDK โฅ 3.10.0
- Dart SDK โฅ 3.0.0
Install
git clone https://github.com/Brah-Timo/odoo_view_builder_flutter.git
cd odoo_view_builder_flutter
flutter pub get
Run
# Android
flutter run -d android
# iOS
flutter run -d ios
# Web
flutter run -d chrome
# Desktop
flutter run -d macos # or windows / linux
For detailed platform-specific setup (entitlements, permissions, Firebase) see doc/setup.md.
๐ฆ Output Format
Every exported view is a standard Odoo module XML file that you can drop
directly into your module/views/ folder:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generated by Odoo View Builder -->
<odoo>
<data>
<record id="view_partner_form_custom" model="ir.ui.view">
<field name="name">res.partner.form.custom</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<form>
<group string="General Info">
<field name="name" required="1"/>
<field name="email" widget="email"/>
<field name="phone" widget="phone"/>
</group>
<group string="Address">
<field name="street"/>
<field name="city"/>
<field name="zip"/>
</group>
</form>
</field>
</record>
</data>
</odoo>
๐ Architecture
The app follows Clean Architecture with three layers:
Presentation โ Domain โ Data
(Riverpod) (UseCases) (sqflite / SharedPrefs / OdooAPI)
State management uses Riverpod 2 (StateNotifierProvider) throughout.
XML generation is handled by the xml package's XmlBuilder API โ
never string concatenation.
โ Full architecture details: doc/architecture.md
๐งฉ Supported Odoo Versions
| Odoo | Form | Tree | Kanban | Notes |
|---|---|---|---|---|
| 14.0 | โ | โ | โ | <sheet> recommended |
| 15.0 | โ | โ | โ | |
| 16.0 | โ | โ | โ | |
| 17.0 | โ | โ | โ | attrs/states removed |
| 18.0 | โ | โ | โ | <list> preferred |
The compatibility validator flags issues when you switch the target version in Settings โ Odoo Target Version.
๐ Documentation
| Document | Description |
|---|---|
| doc/architecture.md | Layer design, data flow, key decisions |
| doc/setup.md | Dev environment & platform-specific setup |
| doc/usage_guide.md | End-user walkthrough of all features |
| doc/api_reference.md | Complete public API reference |
| doc/contributing.md | How to contribute, coding standards, PR process |
| doc/changelog_detail.md | Extended technical changelogs |
| doc/roadmap.md | Planned features and version targets |
| CHANGELOG.md | Concise version history |
๐ Key Dependencies
| Package | Purpose |
|---|---|
flutter_riverpod ^2.4.9 |
State management |
xml ^6.4.2 |
XML generation and parsing |
sqflite ^2.3.2 |
Local SQLite database |
shared_preferences ^2.2.2 |
User preferences |
path_provider ^2.1.2 |
Platform file paths |
dio ^5.4.1 ยท http ^1.2.0 |
Odoo JSON-RPC API |
share_plus ^7.2.2 |
Native share sheet |
universal_html ^2.2.4 |
Web blob download |
flutter_highlight ^0.7.0 |
XML syntax highlighting |
uuid ^4.3.3 |
Unique ID generation |
intl ^0.19.0 |
Formatting |
logging ^1.2.0 |
Structured logging |
Full dependency list: pubspec.yaml
๐ค Contributing
Contributions are welcome! Please read doc/contributing.md before opening a PR.
# Fork & clone
git clone https://github.com/Brah-Timo/odoo_view_builder_flutter.git
# Create a feature branch
git checkout -b feature/your-feature develop
# Implement, test, lint
flutter test && flutter analyze
# Open a PR targeting `develop`
๐บ Roadmap
See doc/roadmap.md for the full roadmap.
Highlights planned for v1.1.0:
- Search view type editor
<notebook>/<page>visual layout in the form canvas- Inline domain/filter builder
- Compatibility validator in the export flow
๐ License
This project is licensed under the MIT License โ see LICENSE for details.
๐ Acknowledgements
- Odoo โ for the open-source ERP platform and XML view specification.
- Flutter & the Dart team โ for the cross-platform framework.
- Riverpod by Remi Rousselet โ for the excellent state management solution.
- All contributors and testers who helped shape the editor.
Libraries
- app
- config/app_config
- config/constants
- config/theme
- data/local_storage/local_database_helper
- data/models/odoo_field
- data/models/odoo_form
- data/models/odoo_group
- data/models/odoo_kanban_view
- data/models/odoo_tree_view
- data/models/view_template
- data/repositories/field_repository
- data/repositories/view_repository
- data/repositories/xml_generator_repository
- domain/entities/view_entity
- domain/usecases/create_view_usecase
- domain/usecases/export_xml_usecase
- domain/usecases/import_xml_usecase
- domain/usecases/validate_view_usecase
- main
- presentation/notifiers/editor_notifier
- presentation/notifiers/field_notifier
- presentation/notifiers/view_notifier
- presentation/providers/editor_state_provider
- presentation/providers/field_provider
- presentation/providers/settings_provider
- presentation/providers/view_provider
- presentation/providers/xml_generator_provider
- presentation/screens/editor_screen
- presentation/screens/export_screen
- presentation/screens/form_editor_screen
- presentation/screens/home_screen
- presentation/screens/kanban_editor_screen
- presentation/screens/settings_screen
- presentation/screens/template_library_screen
- presentation/screens/tree_editor_screen
- presentation/widgets/common/custom_appbar
- presentation/widgets/common/custom_dialog
- presentation/widgets/common/custom_textfield
- presentation/widgets/editor/canvas_area
- presentation/widgets/editor/draggable_field_widget
- presentation/widgets/editor/draggable_group_widget
- presentation/widgets/editor/drop_target_zone
- presentation/widgets/editor/field_palette
- presentation/widgets/editor/field_properties_panel
- presentation/widgets/editor/group_properties_panel
- presentation/widgets/editor/layout_builder_widget
- presentation/widgets/kanban/kanban_card_builder
- presentation/widgets/kanban/kanban_field_mapper
- presentation/widgets/tree_view/column_item_widget
- presentation/widgets/tree_view/column_properties_widget
- presentation/widgets/xml/xml_highlighter
- presentation/widgets/xml/xml_preview_widget
- services/analytics/analytics_service
- services/analytics/crash_reporter
- services/export/download_service
- services/export/download_service_stub
- services/export/download_service_web
- services/export/export_manager
- services/export/file_handler
- services/odoo/odoo_api_client
- services/odoo/odoo_field_service
- services/odoo/odoo_validation_rules
- services/xml/xml_formatter
- services/xml/xml_generator
- services/xml/xml_parser
- services/xml/xml_validator
- utils/extensions/list_extensions
- utils/extensions/string_extensions
- utils/extensions/widget_extensions
- utils/helpers/field_helper
- utils/helpers/formatting_helper
- utils/helpers/validation_helper
- utils/helpers/xml_helper
- utils/validators/field_name_validator
- utils/validators/odoo_compatibility_validator
- utils/validators/xml_structure_validator