AI prompts
base on Flutter Version Management: A simple CLI to manage Flutter SDK versions. # fvm

[](https://pub.dev/packages/fvm/changelog)
[](https://pub.dev/packages/fvm/score)
[](https://pub.dev/packages/fvm/score)
[](https://github.com/leoafarias/fvm/graphs/contributors)
[](https://opensource.org/licenses/mit-license.php)

[](https://github.com/Solido/awesome-flutter)
FVM streamlines Flutter version management. It allows per project SDK versions, ensuring consistent app builds and easier testing of new releases, thereby boosting the efficiency of your Flutter project tasks.
## Why FVM?
- Need for simultaneous use of multiple Flutter SDKs.
- SDK testing requires constant [channel](https://github.com/flutter/flutter/wiki/Flutter-build-release-channels) switching.
- Channel switches are slow and need repeated reinstalls.
- Difficulty managing the latest successful SDK version used in an app.
- Flutter's major updates demand total app migration.
- Inconsistencies occur in development environments within teams.
For more information, read [FVM documentation](https://fvm.app).
## Contributors
<a href="https://github.com/leoafarias/fvm/graphs/contributors">
<img src="https://contrib.rocks/image?repo=leoafarias/fvm" />
</a>
---
Checkout Flutter Sidekick. [Read more about it here.](https://github.com/leoafarias/sidekick)
## Troubleshooting
Please view our [FAQ](https://www.fvm.app/documentation/getting-started/faq).
## License
This project is licensed under the MIT License; see [LICENSE](LICENSE) file for details.
# FVM Version Format Testing Guide
This directory contains a testing environment for validating the Flutter Version Manager (FVM) version format handling. The tests focus on ensuring that all valid version formats are correctly parsed and applied, while invalid formats are properly rejected.
## Test Script Overview
The `run_tests.sh` script automates the testing of various version formats with FVM. It:
1. Creates a clean Flutter test environment
2. Tests different version formats including:
- Channel versions (stable, beta, dev, master)
- Semantic versions (e.g., 2.10.0)
- Versions with 'v' prefix (e.g., v2.10.0)
- Versions with channel specification (e.g., 2.10.0@beta)
- Fork specifications (e.g., custom-fork/stable)
3. Validates error handling for invalid formats
4. Reports test results
## Running the Tests
To run the tests with standard output:
```bash
./run_tests.sh
```
For detailed debugging output:
```bash
./run_tests.sh --verbose
```
## Tested Version Formats
The script tests the following version formats:
| Format | Example | Description |
|--------|---------|-------------|
| Channel | `stable`, `beta` | Flutter release channels |
| Semantic Version | `2.10.0` | Specific Flutter version |
| V-prefixed Version | `v2.10.0` | Version with 'v' prefix |
| Version with Channel | `2.10.0@beta` | Specific version from a channel |
| V-prefixed with Channel | `v2.10.0@beta` | V-prefixed version from a channel |
| Fork with Channel | `custom-fork/stable` | Fork with specified channel |
## Error Cases
The script also validates proper rejection of invalid formats:
- Invalid channel specification (`2.10.0@invalid`)
- Custom build with channel (`custom_build@beta`)
- Non-existent fork (`unknown-fork/stable`)
## Test Results
After running the tests, review the output to ensure all tests passed. If any failures occur, the script will provide details about what went wrong.
For a complete record of test outcomes, refer to the `TEST_RESULTS.md` file which may be generated after running the tests.
## Prerequisites
- Dart SDK must be installed and available in PATH
- Flutter SDK must be installed and available in PATH
- The script should be run from the `test/fixtures/sample_app` directory
## Troubleshooting
If some tests are skipped, it may be because:
1. The required Flutter versions are not installed
2. The `list` command in the FVM implementation has issues
In these cases, the script will continue with available tests and provide warnings about what was skipped.
", Assign "at most 3 tags" to the expected json: {"id":"9427","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"