A Flutter desktop application for defining fuzzy logic parameters as a directed acyclic graph (DAG), creating fuzzy objects with specific values, and comparing multiple objects with visual result trees.
- DAG Parameter Structure — Parameters can contribute to multiple other parameters (not just a tree). Cycle detection prevents circular dependencies.
- Fuzzy Objects — Create multiple objects and assign values to each leaf parameter
- Visual Comparison — Select 2+ objects and compare them; results displayed in a color-coded tree overlay
- JSON Persistence — Save and load projects as JSON files
- Close Warning — Warns before closing if there are unsaved changes
- Cross-Platform — Supports Linux desktop, Android, and web
Launcher Screen — Create a new project or open an existing JSON file
Main Editor — Split-screen layout with parameter list (left) and fuzzy object editor (right)
Comparison Result — Floating overlay showing computed scores per parameter
-
Create a Project
- Launch the app and click "New Project"
- Enter a project name
- A root parameter is automatically created with the project name
-
Define Parameters (Left Panel)
- Click the + button to add new parameters
- Each parameter shows its weight, aggregation method, and optional max value
- Click "Add Contributor" to link an existing parameter as an input
- Click the edit icon to adjust name, weight, aggregation, and max value
- Click the delete icon to remove a parameter
- Root parameters (those with no parents) don't have weight — they are final outputs
-
Add Fuzzy Objects (Right Panel)
- Click the + button to add a new fuzzy object
- Select an object from the list to edit its values
- Use sliders to set values (0-1) for each leaf parameter
- If a max value is set, the display shows normalized values
-
Compare Objects
- Check the checkbox next to 2 or more objects
- Click the Compare button
- View the color-coded result tree showing computed scores
-
Save Your Work
- Ctrl+S — Save (overwrite current file)
- Save As... — Save to a new file
- Open Another Project — Switch to a different JSON file without restarting
{
"name": "My Project",
"parameters": [
{
"id": "...",
"name": "Quality",
"weight": 1.0,
"aggregation": "avg",
"contributorIds": ["durability-id", "comfort-id"]
},
{
"id": "durability-id",
"name": "Durability",
"weight": 0.8,
"aggregation": "avg",
"contributorIds": [],
"maxValue": 100
}
],
"fuzzyObjects": [
{
"id": "...",
"name": "Product A",
"values": {
"durability-id": 0.85
}
}
]
}flutter run -d linuxflutter run -d androidflutter run -d chromeflutter build linux
flutter build apk
flutter build weblib/
├── main.dart # App entry point
├── models/
│ ├── project.dart # Project data model
│ ├── parameter.dart # Parameter node (DAG)
│ └── fuzzy_object.dart # Fuzzy object with values
├── controllers/
│ └── project_controller.dart # State management (ChangeNotifier)
├── services/
│ └── json_storage.dart # File open/save logic
├── screens/
│ ├── launcher_screen.dart # New / Open project
│ ├── main_editor_screen.dart # Split-screen editor
│ ├── comparison_overlay.dart # Comparison result dialog
│ └── settings_screen.dart # App settings & help
└── widgets/
├── parameter_list.dart # Editable parameter list (DAG)
├── fuzzy_object_editor.dart # Value editor with sliders
└── result_tree.dart # Color-coded result tree
provider— State managementfile_selector— Native file dialogspackage_info_plus— App version displaypath_provider— Default directorieswindow_manager— Desktop window management (close warning)uuid— Unique IDs for parameters and objects
This project is licensed under the BSD-3 License. See LICENSE for details.