flutter-dev 0.1.1__tar.gz → 0.1.2__tar.gz
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.
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/.env.example +5 -5
- flutter_dev-0.1.2/CHANGELOG.md +36 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/MANIFEST.in +1 -0
- flutter_dev-0.1.2/PKG-INFO +468 -0
- flutter_dev-0.1.2/README.md +435 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/flutter_dev.egg-info/SOURCES.txt +1 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/pyproject.toml +2 -1
- flutter_dev-0.1.1/PKG-INFO +0 -434
- flutter_dev-0.1.1/README.md +0 -402
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/LICENSE +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/common_utils.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/core/__init__.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/core/constants.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/core/state.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/create_page.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/fdev.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/gemini_api.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/git_diff_output_editor.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/install_legacy.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/__init__.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/ai.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/app.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/brew.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/build.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/datetime.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/device.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/doctor.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/git.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/git_account.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/merge.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/mirror.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/project.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/managers/web_deploy.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/requirements.txt +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/setup.cfg +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/setup.py +0 -0
- {flutter_dev-0.1.1 → flutter_dev-0.1.2}/switch_ai.py +0 -0
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
# এই file টি .gitignore এ add করতে হবে
|
|
4
4
|
|
|
5
5
|
# Groq API (Current - Active)
|
|
6
|
-
GROQ_API_KEY=
|
|
6
|
+
GROQ_API_KEY=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
|
|
7
7
|
GROQ_API_URL=https://api.groq.com/openai/v1/chat/completions
|
|
8
8
|
GROQ_MODEL=llama-3.3-70b-versatile
|
|
9
9
|
|
|
10
10
|
# Mistral AI API
|
|
11
|
-
MISTRAL_API_KEY=
|
|
11
|
+
MISTRAL_API_KEY=irrmymmw43lvCcARy08R1TZhHuqMgXwa
|
|
12
12
|
MISTRAL_API_URL=https://api.mistral.ai/v1/chat/completions
|
|
13
13
|
MISTRAL_MODEL=mistral-medium
|
|
14
14
|
|
|
15
15
|
# SambaNova API
|
|
16
|
-
SAMBANOVA_API_KEY=
|
|
16
|
+
SAMBANOVA_API_KEY=c5c3f0dc-75db-4621-9d0c-7372efb4a04f
|
|
17
17
|
SAMBANOVA_API_URL=https://api.sambanova.ai/v1/chat/completions
|
|
18
18
|
SAMBANOVA_MODEL=Meta-Llama-3.3-70B-Instruct
|
|
19
19
|
|
|
20
20
|
# OpenRouter API
|
|
21
|
-
OPENROUTER_API_KEY=
|
|
21
|
+
OPENROUTER_API_KEY=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
|
|
22
22
|
OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions
|
|
23
23
|
OPENROUTER_MODEL=openai/gpt-3.5-turbo
|
|
24
24
|
|
|
25
25
|
# Default AI Service (groq, mistral, sambanova, openrouter)
|
|
26
|
-
DEFAULT_AI_SERVICE=groq
|
|
26
|
+
DEFAULT_AI_SERVICE=groq
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
## 0.1.2 - 2026-06-07
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Bumped package version to 0.1.2.
|
|
10
|
+
|
|
11
|
+
## 0.1.1 - 2026-05-19
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Added `fdev install-scrcpy` for platform-specific scrcpy installation.
|
|
16
|
+
- Added prompt-based scrcpy installation when `fdev mirror` cannot find `scrcpy`.
|
|
17
|
+
- Added PyPI Trusted Publishing workflow and package metadata.
|
|
18
|
+
- Added `CHANGELOG.md` release history.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Updated `fdev doctor` to suggest `fdev install-scrcpy` when scrcpy is missing.
|
|
23
|
+
- Updated package author and license branding to Royal Court BD.
|
|
24
|
+
- Updated package repository URLs to `royalcourtbd/flutter-development-tools`.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- Prevented private `.env` files from being included in package artifacts.
|
|
29
|
+
- Made PyPI console scripts safer by removing import-time side effects.
|
|
30
|
+
|
|
31
|
+
## 0.1.0 - 2026-05-18
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Initial public PyPI package setup for Flutter Development Tools.
|
|
36
|
+
- Added console scripts for `fdev`, `create-page`, `gemini-api`, and `git-diff-editor`.
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: flutter-dev
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: A cross-platform CLI toolkit for Flutter development workflows.
|
|
5
|
+
Author: Royal Court BD
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/royalcourtbd/flutter-development-tools
|
|
8
|
+
Project-URL: Repository, https://github.com/royalcourtbd/flutter-development-tools
|
|
9
|
+
Project-URL: Issues, https://github.com/royalcourtbd/flutter-development-tools/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/royalcourtbd/flutter-development-tools/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: flutter,cli,developer-tools,automation
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
17
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
26
|
+
Classifier: Topic :: Utilities
|
|
27
|
+
Requires-Python: >=3.8
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Requires-Dist: python-dotenv>=0.19.0
|
|
31
|
+
Requires-Dist: requests>=2.25.0
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+
# Flutter Dev
|
|
35
|
+
|
|
36
|
+
`flutter-dev` is a cross-platform Python CLI toolkit for automating common Flutter development workflows. It exposes the `fdev` command for project setup, release builds, device utilities, Git automation, AI-generated commit messages, screen mirroring, Firebase web deployment, and small productivity tools around an existing Flutter project.
|
|
37
|
+
|
|
38
|
+
The package is published on PyPI as `flutter-dev` and installs console commands for day-to-day Flutter work:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
pip install flutter-dev
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Current package metadata declares version `0.1.1`, Python `>=3.8`, MIT license, and support for macOS, Linux, and Windows.
|
|
45
|
+
|
|
46
|
+
## Key Features
|
|
47
|
+
|
|
48
|
+
- Flutter build automation for APK, split APK, AAB, IPA, release install, and Firebase web deploy.
|
|
49
|
+
- Project maintenance helpers for `flutter clean`, dependency refresh, `build_runner`, localization generation, analysis, formatting, cache repair, and CocoaPods.
|
|
50
|
+
- Android device helpers for APK install, app uninstall, foreground app data clearing, screen mirroring with `scrcpy`, wireless ADB setup, and Date & Time settings.
|
|
51
|
+
- AI-assisted Git commits using Groq, Mistral, SambaNova, or OpenRouter-compatible chat completion APIs.
|
|
52
|
+
- Git workflow helpers for version tags, branch sync, deployment branch merge, discard, and GitHub account management through `gh`.
|
|
53
|
+
- Feature/page generator that creates a `lib/features/<name>` structure using the project's presenter/base-state pattern.
|
|
54
|
+
- Environment diagnostics through `fdev doctor`.
|
|
55
|
+
- Small utilities for Homebrew cleanup, file merging from `paths.txt`, AI provider switching, and git diff prompt export.
|
|
56
|
+
|
|
57
|
+
## Installation
|
|
58
|
+
|
|
59
|
+
### Install From PyPI
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
python -m pip install flutter-dev
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Verify the CLI is available:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
fdev doctor
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`pip install flutter-dev` installs the Python package, Python dependencies, and console scripts. It does not install Flutter, Dart, Git, Android SDK tools, CocoaPods, Firebase CLI, GitHub CLI, `scrcpy`, Java/JDK, or VS Code CLI.
|
|
72
|
+
|
|
73
|
+
### Install From Source
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git clone https://github.com/royalcourtbd/flutter-development-tools.git
|
|
77
|
+
cd flutter-development-tools
|
|
78
|
+
python -m pip install .
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For editable local development:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
python -m pip install -e .
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Legacy Installer
|
|
88
|
+
|
|
89
|
+
The repository still includes `install_legacy.py` for the older `~/scripts/flutter-tools` and `~/bin` style installation:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
python install_legacy.py
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
For new PyPI-based installs, prefer the console scripts installed by `pip`.
|
|
96
|
+
|
|
97
|
+
## Requirements
|
|
98
|
+
|
|
99
|
+
Core requirements checked by `fdev doctor`:
|
|
100
|
+
|
|
101
|
+
- Python 3.8 or newer
|
|
102
|
+
- Flutter SDK
|
|
103
|
+
- Dart SDK
|
|
104
|
+
- Git
|
|
105
|
+
- Python packages: `python-dotenv`, `requests`
|
|
106
|
+
|
|
107
|
+
Feature-specific external tools:
|
|
108
|
+
|
|
109
|
+
| Tool | Used by |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| Android SDK Platform Tools / `adb` | `install`, `uninstall`, `clear-data`, `mirror`, `datetime`, `release-run` |
|
|
112
|
+
| Java/JDK | Android builds |
|
|
113
|
+
| CocoaPods | `pod`, `ipa` |
|
|
114
|
+
| Xcode / `xcrun` | iOS simulator and IPA workflows on macOS |
|
|
115
|
+
| `scrcpy` | `mirror` |
|
|
116
|
+
| Firebase CLI | `web-deploy` |
|
|
117
|
+
| GitHub CLI / `gh` | `fdev git ...` |
|
|
118
|
+
| VS Code CLI / `code` | Conflict helper in branch sync |
|
|
119
|
+
| Homebrew | `brew`, macOS `install-scrcpy` flow |
|
|
120
|
+
|
|
121
|
+
## Quick Start
|
|
122
|
+
|
|
123
|
+
Run commands from the root of a Flutter project when they need `pubspec.yaml`, Android Gradle files, iOS files, or build outputs.
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Check environment and optional tools
|
|
127
|
+
fdev doctor
|
|
128
|
+
|
|
129
|
+
# Generate localization files
|
|
130
|
+
fdev lang
|
|
131
|
+
|
|
132
|
+
# Run build_runner
|
|
133
|
+
fdev db
|
|
134
|
+
|
|
135
|
+
# Build a release APK
|
|
136
|
+
fdev apk
|
|
137
|
+
|
|
138
|
+
# Build and install a release APK on a connected Android device
|
|
139
|
+
fdev release-run
|
|
140
|
+
|
|
141
|
+
# Mirror an Android device
|
|
142
|
+
fdev mirror
|
|
143
|
+
|
|
144
|
+
# Generate an AI-assisted commit message and commit after confirmation
|
|
145
|
+
fdev commit
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Command Reference
|
|
149
|
+
|
|
150
|
+
### Build Commands
|
|
151
|
+
|
|
152
|
+
| Command | Description |
|
|
153
|
+
| --- | --- |
|
|
154
|
+
| `fdev apk` | Runs clean, pub get, `flutter gen-l10n`, `build_runner`, then `flutter build apk --release --obfuscate --target-platform android-arm64 --split-debug-info=./`. |
|
|
155
|
+
| `fdev apk-split` | Builds release APKs with `--split-per-abi`. |
|
|
156
|
+
| `fdev aab` | Builds a release Android App Bundle with obfuscation and split debug info. |
|
|
157
|
+
| `fdev ipa` | Builds an App Store IPA on non-Windows systems; runs CocoaPods steps when `ios/` exists. |
|
|
158
|
+
| `fdev release-run` | Builds a release APK, installs it on a selected Android device, and launches the app. |
|
|
159
|
+
| `fdev web-deploy` | Runs `flutter build web --release`, then `firebase deploy --only functions,hosting`. |
|
|
160
|
+
|
|
161
|
+
Android APK/AAB build commands rename output files using the Android app label and current date (`DD_MMM`) when the label is available, display file sizes, and open the output directory.
|
|
162
|
+
|
|
163
|
+
### Project Commands
|
|
164
|
+
|
|
165
|
+
| Command | Description |
|
|
166
|
+
| --- | --- |
|
|
167
|
+
| `fdev setup` | Runs clean, dependency upgrade, `build_runner`, localization generation, another dependency upgrade, `flutter analyze`, and `dart format .`. |
|
|
168
|
+
| `fdev cleanup` | Runs clean, pub get, `dart fix --apply`, `dart format .`, and `flutter pub upgrade --major-versions`. |
|
|
169
|
+
| `fdev lang` | Runs `flutter gen-l10n`. |
|
|
170
|
+
| `fdev db` | Runs `dart run build_runner build --delete-conflicting-outputs`. |
|
|
171
|
+
| `fdev cache-repair` | Runs `flutter pub cache repair`. |
|
|
172
|
+
| `fdev pod` | Updates CocoaPods from the `ios/` directory after removing `Podfile.lock` when present. |
|
|
173
|
+
| `create-page page <page_name>` | Generates a feature/page structure directly through the packaged console script. |
|
|
174
|
+
| `fdev page <page_name>` | Legacy wrapper that currently calls `~/scripts/flutter-tools/create_page.py`; for PyPI installs, prefer `create-page page <page_name>`. |
|
|
175
|
+
|
|
176
|
+
### Device Commands
|
|
177
|
+
|
|
178
|
+
| Command | Description |
|
|
179
|
+
| --- | --- |
|
|
180
|
+
| `fdev install` | Installs a built APK from `build/app/outputs/flutter-apk`, prefers `arm64-v8a`, retries after uninstall on failure, then launches the app. |
|
|
181
|
+
| `fdev uninstall` | In a Flutter project root, uninstalls by package/bundle id. Outside a project, detects the foreground app and asks for confirmation. |
|
|
182
|
+
| `fdev clear-data` | Detects the foreground app, asks for confirmation, and runs `adb shell pm clear <package>` on Android. iOS prints manual options. |
|
|
183
|
+
| `fdev install-scrcpy` | Installs `scrcpy` using the best supported package manager for the current platform. |
|
|
184
|
+
| `fdev mirror` | Launches `scrcpy` for a selected Android device. |
|
|
185
|
+
| `fdev mirror --wireless` | Guides wireless ADB setup using a USB-connected Android device. |
|
|
186
|
+
| `fdev mirror --no-top` | Launches `scrcpy` without the always-on-top flag. |
|
|
187
|
+
| `fdev datetime` | Disables Android auto-time and opens Date & Time settings on the selected device. |
|
|
188
|
+
|
|
189
|
+
When multiple Android devices are connected, device-aware commands prompt you to choose a device.
|
|
190
|
+
|
|
191
|
+
### Git Commands
|
|
192
|
+
|
|
193
|
+
| Command | Description |
|
|
194
|
+
| --- | --- |
|
|
195
|
+
| `fdev commit` | Generates a Conventional Commit-style message from `git diff HEAD`, asks for confirmation, stages unstaged changes with `git add .`, then commits. |
|
|
196
|
+
| `fdev tag` | Auto-increments the latest Git tag, updates `pubspec.yaml` version/build number, commits the version bump, creates the tag, and pushes the commit and tag. |
|
|
197
|
+
| `fdev discard` | Prompts, then discards tracked changes and removes untracked files using Git commands. |
|
|
198
|
+
| `fdev sync <branch...>` | Fetches, merges named branches into the current branch, pushes, then merges current branch back into those branches. Requires a clean worktree. |
|
|
199
|
+
| `fdev deploy` | Merges the current branch into `deployment` and pushes it. Requires a clean worktree. |
|
|
200
|
+
| `fdev git` | Opens an interactive GitHub account manager using the GitHub CLI. |
|
|
201
|
+
|
|
202
|
+
`fdev git` subcommands:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
fdev git status
|
|
206
|
+
fdev git list
|
|
207
|
+
fdev git switch <username>
|
|
208
|
+
fdev git add
|
|
209
|
+
fdev git remove <username>
|
|
210
|
+
fdev git config
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Switching GitHub accounts runs `gh auth switch` and `gh auth setup-git`, but it does not automatically change `git user.name` or `git user.email`. Use `fdev git config` when you want to update Git identity.
|
|
214
|
+
|
|
215
|
+
### Utility Commands
|
|
216
|
+
|
|
217
|
+
| Command | Description |
|
|
218
|
+
| --- | --- |
|
|
219
|
+
| `fdev doctor` | Checks platform, Python, Flutter/Dart/Git, Python packages, Android/iOS tools, optional CLIs, `.env`, Flutter project detection, and global `fdev` availability. |
|
|
220
|
+
| `fdev ai` | Shows the current AI provider and opens an interactive provider switch prompt. |
|
|
221
|
+
| `fdev ai <provider>` | Switches `DEFAULT_AI_SERVICE` to `groq`, `mistral`, `sambanova`, or `openrouter`. |
|
|
222
|
+
| `fdev brew` | Interactive Homebrew package manager for viewing packages, uninstalling with cleanup, clearing cache, and global cleanup. |
|
|
223
|
+
| `fdev merge` | Reads paths from `paths.txt`, merges file contents into `path_merge_files.txt`, and opens the result when there are no failures. |
|
|
224
|
+
| `gemini-api` | Tests the currently selected AI provider configuration. |
|
|
225
|
+
| `git-diff-editor` | Writes `git diff` output plus a prompt into `diff_output.txt` and opens it with the default app. |
|
|
226
|
+
|
|
227
|
+
## AI Configuration
|
|
228
|
+
|
|
229
|
+
AI features are used by `fdev commit` and `gemini-api`. Despite the historical `gemini_api.py` filename, the current source supports these providers:
|
|
230
|
+
|
|
231
|
+
- `groq`
|
|
232
|
+
- `mistral`
|
|
233
|
+
- `sambanova`
|
|
234
|
+
- `openrouter`
|
|
235
|
+
|
|
236
|
+
Each provider expects an API key, API URL, and model name. A typical configuration looks like this:
|
|
237
|
+
|
|
238
|
+
```env
|
|
239
|
+
GROQ_API_KEY=your_groq_api_key_here
|
|
240
|
+
GROQ_API_URL=https://api.groq.com/openai/v1/chat/completions
|
|
241
|
+
GROQ_MODEL=llama-3.3-70b-versatile
|
|
242
|
+
|
|
243
|
+
MISTRAL_API_KEY=your_mistral_api_key_here
|
|
244
|
+
MISTRAL_API_URL=https://api.mistral.ai/v1/chat/completions
|
|
245
|
+
MISTRAL_MODEL=mistral-medium
|
|
246
|
+
|
|
247
|
+
SAMBANOVA_API_KEY=your_sambanova_api_key_here
|
|
248
|
+
SAMBANOVA_API_URL=https://api.sambanova.ai/v1/chat/completions
|
|
249
|
+
SAMBANOVA_MODEL=Meta-Llama-3.3-70B-Instruct
|
|
250
|
+
|
|
251
|
+
OPENROUTER_API_KEY=your_openrouter_api_key_here
|
|
252
|
+
OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions
|
|
253
|
+
OPENROUTER_MODEL=openai/gpt-3.5-turbo
|
|
254
|
+
|
|
255
|
+
DEFAULT_AI_SERVICE=groq
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
The AI runtime searches for configuration in this order:
|
|
259
|
+
|
|
260
|
+
1. `FLUTTER_DEV_ENV`
|
|
261
|
+
2. `$XDG_CONFIG_HOME/flutter-dev/.env`
|
|
262
|
+
3. `~/.config/flutter-dev/.env`
|
|
263
|
+
4. `~/scripts/flutter-tools/.env`
|
|
264
|
+
5. `.env` beside the installed module/source
|
|
265
|
+
6. `.env` in the current working directory
|
|
266
|
+
|
|
267
|
+
Recommended setup:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
mkdir -p ~/.config/flutter-dev
|
|
271
|
+
nano ~/.config/flutter-dev/.env
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Then test:
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
fdev ai
|
|
278
|
+
gemini-api
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Note: the current `fdev doctor` `.env` check is more limited than the AI runtime lookup. If `doctor` reports a missing `.env` but `gemini-api` succeeds, the AI configuration is still usable.
|
|
282
|
+
|
|
283
|
+
## Feature/Page Generation
|
|
284
|
+
|
|
285
|
+
Use the packaged command:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
create-page page user_profile
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
This reads the Flutter project name from `pubspec.yaml`, lowercases the page name, converts snake_case to PascalCase for class names, and creates:
|
|
292
|
+
|
|
293
|
+
```text
|
|
294
|
+
lib/features/user_profile/
|
|
295
|
+
data/
|
|
296
|
+
datasource/
|
|
297
|
+
models/
|
|
298
|
+
repositories/user_profile_repository_impl.dart
|
|
299
|
+
domain/
|
|
300
|
+
datasource/
|
|
301
|
+
entities/
|
|
302
|
+
repositories/user_profile_repository.dart
|
|
303
|
+
usecase/
|
|
304
|
+
presentation/
|
|
305
|
+
presenter/user_profile_presenter.dart
|
|
306
|
+
presenter/user_profile_ui_state.dart
|
|
307
|
+
ui/user_profile_page.dart
|
|
308
|
+
widgets/
|
|
309
|
+
di/user_profile_di.dart
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
The generated Dart pattern is based on:
|
|
313
|
+
|
|
314
|
+
- `{Prefix}Repository`
|
|
315
|
+
- `{Prefix}RepositoryImpl`
|
|
316
|
+
- `{Prefix}Di`
|
|
317
|
+
- `{Prefix}Presenter extends BasePresenter<{Prefix}UiState>`
|
|
318
|
+
- `{Prefix}UiState extends BaseUiState`
|
|
319
|
+
- a simple `StatelessWidget` page
|
|
320
|
+
|
|
321
|
+
If `lib/core/di/service_locator.dart` exists, the generator attempts to add the feature DI import and `await {Prefix}Di.setup(_serviceLocator);` near `//Feature DI setup`.
|
|
322
|
+
|
|
323
|
+
Important notes:
|
|
324
|
+
|
|
325
|
+
- The generator overwrites the generated target files if they already exist.
|
|
326
|
+
- `service_locator.dart` updates are regex-based and skipped when the file is missing.
|
|
327
|
+
- The source does not generate BLoC/Cubit templates; it generates the project's presenter/base-state pattern.
|
|
328
|
+
|
|
329
|
+
## Architecture
|
|
330
|
+
|
|
331
|
+
The package is organized as a Python CLI with a thin dispatcher and feature-specific managers:
|
|
332
|
+
|
|
333
|
+
```text
|
|
334
|
+
fdev.py Main command dispatcher
|
|
335
|
+
create_page.py Flutter feature/page generator
|
|
336
|
+
gemini_api.py AI commit-message provider client and config loader
|
|
337
|
+
git_diff_output_editor.py
|
|
338
|
+
common_utils.py Shared colors, spinners, env helpers, platform helpers
|
|
339
|
+
core/constants.py Shared regex patterns, paths, and build command constants
|
|
340
|
+
core/state.py Selected Android device state
|
|
341
|
+
managers/build.py APK/AAB/IPA/release-run build workflow
|
|
342
|
+
managers/project.py setup, cleanup, lang, db, pod, cache repair
|
|
343
|
+
managers/app.py install, uninstall, foreground app data clearing
|
|
344
|
+
managers/device.py ADB device detection and selection
|
|
345
|
+
managers/mirror.py scrcpy install, mirror, wireless ADB setup
|
|
346
|
+
managers/git.py commit, tag, discard, branch sync, deployment merge
|
|
347
|
+
managers/git_account.py GitHub account manager around gh CLI
|
|
348
|
+
managers/doctor.py Environment diagnostics
|
|
349
|
+
managers/ai.py AI provider status and switching
|
|
350
|
+
managers/brew.py Interactive Homebrew manager
|
|
351
|
+
managers/merge.py paths.txt to path_merge_files.txt merger
|
|
352
|
+
managers/web_deploy.py Flutter web build plus Firebase deploy
|
|
353
|
+
managers/datetime.py Android Date & Time settings helper
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
The installed Python layout is top-level modules plus the `core` and `managers` packages; it is not a single import package named `flutter_dev`.
|
|
357
|
+
|
|
358
|
+
## Important Behavior Notes
|
|
359
|
+
|
|
360
|
+
- Many `fdev` commands mutate your Flutter project, Git repository, connected device, or local tool environment. Read command output before confirming prompts.
|
|
361
|
+
- `fdev commit` can stage all unstaged changes before committing.
|
|
362
|
+
- `fdev tag` updates `pubspec.yaml`, creates a commit, creates a Git tag, and pushes both.
|
|
363
|
+
- `fdev discard` removes tracked changes and untracked files after confirmation.
|
|
364
|
+
- `fdev cleanup` applies `dart fix`, formats the project, and runs a major-version dependency upgrade.
|
|
365
|
+
- `fdev clear-data` clears app data on Android after confirmation.
|
|
366
|
+
- `fdev uninstall` may fall back to foreground app detection outside a Flutter project root.
|
|
367
|
+
- `fdev` creates build output directories at startup in the current working directory.
|
|
368
|
+
- Some subcommands return failure internally without always mapping that failure to a non-zero process exit code, so automation should inspect command output carefully.
|
|
369
|
+
|
|
370
|
+
## Troubleshooting
|
|
371
|
+
|
|
372
|
+
### Command Not Found
|
|
373
|
+
|
|
374
|
+
Make sure the Python environment where you installed the package is active:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
python -m pip show flutter-dev
|
|
378
|
+
python -m pip install --upgrade flutter-dev
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
Then check:
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
which fdev
|
|
385
|
+
fdev doctor
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
On Windows, use:
|
|
389
|
+
|
|
390
|
+
```powershell
|
|
391
|
+
where fdev
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Flutter Project Not Detected
|
|
395
|
+
|
|
396
|
+
Run project-specific commands from the directory that contains `pubspec.yaml`.
|
|
397
|
+
|
|
398
|
+
### Build Commands Fail
|
|
399
|
+
|
|
400
|
+
Check that Flutter, Dart, Android SDK tools, Java/JDK, and project dependencies are installed:
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
fdev doctor
|
|
404
|
+
flutter doctor
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### AI Commit Fails
|
|
408
|
+
|
|
409
|
+
Check provider configuration and network access:
|
|
410
|
+
|
|
411
|
+
```bash
|
|
412
|
+
fdev ai
|
|
413
|
+
gemini-api
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
Ensure the selected provider has all three values set:
|
|
417
|
+
|
|
418
|
+
- `<PROVIDER>_API_KEY`
|
|
419
|
+
- `<PROVIDER>_API_URL`
|
|
420
|
+
- `<PROVIDER>_MODEL`
|
|
421
|
+
|
|
422
|
+
### Screen Mirroring Fails
|
|
423
|
+
|
|
424
|
+
Install or repair `scrcpy`:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
fdev install-scrcpy
|
|
428
|
+
fdev mirror
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
For wireless mirroring, connect the device over USB first:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
fdev mirror --wireless
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### `create-page` Works But `fdev page` Fails
|
|
438
|
+
|
|
439
|
+
For PyPI installs, use:
|
|
440
|
+
|
|
441
|
+
```bash
|
|
442
|
+
create-page page <page_name>
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
The `fdev page` wrapper still targets the legacy `~/scripts/flutter-tools/create_page.py` path.
|
|
446
|
+
|
|
447
|
+
## Packaging And Release Checks
|
|
448
|
+
|
|
449
|
+
For local packaging checks:
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
python -m pip install --upgrade build twine
|
|
453
|
+
python -m build
|
|
454
|
+
python -m twine check dist/*
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Keep secrets out of release artifacts and documentation. Do not commit `.env` files or API keys. Use placeholder values in examples.
|
|
458
|
+
|
|
459
|
+
## License
|
|
460
|
+
|
|
461
|
+
MIT License. See [LICENSE](LICENSE).
|
|
462
|
+
|
|
463
|
+
## Links
|
|
464
|
+
|
|
465
|
+
- Homepage: https://github.com/royalcourtbd/flutter-development-tools
|
|
466
|
+
- Repository: https://github.com/royalcourtbd/flutter-development-tools
|
|
467
|
+
- Issues: https://github.com/royalcourtbd/flutter-development-tools/issues
|
|
468
|
+
- Changelog: https://github.com/royalcourtbd/flutter-development-tools/blob/main/CHANGELOG.md
|