Flutter Skill
Give your AI Agent eyes and hands inside your Flutter app. This skill enables comprehensive control of Flutter applications for testing, debugging, and automation.
Installation
Option 1: npx (Recommended)
{
"flutter-skill": {
"command": "npx",
"args": ["flutter-skill"]
}
}
Option 2: Global Install
dart pub global activate flutter_skill
Then configure:
{
"flutter-skill": {
"command": "flutter_skill",
"args": ["server"]
}
}
Available Tools
Connection
connect_app- Connect to a running Flutter app via WebSocket URIlaunch_app- Launch a Flutter app with auto-setup (adds dependencies, patches main.dart)
UI Inspection
inspect- Get interactive elements (buttons, text fields, etc.)get_widget_tree- Full widget tree structure with configurable depthget_widget_properties- Widget details (size, position, visibility)get_text_content- Extract all visible text from screenfind_by_type- Find all widgets of a specific type
Interactions
tap- Tap element by key or textdouble_tap- Double tap gesturelong_press- Long press gestureswipe- Swipe up/down/left/rightdrag- Drag from one element to anotherscroll_to- Scroll element into viewenter_text- Input text into text field
State Validation
get_text_value- Get text field valueget_checkbox_state- Get checkbox checked stateget_slider_value- Get slider current valuewait_for_element- Wait for element to appear (with timeout)wait_for_gone- Wait for element to disappear
Screenshots
screenshot- Capture full app screenshot (base64 PNG)screenshot_element- Capture specific element screenshot
Navigation
get_current_route- Get current route namego_back- Navigate backget_navigation_stack- Get navigation history
Debug & Logs
get_logs- Application logsget_errors- Error messagesget_performance- Performance metricsclear_logs- Clear log bufferhot_reload- Trigger hot reload
Usage Examples
Test a Counter App
1. Launch the app: launch_app with project_path="/path/to/app"
2. Inspect UI: inspect
3. Tap increment: tap with key="increment_button"
4. Verify: get_text_content to see updated counter
Test a Login Flow
1. Enter email: enter_text with key="email_field", text="user@example.com"
2. Enter password: enter_text with key="password_field", text="password123"
3. Tap login: tap with key="login_button"
4. Wait for home: wait_for_element with key="home_screen", timeout=5000
Debug an Issue
1. Connect: connect_app with uri="ws://127.0.0.1:xxxxx/ws"
2. Check errors: get_errors
3. View logs: get_logs
4. Take screenshot: screenshot
Best Practices
Use Widget Keys
For reliable element identification, target apps should use ValueKey:
ElevatedButton(
key: const ValueKey('submit_button'),
onPressed: _submit,
child: const Text('Submit'),
)
Element Finding Priority
- Key (most reliable):
tap with key="submit_button" - Text content:
tap with text="Submit" - Widget type:
find_by_type with type="ElevatedButton"
Scan to join WeChat group