appiq-solution 1.3.3 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/#Tools/APPIQ-METHOD/.bmad-config.json +13 -0
- package/#Tools/APPIQ-METHOD/.cursor/commands/analyze.md +27 -0
- package/#Tools/APPIQ-METHOD/.cursor/commands/appiq.md +27 -0
- package/#Tools/APPIQ-METHOD/.cursor/commands/help.md +27 -0
- package/#Tools/APPIQ-METHOD/.cursor/commands/story.md +27 -0
- package/#Tools/APPIQ-METHOD/CHANGELOG.md +119 -173
- package/#Tools/APPIQ-METHOD/DEVELOPMENT_GUIDE.md +855 -0
- package/#Tools/APPIQ-METHOD/NPM-README.md +138 -0
- package/#Tools/APPIQ-METHOD/SMART_WORKFLOW_GUIDE.md +401 -0
- package/#Tools/APPIQ-METHOD/activate-appiq.js +81 -0
- package/#Tools/APPIQ-METHOD/appiq-solution/README.md +226 -0
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-flutter-mobile.yaml +114 -0
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-fullstack.yaml +11 -1
- package/#Tools/APPIQ-METHOD/bmad-core/agents/analyst.md +7 -3
- package/#Tools/APPIQ-METHOD/bmad-core/agents/architect.md +6 -0
- package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-orchestrator.md +0 -84
- package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-smart-launcher.md +170 -0
- package/#Tools/APPIQ-METHOD/bmad-core/agents/dev.md +31 -12
- package/#Tools/APPIQ-METHOD/bmad-core/agents/pm.md +10 -4
- package/#Tools/APPIQ-METHOD/bmad-core/agents/qa.md +17 -0
- package/#Tools/APPIQ-METHOD/bmad-core/agents/sm.md +8 -3
- package/#Tools/APPIQ-METHOD/bmad-core/agents/ux-expert.md +8 -3
- package/#Tools/APPIQ-METHOD/bmad-core/bmad-core/user-guide.md +0 -0
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/security-validation-checklist.md +332 -0
- package/#Tools/APPIQ-METHOD/bmad-core/data/backend-services-integration.md +686 -0
- package/#Tools/APPIQ-METHOD/bmad-core/data/shadcn-ui-integration.md +388 -0
- package/#Tools/APPIQ-METHOD/bmad-core/data/technical-preferences.md +147 -1
- package/#Tools/APPIQ-METHOD/bmad-core/enhanced-ide-development-workflow.md +43 -0
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-flutter-story.md +197 -0
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/intelligent-epic-creation.md +234 -0
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/smart-project-analysis.md +289 -0
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-mobile-prd-tmpl.yaml +330 -0
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-story-tmpl.yaml +376 -0
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-ui-spec-tmpl.yaml +415 -0
- package/#Tools/APPIQ-METHOD/bmad-core/templates/fullstack-architecture-tmpl.yaml +12 -5
- package/#Tools/APPIQ-METHOD/bmad-core/user-guide.md +10 -9
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/brownfield-fullstack.yaml +15 -1
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/greenfield-fullstack.yaml +49 -5
- package/#Tools/APPIQ-METHOD/bmad-core/working-in-the-brownfield.md +56 -44
- package/#Tools/APPIQ-METHOD/commands/README.md +28 -0
- package/#Tools/APPIQ-METHOD/commands/analyze.md +27 -0
- package/#Tools/APPIQ-METHOD/commands/appiq.md +27 -0
- package/#Tools/APPIQ-METHOD/commands/help.md +27 -0
- package/#Tools/APPIQ-METHOD/commands/story.md +27 -0
- package/#Tools/APPIQ-METHOD/dist/agents/bmad-orchestrator.txt +0 -111
- package/#Tools/APPIQ-METHOD/dist/agents/pm.txt +2 -0
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -111
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -111
- package/#Tools/APPIQ-METHOD/dist/teams/team-all.txt +2 -111
- package/#Tools/APPIQ-METHOD/dist/teams/team-fullstack.txt +2 -111
- package/#Tools/APPIQ-METHOD/dist/teams/team-ide-minimal.txt +0 -111
- package/#Tools/APPIQ-METHOD/dist/teams/team-no-ui.txt +2 -111
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +1 -1
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-2d-unity-game-dev/config.yaml +1 -1
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agent-teams/flutter-mobile-team.yaml +23 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-cubit-agent.md +133 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-data-agent.md +160 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-domain-agent.md +153 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-ui-agent.md +122 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/shared-components-agent.md +161 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/checklists/flutter-story-dod-checklist.md +194 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/config.yaml +41 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/data/flutter-development-guidelines.md +551 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/templates/flutter-mobile-architecture-tmpl.yaml +530 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/workflows/flutter-ui-first-development.yaml +220 -0
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-infrastructure-devops/config.yaml +1 -1
- package/#Tools/APPIQ-METHOD/install-appiq.sh +41 -0
- package/#Tools/APPIQ-METHOD/package-lock.json +631 -0
- package/#Tools/APPIQ-METHOD/package.json +20 -69
- package/#Tools/APPIQ-METHOD/tasks/todo.md +275 -0
- package/#Tools/APPIQ-METHOD/tools/appiq-installer.js +2714 -0
- package/#Tools/APPIQ-METHOD/tools/bmad-npx-wrapper.js +5 -7
- package/#Tools/APPIQ-METHOD/tools/cli.js +3 -3
- package/#Tools/APPIQ-METHOD/tools/epic-solution-installer.js +538 -0
- package/#Tools/APPIQ-METHOD/tools/flattener/main.js +570 -0
- package/#Tools/APPIQ-METHOD/tools/installer/bin/bmad.js +15 -14
- package/#Tools/APPIQ-METHOD/tools/installer/lib/installer.js +28 -2
- package/#Tools/APPIQ-METHOD/tools/installer/package-lock.json +906 -0
- package/#Tools/APPIQ-METHOD/tools/installer/package.json +1 -1
- package/#Tools/APPIQ-METHOD/tools/setup-ide-commands.js +345 -0
- package/#Tools/APPIQ-METHOD/tools/smart-installer.js +589 -0
- package/package.json +20 -69
- package/tools/appiq-installer.js +2714 -0
- package/tools/bmad-npx-wrapper.js +5 -7
- package/tools/cli.js +3 -3
- package/tools/epic-solution-installer.js +538 -0
- package/tools/flattener/main.js +570 -0
- package/tools/installer/bin/bmad.js +15 -14
- package/tools/installer/lib/installer.js +28 -2
- package/tools/installer/package-lock.json +89 -89
- package/tools/installer/package.json +1 -1
- package/tools/setup-ide-commands.js +345 -0
- package/tools/smart-installer.js +589 -0
- package/#Tools/APPIQ-METHOD/appiq_start.md +0 -232
- package/#Tools/APPIQ-METHOD/deployment/DEPLOYMENT_GUIDE.md +0 -426
- package/#Tools/APPIQ-METHOD/deployment/GITHUB_RELEASE_GUIDE.md +0 -326
- package/#Tools/APPIQ-METHOD/deployment/README.md +0 -331
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-all.yaml +0 -14
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-fullstack.yaml +0 -18
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-no-ui.yaml +0 -13
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/analyst.md +0 -81
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/architect.md +0 -84
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/bmad-master.md +0 -108
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/bmad-orchestrator.md +0 -234
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/dev.md +0 -76
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/pm.md +0 -79
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/po.md +0 -76
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/qa.md +0 -69
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/sm.md +0 -62
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/ux-expert.md +0 -66
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/architect-checklist.md +0 -443
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/change-checklist.md +0 -182
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/pm-checklist.md +0 -375
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/po-master-checklist.md +0 -441
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/story-dod-checklist.md +0 -101
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/story-draft-checklist.md +0 -156
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/bmad-kb.md +0 -803
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/brainstorming-techniques.md +0 -36
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/elicitation-methods.md +0 -134
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/technical-preferences.md +0 -3
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/brownfield-create-epic.md +0 -160
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/brownfield-create-story.md +0 -147
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/correct-course.md +0 -70
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-brownfield-story.md +0 -304
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-deep-research-prompt.md +0 -289
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-next-story.md +0 -112
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/document-project.md +0 -341
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/index-docs.md +0 -179
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/kb-mode-interaction.md +0 -75
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/review-story.md +0 -145
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/shard-doc.md +0 -187
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/validate-next-story.md +0 -134
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/architecture-tmpl.yaml +0 -650
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -805
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/market-research-tmpl.yaml +0 -252
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/prd-tmpl.yaml +0 -202
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/project-brief-tmpl.yaml +0 -221
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/story-tmpl.yaml +0 -137
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/user-guide.md +0 -250
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-service.yaml +0 -187
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-ui.yaml +0 -197
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-service.yaml +0 -206
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-ui.yaml +0 -235
- package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/working-in-the-brownfield.md +0 -361
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/README.md +0 -3
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -254
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -651
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -111
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -308
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -396
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -132
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -776
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -590
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -111
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -151
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -308
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -160
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -154
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-cross-platform.yaml +0 -22
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-flutter.yaml +0 -20
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-minimal.yaml +0 -13
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-react-native.yaml +0 -20
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.md +0 -1487
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.md +0 -279
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.md +0 -649
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.md +0 -339
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.md +0 -622
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.md +0 -1027
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.md +0 -1451
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/checklists/mobile-development-checklist.md +0 -490
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/config.yaml +0 -54
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/data/bmad-kb.md +0 -292
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/data/flutter-development-guidelines.md +0 -483
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/tasks/existing-app-analysis.md +0 -645
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/tasks/platform-selection.md +0 -489
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/templates/mobile-architecture-tmpl.yaml +0 -437
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/templates/mobile-prd-tmpl.yaml +0 -408
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-app-development-init.yaml +0 -555
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-flutter.yaml +0 -336
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-react-native.yaml +0 -345
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-flutter.yaml +0 -281
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-react-native.yaml +0 -283
- package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-platform-selection.yaml +0 -404
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/appiq.md +0 -273
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/claude-appiq.md +0 -294
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/cursor-appiq.md +0 -516
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/universal-appiq.md +0 -448
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/windsurf-appiq.md +0 -698
- package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/start.md +0 -211
- package/#Tools/APPIQ-METHOD/deployment/build-release.sh +0 -449
- package/#Tools/APPIQ-METHOD/deployment/create-release.sh +0 -196
- package/#Tools/APPIQ-METHOD/deployment/dist/appiq_installer.sh +0 -678
- package/#Tools/APPIQ-METHOD/deployment/docs/main_prd.md +0 -36
- package/#Tools/APPIQ-METHOD/deployment/init_appiq.sh +0 -805
- package/#Tools/APPIQ-METHOD/deployment/init_appiq_v2.sh +0 -678
- package/#Tools/APPIQ-METHOD/deployment/installers/appiq-global.sh +0 -91
- package/#Tools/APPIQ-METHOD/deployment/installers/claude-integration.sh +0 -281
- package/#Tools/APPIQ-METHOD/deployment/installers/cursor-integration.sh +0 -257
- package/#Tools/APPIQ-METHOD/deployment/installers/terminal-integration.sh +0 -645
- package/#Tools/APPIQ-METHOD/deployment/installers/windsurf-integration.sh +0 -350
- package/#Tools/APPIQ-METHOD/deployment/package-v2.sh +0 -97
- package/#Tools/APPIQ-METHOD/deployment/package.sh +0 -363
- package/#Tools/APPIQ-METHOD/deployment/quick-install.sh +0 -57
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.txt +0 -1530
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.txt +0 -322
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.txt +0 -692
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.txt +0 -382
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.txt +0 -665
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.txt +0 -1070
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.txt +0 -1494
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/teams/mobile-team-cross-platform.txt +0 -15613
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-cross-platform.yaml +0 -22
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-flutter.yaml +0 -20
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-minimal.yaml +0 -13
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-react-native.yaml +0 -20
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.md +0 -1487
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.md +0 -279
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.md +0 -649
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.md +0 -339
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.md +0 -622
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.md +0 -1027
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.md +0 -1451
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/checklists/mobile-development-checklist.md +0 -490
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/config.yaml +0 -54
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/data/bmad-kb.md +0 -292
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/data/flutter-development-guidelines.md +0 -483
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/tasks/existing-app-analysis.md +0 -645
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/tasks/platform-selection.md +0 -489
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/templates/mobile-architecture-tmpl.yaml +0 -437
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/templates/mobile-prd-tmpl.yaml +0 -408
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-app-development-init.yaml +0 -555
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-flutter.yaml +0 -336
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-react-native.yaml +0 -345
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-flutter.yaml +0 -281
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-react-native.yaml +0 -283
- package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-platform-selection.yaml +0 -404
- package/#Tools/APPIQ-METHOD/package-bmad-backup.json +0 -78
- package/#Tools/APPIQ-METHOD/slash-commands/appiq.md +0 -273
- package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/claude-appiq.md +0 -294
- package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/cursor-appiq.md +0 -516
- package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/universal-appiq.md +0 -448
- package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/windsurf-appiq.md +0 -698
- package/#Tools/APPIQ-METHOD/slash-commands/start.md +0 -211
- /package/#Tools/APPIQ-METHOD/{deployment/build/bmad-core/core-config.yaml → bmad-core/core-config.yaml.bak} +0 -0
@@ -0,0 +1,551 @@
|
|
1
|
+
# Flutter Clean Architecture Development Guidelines
|
2
|
+
|
3
|
+
## 📋 Project Overview
|
4
|
+
|
5
|
+
This guide establishes comprehensive Flutter development standards following Clean Architecture principles, ensuring scalable, testable, and maintainable mobile applications.
|
6
|
+
|
7
|
+
## 🏗️ Architecture Overview
|
8
|
+
|
9
|
+
### Clean Architecture Layers
|
10
|
+
|
11
|
+
```
|
12
|
+
lib/
|
13
|
+
├── core/ # Shared Core Functionality
|
14
|
+
│ ├── constants/ # API endpoints, app constants
|
15
|
+
│ ├── di/ # Dependency injection setup
|
16
|
+
│ ├── error/ # Error handling (failures, exceptions)
|
17
|
+
│ ├── network/ # Networking setup (API client, network info)
|
18
|
+
│ ├── local_storage/ # Hive/SharedPrefs service for local storage
|
19
|
+
│ └── utils/ # Core utilities and helpers
|
20
|
+
├── features/ # Feature-based modules
|
21
|
+
│ └── [feature_name]/ # Individual features
|
22
|
+
│ ├── data/ # Data layer
|
23
|
+
│ │ ├── datasources/ # Remote/Local data sources
|
24
|
+
│ │ ├── models/ # Data models with JSON serialization
|
25
|
+
│ │ └── repositories/ # Repository implementations
|
26
|
+
│ ├── domain/ # Domain layer (Business Logic)
|
27
|
+
│ │ ├── entities/ # Business entities
|
28
|
+
│ │ ├── repositories/ # Repository interfaces
|
29
|
+
│ │ └── usecases/ # Business use cases
|
30
|
+
│ └── presentation/ # Presentation layer (UI)
|
31
|
+
│ ├── cubit/ # State management (Cubit + State)
|
32
|
+
│ ├── pages/ # UI pages/screens
|
33
|
+
│ └── widgets/ # Feature-specific widgets
|
34
|
+
├── shared/ # Shared UI components and utilities
|
35
|
+
│ ├── theme/ # Theme management
|
36
|
+
│ ├── widgets/ # Reusable widgets (BaseScaffold, etc.)
|
37
|
+
│ ├── constants/ # UI constants
|
38
|
+
│ └── utils/ # Shared utilities
|
39
|
+
└── l10n/ # Localization files (.arb)
|
40
|
+
```
|
41
|
+
|
42
|
+
## 🎯 Development Patterns & Style Guide
|
43
|
+
|
44
|
+
### 1. Entity Pattern (Domain Layer)
|
45
|
+
|
46
|
+
**Struktur:**
|
47
|
+
- Extends `Equatable` für Value Equality
|
48
|
+
- Immutable mit `const` Konstruktoren
|
49
|
+
- `copyWith` Methoden für Updates
|
50
|
+
- Alle Properties in `props` Liste
|
51
|
+
|
52
|
+
```dart
|
53
|
+
class UserEntity extends Equatable {
|
54
|
+
const UserEntity({
|
55
|
+
required this.id,
|
56
|
+
required this.name,
|
57
|
+
required this.email,
|
58
|
+
this.bio,
|
59
|
+
this.avatarUrl,
|
60
|
+
this.createdAt,
|
61
|
+
this.updatedAt,
|
62
|
+
});
|
63
|
+
|
64
|
+
final String id;
|
65
|
+
final String name;
|
66
|
+
final String email;
|
67
|
+
final String? bio;
|
68
|
+
final String? avatarUrl;
|
69
|
+
final DateTime? createdAt;
|
70
|
+
final DateTime? updatedAt;
|
71
|
+
|
72
|
+
@override
|
73
|
+
List<Object?> get props => [
|
74
|
+
id, name, email, bio, avatarUrl, createdAt, updatedAt,
|
75
|
+
];
|
76
|
+
|
77
|
+
UserEntity copyWith({
|
78
|
+
String? id,
|
79
|
+
String? name,
|
80
|
+
String? email,
|
81
|
+
String? bio,
|
82
|
+
String? avatarUrl,
|
83
|
+
DateTime? createdAt,
|
84
|
+
DateTime? updatedAt,
|
85
|
+
}) {
|
86
|
+
return UserEntity(
|
87
|
+
id: id ?? this.id,
|
88
|
+
name: name ?? this.name,
|
89
|
+
email: email ?? this.email,
|
90
|
+
bio: bio ?? this.bio,
|
91
|
+
avatarUrl: avatarUrl ?? this.avatarUrl,
|
92
|
+
createdAt: createdAt ?? this.createdAt,
|
93
|
+
updatedAt: updatedAt ?? this.updatedAt,
|
94
|
+
);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
```
|
98
|
+
|
99
|
+
### 2. Model Pattern (Data Layer)
|
100
|
+
|
101
|
+
**Struktur:**
|
102
|
+
- `@freezed` Annotation für Immutability
|
103
|
+
- JSON Serialization mit `json_serializable`
|
104
|
+
- `@JsonKey` für API Field Mapping
|
105
|
+
- Extension Methods für Entity Conversion
|
106
|
+
|
107
|
+
```dart
|
108
|
+
import 'package:freezed_annotation/freezed_annotation.dart';
|
109
|
+
import '../../domain/entities/user_entity.dart';
|
110
|
+
|
111
|
+
part 'user_model.freezed.dart';
|
112
|
+
part 'user_model.g.dart';
|
113
|
+
|
114
|
+
@freezed
|
115
|
+
class UserModel with _$UserModel {
|
116
|
+
const factory UserModel({
|
117
|
+
required String id,
|
118
|
+
required String name,
|
119
|
+
required String email,
|
120
|
+
String? bio,
|
121
|
+
@JsonKey(name: 'avatar_url') String? avatarUrl,
|
122
|
+
@JsonKey(name: 'created_at') String? createdAt,
|
123
|
+
@JsonKey(name: 'updated_at') String? updatedAt,
|
124
|
+
}) = _UserModel;
|
125
|
+
|
126
|
+
factory UserModel.fromJson(Map<String, dynamic> json) =>
|
127
|
+
_$UserModelFromJson(json);
|
128
|
+
}
|
129
|
+
|
130
|
+
extension UserModelExtension on UserModel {
|
131
|
+
UserEntity toEntity() {
|
132
|
+
return UserEntity(
|
133
|
+
id: id,
|
134
|
+
name: name,
|
135
|
+
email: email,
|
136
|
+
bio: bio,
|
137
|
+
avatarUrl: avatarUrl,
|
138
|
+
createdAt: createdAt != null ? DateTime.tryParse(createdAt!) : null,
|
139
|
+
updatedAt: updatedAt != null ? DateTime.tryParse(updatedAt!) : null,
|
140
|
+
);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
```
|
144
|
+
|
145
|
+
### 3. Repository Pattern
|
146
|
+
|
147
|
+
**Interface (Domain Layer):**
|
148
|
+
```dart
|
149
|
+
import 'package:dartz/dartz.dart';
|
150
|
+
import '../../../../core/error/failures.dart';
|
151
|
+
import '../entities/user_entity.dart';
|
152
|
+
|
153
|
+
abstract class UserRepository {
|
154
|
+
Future<Either<Failure, List<UserEntity>>> getUsers();
|
155
|
+
Future<Either<Failure, UserEntity>> getUserById(String id);
|
156
|
+
Future<Either<Failure, UserEntity>> createUser(UserEntity user);
|
157
|
+
Future<Either<Failure, UserEntity>> updateUser(UserEntity user);
|
158
|
+
Future<Either<Failure, void>> deleteUser(String id);
|
159
|
+
Future<Either<Failure, List<UserEntity>>> searchUsers(String query);
|
160
|
+
}
|
161
|
+
```
|
162
|
+
|
163
|
+
### 4. UseCase Pattern
|
164
|
+
|
165
|
+
**Struktur:**
|
166
|
+
- `@injectable` für Dependency Injection
|
167
|
+
- `call` Methode als Main Entry Point
|
168
|
+
- Business Logic & Validation
|
169
|
+
- `Either<Failure, Success>` Return Type
|
170
|
+
|
171
|
+
```dart
|
172
|
+
import 'package:dartz/dartz.dart';
|
173
|
+
import 'package:injectable/injectable.dart';
|
174
|
+
import '../../../../core/error/failures.dart';
|
175
|
+
import '../entities/user_entity.dart';
|
176
|
+
import '../repositories/user_repository.dart';
|
177
|
+
|
178
|
+
@injectable
|
179
|
+
class CreateUserUseCase {
|
180
|
+
const CreateUserUseCase(this._repository);
|
181
|
+
|
182
|
+
final UserRepository _repository;
|
183
|
+
|
184
|
+
Future<Either<Failure, UserEntity>> call(UserEntity user) async {
|
185
|
+
// Validate user data
|
186
|
+
final validationResult = _validateUser(user);
|
187
|
+
if (validationResult != null) {
|
188
|
+
return Left(ValidationFailure(validationResult));
|
189
|
+
}
|
190
|
+
|
191
|
+
return await _repository.createUser(user);
|
192
|
+
}
|
193
|
+
|
194
|
+
String? _validateUser(UserEntity user) {
|
195
|
+
if (user.name.trim().isEmpty) {
|
196
|
+
return 'Name is required';
|
197
|
+
}
|
198
|
+
|
199
|
+
if (user.email.trim().isEmpty) {
|
200
|
+
return 'Email is required';
|
201
|
+
}
|
202
|
+
|
203
|
+
if (!_isValidEmail(user.email)) {
|
204
|
+
return 'Please enter a valid email address';
|
205
|
+
}
|
206
|
+
|
207
|
+
return null;
|
208
|
+
}
|
209
|
+
|
210
|
+
bool _isValidEmail(String email) {
|
211
|
+
return RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(email);
|
212
|
+
}
|
213
|
+
}
|
214
|
+
```
|
215
|
+
|
216
|
+
### 5. State Management Pattern (Cubit)
|
217
|
+
|
218
|
+
**State Class:**
|
219
|
+
```dart
|
220
|
+
import 'package:equatable/equatable.dart';
|
221
|
+
import '../../domain/entities/user_entity.dart';
|
222
|
+
|
223
|
+
enum UserStatus {
|
224
|
+
initial,
|
225
|
+
loading,
|
226
|
+
success,
|
227
|
+
failure,
|
228
|
+
}
|
229
|
+
|
230
|
+
class UserState extends Equatable {
|
231
|
+
const UserState({
|
232
|
+
this.status = UserStatus.initial,
|
233
|
+
this.users = const [],
|
234
|
+
this.selectedUser,
|
235
|
+
this.message,
|
236
|
+
});
|
237
|
+
|
238
|
+
final UserStatus status;
|
239
|
+
final List<UserEntity> users;
|
240
|
+
final UserEntity? selectedUser;
|
241
|
+
final String? message;
|
242
|
+
|
243
|
+
UserState copyWith({
|
244
|
+
UserStatus? status,
|
245
|
+
List<UserEntity>? users,
|
246
|
+
UserEntity? selectedUser,
|
247
|
+
String? message,
|
248
|
+
}) {
|
249
|
+
return UserState(
|
250
|
+
status: status ?? this.status,
|
251
|
+
users: users ?? this.users,
|
252
|
+
selectedUser: selectedUser ?? this.selectedUser,
|
253
|
+
message: message ?? this.message,
|
254
|
+
);
|
255
|
+
}
|
256
|
+
|
257
|
+
@override
|
258
|
+
List<Object?> get props => [status, users, selectedUser, message];
|
259
|
+
}
|
260
|
+
```
|
261
|
+
|
262
|
+
**Cubit Implementation:**
|
263
|
+
```dart
|
264
|
+
import 'package:flutter_bloc/flutter_bloc.dart';
|
265
|
+
import 'package:injectable/injectable.dart';
|
266
|
+
import '../../domain/entities/user_entity.dart';
|
267
|
+
import '../../domain/usecases/get_users_usecase.dart';
|
268
|
+
import 'user_state.dart';
|
269
|
+
|
270
|
+
@injectable
|
271
|
+
class UserCubit extends Cubit<UserState> {
|
272
|
+
UserCubit(
|
273
|
+
this._getUsersUseCase,
|
274
|
+
this._createUserUseCase,
|
275
|
+
this._updateUserUseCase,
|
276
|
+
this._deleteUserUseCase,
|
277
|
+
) : super(const UserState());
|
278
|
+
|
279
|
+
final GetUsersUseCase _getUsersUseCase;
|
280
|
+
final CreateUserUseCase _createUserUseCase;
|
281
|
+
final UpdateUserUseCase _updateUserUseCase;
|
282
|
+
final DeleteUserUseCase _deleteUserUseCase;
|
283
|
+
|
284
|
+
Future<void> getUsers() async {
|
285
|
+
emit(state.copyWith(status: UserStatus.loading));
|
286
|
+
|
287
|
+
final result = await _getUsersUseCase();
|
288
|
+
result.fold(
|
289
|
+
(failure) => emit(state.copyWith(
|
290
|
+
status: UserStatus.failure,
|
291
|
+
message: failure.message ?? 'Failed to load users',
|
292
|
+
)),
|
293
|
+
(users) => emit(state.copyWith(
|
294
|
+
status: UserStatus.success,
|
295
|
+
users: users,
|
296
|
+
)),
|
297
|
+
);
|
298
|
+
}
|
299
|
+
|
300
|
+
Future<void> createUser(UserEntity user) async {
|
301
|
+
emit(state.copyWith(status: UserStatus.loading));
|
302
|
+
|
303
|
+
final result = await _createUserUseCase(user);
|
304
|
+
result.fold(
|
305
|
+
(failure) => emit(state.copyWith(
|
306
|
+
status: UserStatus.failure,
|
307
|
+
message: failure.message ?? 'Failed to create user',
|
308
|
+
)),
|
309
|
+
(createdUser) {
|
310
|
+
final updatedUsers = [...state.users, createdUser];
|
311
|
+
emit(state.copyWith(
|
312
|
+
status: UserStatus.success,
|
313
|
+
users: updatedUsers,
|
314
|
+
));
|
315
|
+
},
|
316
|
+
);
|
317
|
+
}
|
318
|
+
}
|
319
|
+
```
|
320
|
+
|
321
|
+
## 🛠️ Technology Stack
|
322
|
+
|
323
|
+
### Core Dependencies
|
324
|
+
- **State Management**: `flutter_bloc` ^8.1.6
|
325
|
+
- **Dependency Injection**: `get_it` ^8.0.2 + `injectable` ^2.5.0
|
326
|
+
- **Code Generation**: `freezed` ^2.5.7 + `json_serializable` ^6.8.0
|
327
|
+
- **Networking**: `dio` ^5.7.0
|
328
|
+
- **Local Storage**: `hive` ^2.2.3
|
329
|
+
- **Error Handling**: `dartz` ^0.10.1
|
330
|
+
- **Value Equality**: `equatable` ^2.0.7
|
331
|
+
- **Routing**: `go_router` ^14.0.0
|
332
|
+
- **Localization**: `flutter_localizations` + `intl` ^0.19.0
|
333
|
+
|
334
|
+
### Dev Dependencies
|
335
|
+
- **Build Runner**: `build_runner` ^2.4.13
|
336
|
+
- **Code Generation**: `injectable_generator` ^2.6.2
|
337
|
+
- **Testing**: `bloc_test` ^9.1.7 + `mocktail` ^1.0.4
|
338
|
+
|
339
|
+
## 🌐 Multi-Language Support
|
340
|
+
|
341
|
+
### Localization Setup
|
342
|
+
```dart
|
343
|
+
// l10n.yaml
|
344
|
+
arb-dir: lib/l10n
|
345
|
+
template-arb-file: app_en.arb
|
346
|
+
output-localization-file: app_localizations.dart
|
347
|
+
output-class: AppLocalizations
|
348
|
+
```
|
349
|
+
|
350
|
+
### ARB File Structure
|
351
|
+
```json
|
352
|
+
// app_en.arb
|
353
|
+
{
|
354
|
+
"@@locale": "en",
|
355
|
+
"appTitle": "My App",
|
356
|
+
"@appTitle": {
|
357
|
+
"description": "The title of the application"
|
358
|
+
},
|
359
|
+
"welcomeMessage": "Welcome, {userName}!",
|
360
|
+
"@welcomeMessage": {
|
361
|
+
"description": "Welcome message with user name",
|
362
|
+
"placeholders": {
|
363
|
+
"userName": {
|
364
|
+
"type": "String",
|
365
|
+
"example": "John"
|
366
|
+
}
|
367
|
+
}
|
368
|
+
}
|
369
|
+
}
|
370
|
+
```
|
371
|
+
|
372
|
+
### Usage in Widgets
|
373
|
+
```dart
|
374
|
+
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
375
|
+
|
376
|
+
class MyWidget extends StatelessWidget {
|
377
|
+
@override
|
378
|
+
Widget build(BuildContext context) {
|
379
|
+
final l10n = AppLocalizations.of(context)!;
|
380
|
+
|
381
|
+
return Text(l10n.welcomeMessage('John'));
|
382
|
+
}
|
383
|
+
}
|
384
|
+
```
|
385
|
+
|
386
|
+
## 🎨 UI/UX Patterns
|
387
|
+
|
388
|
+
### Shared Components
|
389
|
+
|
390
|
+
**BaseScaffold - Responsive Layout:**
|
391
|
+
```dart
|
392
|
+
class BaseScaffold extends StatelessWidget {
|
393
|
+
const BaseScaffold({
|
394
|
+
super.key,
|
395
|
+
required this.body,
|
396
|
+
this.title,
|
397
|
+
this.actions,
|
398
|
+
this.floatingActionButton,
|
399
|
+
this.safeArea = true,
|
400
|
+
});
|
401
|
+
|
402
|
+
final Widget body;
|
403
|
+
final String? title;
|
404
|
+
final List<Widget>? actions;
|
405
|
+
final Widget? floatingActionButton;
|
406
|
+
final bool safeArea;
|
407
|
+
|
408
|
+
@override
|
409
|
+
Widget build(BuildContext context) {
|
410
|
+
final l10n = AppLocalizations.of(context)!;
|
411
|
+
final mediaQuery = MediaQuery.of(context);
|
412
|
+
final isTablet = mediaQuery.size.width >= 768;
|
413
|
+
|
414
|
+
Widget bodyWidget = body;
|
415
|
+
|
416
|
+
// Responsive constraints
|
417
|
+
if (isTablet) {
|
418
|
+
bodyWidget = Center(
|
419
|
+
child: ConstrainedBox(
|
420
|
+
constraints: const BoxConstraints(maxWidth: 800),
|
421
|
+
child: bodyWidget,
|
422
|
+
),
|
423
|
+
);
|
424
|
+
}
|
425
|
+
|
426
|
+
return Scaffold(
|
427
|
+
appBar: title != null
|
428
|
+
? AppBar(
|
429
|
+
title: Text(title!),
|
430
|
+
actions: actions,
|
431
|
+
)
|
432
|
+
: null,
|
433
|
+
body: safeArea ? SafeArea(child: bodyWidget) : bodyWidget,
|
434
|
+
floatingActionButton: floatingActionButton,
|
435
|
+
);
|
436
|
+
}
|
437
|
+
}
|
438
|
+
```
|
439
|
+
|
440
|
+
## 🔧 Development Commands
|
441
|
+
|
442
|
+
### Code Generation
|
443
|
+
```bash
|
444
|
+
# Generate all code (models, DI, etc.)
|
445
|
+
flutter packages pub run build_runner build --delete-conflicting-outputs
|
446
|
+
|
447
|
+
# Generate localization files
|
448
|
+
flutter gen-l10n
|
449
|
+
|
450
|
+
# Clean and rebuild
|
451
|
+
flutter clean && flutter pub get && flutter packages pub run build_runner build --delete-conflicting-outputs
|
452
|
+
```
|
453
|
+
|
454
|
+
### Testing
|
455
|
+
```bash
|
456
|
+
# Run all tests
|
457
|
+
flutter test
|
458
|
+
|
459
|
+
# Run with coverage
|
460
|
+
flutter test --coverage
|
461
|
+
|
462
|
+
# Run integration tests
|
463
|
+
flutter test integration_test/
|
464
|
+
```
|
465
|
+
|
466
|
+
## 📋 Naming Conventions
|
467
|
+
|
468
|
+
### Files & Directories
|
469
|
+
- **Files**: `snake_case.dart`
|
470
|
+
- **Directories**: `snake_case/`
|
471
|
+
- **Assets**: `snake_case.png`
|
472
|
+
|
473
|
+
### Code
|
474
|
+
- **Classes**: `PascalCase`
|
475
|
+
- **Variables & Methods**: `camelCase`
|
476
|
+
- **Constants**: `SCREAMING_SNAKE_CASE` in static classes
|
477
|
+
- **Private Members**: `_leadingUnderscore`
|
478
|
+
|
479
|
+
### Feature Naming Pattern
|
480
|
+
- **Entity**: `FeatureEntity`
|
481
|
+
- **Model**: `FeatureModel`
|
482
|
+
- **Repository Interface**: `FeatureRepository`
|
483
|
+
- **Repository Implementation**: `FeatureRepositoryImpl`
|
484
|
+
- **DataSource Interface**: `FeatureRemoteDataSource`
|
485
|
+
- **DataSource Implementation**: `FeatureRemoteDataSourceImpl`
|
486
|
+
- **UseCase**: `GetFeatureUseCase`, `CreateFeatureUseCase`, etc.
|
487
|
+
- **Cubit**: `FeatureCubit`
|
488
|
+
- **State**: `FeatureState`
|
489
|
+
- **Page**: `FeatureListPage`, `FeatureDetailPage`
|
490
|
+
|
491
|
+
## 🎯 Development Guidelines
|
492
|
+
|
493
|
+
### Best Practices
|
494
|
+
1. **Immutability**: Alle Data Classes sind immutable
|
495
|
+
2. **Single Responsibility**: Jede Klasse hat eine einzige Verantwortung
|
496
|
+
3. **Dependency Injection**: Alle Dependencies werden injected
|
497
|
+
4. **Error Handling**: Consistent Either<Failure, Success> Pattern
|
498
|
+
5. **Testing**: Jeder Use Case und Repository wird getestet
|
499
|
+
6. **Documentation**: Alle Public APIs sind dokumentiert
|
500
|
+
7. **Localization**: Keine statischen Texte, immer l10n verwenden
|
501
|
+
8. **Security**: Input validation und sichere Datenspeicherung
|
502
|
+
|
503
|
+
### Code Quality Checks
|
504
|
+
- **Linting**: `flutter_lints` für Code-Qualität
|
505
|
+
- **Type Safety**: Null Safety aktiviert
|
506
|
+
- **Build Runner**: Regelmäßige Code-Generierung
|
507
|
+
- **Testing**: Unit Tests für Business Logic
|
508
|
+
- **Security**: Regelmäßige Sicherheitsprüfungen
|
509
|
+
|
510
|
+
## 🚀 Standard Workflow
|
511
|
+
|
512
|
+
### Development Process
|
513
|
+
1. **Think through the problem** - Analyze requirements and read codebase
|
514
|
+
2. **Write a plan** to tasks/todo.md with checkable items
|
515
|
+
3. **Get plan verified** before beginning work
|
516
|
+
4. **Work on todo items** marking them complete as you go
|
517
|
+
5. **Provide high-level explanations** of changes made
|
518
|
+
6. **Keep changes simple** - impact as little code as possible
|
519
|
+
7. **Add review section** to todo.md with summary
|
520
|
+
8. **Make git commits** after each fully finished task
|
521
|
+
|
522
|
+
### Quality Criteria
|
523
|
+
- **Architecture**: Follows Clean Architecture with proper layer separation
|
524
|
+
- **Localization**: All text supports multi-language
|
525
|
+
- **Quality**: Passes all 5 quality criteria (DRY, Readable, Maintainable, Performant, Testable)
|
526
|
+
- **Documentation**: Code is properly documented with examples
|
527
|
+
- **Consistency**: Code style matches existing patterns
|
528
|
+
|
529
|
+
## 🔒 Security Guidelines
|
530
|
+
|
531
|
+
### Input Validation
|
532
|
+
- Validate all user inputs at UI and business logic level
|
533
|
+
- Use proper form validation with error messages
|
534
|
+
- Sanitize data before API calls
|
535
|
+
|
536
|
+
### Data Storage
|
537
|
+
- Use secure storage for sensitive data (flutter_secure_storage)
|
538
|
+
- Never store passwords in plain text
|
539
|
+
- Encrypt sensitive local data
|
540
|
+
|
541
|
+
### Network Security
|
542
|
+
- Use HTTPS for all API calls
|
543
|
+
- Implement certificate pinning for production
|
544
|
+
- Validate SSL certificates
|
545
|
+
|
546
|
+
### Authentication
|
547
|
+
- Implement proper token management
|
548
|
+
- Use secure token storage
|
549
|
+
- Handle token refresh properly
|
550
|
+
|
551
|
+
This guide ensures consistent, high-quality Flutter development that meets professional standards and security requirements.
|