ai-dashboad

flutter-skill

Control and automate Flutter applications - inspect UI, perform gestures, validate state, take screenshots, and debug. Connects AI agents to running Flutter apps via Dart VM Service Protocol.

ai-dashboad 360 51 Updated 6mo ago
GitHub

Install

npx skillscat add ai-dashboad/flutter-skill/flutter-skill

Install via the SkillsCat registry.

About this skill

Here's a thinking process: 1. **Analyze the Request:** - **Goal:** Write a 2-3 sentence plain-text summary in English - **Subject:** An AI agent skill for controlling/automating Flutter applications - **Key Points to Cover:** What it does, what problem it solves, when to use it - **Constraints:** - Objective, factual tone only - No marketing language, no superlatives, no calls to action - Natural prose, no bullet points, no headings, no markdown formatting - No quotes wrapping the answer - At most 60 words - **Output:** ONLY the summary text 2.

SKILL.md

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 URI
  • launch_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 depth
  • get_widget_properties - Widget details (size, position, visibility)
  • get_text_content - Extract all visible text from screen
  • find_by_type - Find all widgets of a specific type

Interactions

  • tap - Tap element by key or text
  • double_tap - Double tap gesture
  • long_press - Long press gesture
  • swipe - Swipe up/down/left/right
  • drag - Drag from one element to another
  • scroll_to - Scroll element into view
  • enter_text - Input text into text field

State Validation

  • get_text_value - Get text field value
  • get_checkbox_state - Get checkbox checked state
  • get_slider_value - Get slider current value
  • wait_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 name
  • go_back - Navigate back
  • get_navigation_stack - Get navigation history

Debug & Logs

  • get_logs - Application logs
  • get_errors - Error messages
  • get_performance - Performance metrics
  • clear_logs - Clear log buffer
  • hot_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

  1. Key (most reliable): tap with key="submit_button"
  2. Text content: tap with text="Submit"
  3. Widget type: find_by_type with type="ElevatedButton"

Links