flutter-skill 0.7.8 → 0.8.1
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/README.md +204 -186
- package/dart/pubspec.yaml +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,67 +1,66 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<
|
|
2
|
+
<a href="https://github.com/ai-dashboad/flutter-skill">
|
|
3
|
+
<img src="assets/demo-teaser.gif" alt="AI testing a TikTok clone across 8 platforms" width="640">
|
|
4
|
+
</a>
|
|
3
5
|
</p>
|
|
4
6
|
|
|
5
7
|
<h1 align="center">flutter-skill</h1>
|
|
6
8
|
|
|
7
9
|
<p align="center">
|
|
8
|
-
<strong>Give
|
|
9
|
-
|
|
10
|
+
<strong>Give any AI agent eyes and hands inside any running app.</strong><br>
|
|
11
|
+
8 platforms. Zero test code. One MCP server.
|
|
10
12
|
</p>
|
|
11
13
|
|
|
12
14
|
<p align="center">
|
|
15
|
+
<a href="https://github.com/ai-dashboad/flutter-skill/stargazers"><img src="https://img.shields.io/github/stars/ai-dashboad/flutter-skill?style=flat&color=yellow" alt="Stars"></a>
|
|
13
16
|
<a href="https://pub.dev/packages/flutter_skill"><img src="https://img.shields.io/pub/v/flutter_skill.svg" alt="pub.dev"></a>
|
|
14
17
|
<a href="https://www.npmjs.com/package/flutter-skill"><img src="https://img.shields.io/npm/v/flutter-skill.svg" alt="npm"></a>
|
|
15
18
|
<a href="https://github.com/ai-dashboad/flutter-skill/actions"><img src="https://img.shields.io/github/actions/workflow/status/ai-dashboad/flutter-skill/ci.yml?label=tests" alt="CI"></a>
|
|
16
|
-
<a href="https://github.com/ai-dashboad/flutter-skill/stargazers"><img src="https://img.shields.io/github/stars/ai-dashboad/flutter-skill?style=social" alt="Stars"></a>
|
|
17
19
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
|
|
18
|
-
<a href="https://skills.sh/ai-dashboad/flutter-skill/flutter-skill-testing"><img src="https://img.shields.io/badge/skills.sh-agent%20skill-black" alt="Agent Skill"></a>
|
|
19
20
|
</p>
|
|
20
21
|
|
|
21
22
|
<p align="center">
|
|
23
|
+
<a href="#30-second-demo">Demo</a> •
|
|
22
24
|
<a href="#quick-start">Quick Start</a> •
|
|
23
|
-
<a href="#platforms">Platforms</a> •
|
|
24
|
-
<a href="#
|
|
25
|
-
<a href="#install">Install</a> •
|
|
25
|
+
<a href="#8-platforms-one-tool">Platforms</a> •
|
|
26
|
+
<a href="#why-not-playwright--appium--detox">vs Others</a> •
|
|
26
27
|
<a href="docs/USAGE_GUIDE.md">Docs</a>
|
|
27
28
|
</p>
|
|
28
29
|
|
|
29
30
|
---
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
<strong>🎬 AI tests a full TikTok clone — 28 actions, zero test code</strong>
|
|
33
|
-
</p>
|
|
32
|
+
## 30-Second Demo
|
|
34
33
|
|
|
35
34
|
https://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6
|
|
36
35
|
|
|
36
|
+
> **One prompt. 28 AI-driven actions. Zero test code.** The AI explores a TikTok clone, navigates tabs, scrolls feeds, tests search, fills forms — all autonomously.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Why This Exists
|
|
41
|
+
|
|
42
|
+
Writing E2E tests is painful. Maintaining them is worse.
|
|
43
|
+
|
|
44
|
+
**flutter-skill** connects your AI agent (Claude, Cursor, Windsurf, Copilot, OpenClaw) directly to your running app via [MCP](https://modelcontextprotocol.io/). The agent can see the screen, tap buttons, type text, scroll — like a human tester who never sleeps.
|
|
45
|
+
|
|
37
46
|
```
|
|
38
|
-
You: "Test the
|
|
39
|
-
|
|
40
|
-
AI Agent:
|
|
41
|
-
1. screenshot() → sees the login screen
|
|
42
|
-
2. enter_text("email") → types the email
|
|
43
|
-
3. enter_text("pass") → types the password
|
|
44
|
-
4. tap("Login") → taps the button
|
|
45
|
-
5. wait_for_element("Dashboard") → confirms navigation
|
|
46
|
-
✅ Login flow verified!
|
|
47
|
-
```
|
|
47
|
+
You: "Test the checkout flow with an empty cart, then add 3 items and complete purchase"
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
Your AI agent handles the rest — screenshots, taps, text entry, assertions, navigation.
|
|
50
|
+
No Page Objects. No XPath. No brittle selectors. Just plain English.
|
|
51
|
+
```
|
|
50
52
|
|
|
51
53
|
---
|
|
52
54
|
|
|
53
55
|
## Quick Start
|
|
54
56
|
|
|
55
|
-
**1. Install**
|
|
57
|
+
**1. Install** (30 seconds)
|
|
56
58
|
|
|
57
59
|
```bash
|
|
58
|
-
npm install -g flutter-skill
|
|
59
|
-
# or: brew install ai-dashboad/flutter-skill/flutter-skill
|
|
60
|
-
# or: dart pub global activate flutter_skill
|
|
61
|
-
# or: npx skills add ai-dashboad/flutter-skill # Agent Skill (Claude Code, Cursor, Copilot, Cline, etc.)
|
|
60
|
+
npm install -g flutter-skill
|
|
62
61
|
```
|
|
63
62
|
|
|
64
|
-
**2. Add to your
|
|
63
|
+
**2. Add to your AI** (copy-paste into MCP config)
|
|
65
64
|
|
|
66
65
|
```json
|
|
67
66
|
{
|
|
@@ -74,7 +73,9 @@ npm install -g flutter-skill # npm (recommended)
|
|
|
74
73
|
}
|
|
75
74
|
```
|
|
76
75
|
|
|
77
|
-
**
|
|
76
|
+
> Works with **Claude Desktop, Cursor, Windsurf, Copilot, Cline, OpenClaw** — any MCP-compatible agent.
|
|
77
|
+
|
|
78
|
+
**3. Add to your app** (2 lines for Flutter)
|
|
78
79
|
|
|
79
80
|
```dart
|
|
80
81
|
import 'package:flutter_skill/flutter_skill.dart';
|
|
@@ -87,158 +88,118 @@ void main() {
|
|
|
87
88
|
|
|
88
89
|
**4. Test** — just talk to your AI:
|
|
89
90
|
|
|
90
|
-
> *"Launch my app,
|
|
91
|
-
|
|
92
|
-
That's it. Zero configuration.
|
|
91
|
+
> *"Launch my app, explore every screen, and report any bugs"*
|
|
93
92
|
|
|
94
|
-
|
|
95
|
-
<summary><strong>📦 More install methods</strong> (Windows, Docker, IDE extensions)</summary>
|
|
96
|
-
|
|
97
|
-
| Method | Command | Platform |
|
|
98
|
-
|--------|---------|----------|
|
|
99
|
-
| npm | `npm install -g flutter-skill` | All |
|
|
100
|
-
| Homebrew | `brew install ai-dashboad/flutter-skill/flutter-skill` | macOS/Linux |
|
|
101
|
-
| Scoop | `scoop install flutter-skill` | Windows |
|
|
102
|
-
| One-click | `curl -fsSL .../install.sh \| bash` | macOS/Linux |
|
|
103
|
-
| Windows | `iwr .../install.ps1 -useb \| iex` | Windows |
|
|
104
|
-
| Docker | `docker pull ghcr.io/ai-dashboad/flutter-skill` | All |
|
|
105
|
-
| pub.dev | `dart pub global activate flutter_skill` | All |
|
|
106
|
-
| VSCode | Extensions → "Flutter Skill" | All |
|
|
107
|
-
| IntelliJ | Plugins → "Flutter Skill" | All |
|
|
108
|
-
| Agent Skill | `npx skills add ai-dashboad/flutter-skill` | All (28+ agents) |
|
|
109
|
-
|
|
110
|
-
</details>
|
|
93
|
+
That's it. **Zero configuration. Zero test code.**
|
|
111
94
|
|
|
112
95
|
<details>
|
|
113
|
-
<summary
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
96
|
+
<summary>📦 More install methods (Homebrew, Scoop, Docker, IDE, Agent Skill)</summary>
|
|
97
|
+
|
|
98
|
+
| Method | Command |
|
|
99
|
+
|--------|---------|
|
|
100
|
+
| npm | `npm install -g flutter-skill` |
|
|
101
|
+
| Homebrew | `brew install ai-dashboad/flutter-skill/flutter-skill` |
|
|
102
|
+
| Scoop | `scoop install flutter-skill` |
|
|
103
|
+
| Docker | `docker pull ghcr.io/ai-dashboad/flutter-skill` |
|
|
104
|
+
| pub.dev | `dart pub global activate flutter_skill` |
|
|
105
|
+
| VSCode | Extensions → "Flutter Skill" |
|
|
106
|
+
| JetBrains | Plugins → "Flutter Skill" |
|
|
107
|
+
| Agent Skill | `npx skills add ai-dashboad/flutter-skill` |
|
|
108
|
+
| Zero-config | `flutter-skill init` (auto-detects & patches your app) |
|
|
122
109
|
|
|
123
110
|
</details>
|
|
124
111
|
|
|
125
112
|
---
|
|
126
113
|
|
|
127
|
-
## Platforms
|
|
114
|
+
## 8 Platforms, One Tool
|
|
128
115
|
|
|
129
|
-
flutter-skill works
|
|
116
|
+
Most testing tools work on 1-2 platforms. flutter-skill works on **8**.
|
|
130
117
|
|
|
131
|
-
| Platform | SDK |
|
|
132
|
-
|
|
133
|
-
| **Flutter iOS
|
|
134
|
-
| **
|
|
135
|
-
| **Electron** | [`sdks/electron`](sdks/electron/) |
|
|
136
|
-
| **
|
|
137
|
-
| **
|
|
138
|
-
| **
|
|
139
|
-
| **.NET MAUI** | [`sdks/dotnet-maui`](sdks/dotnet-maui/) |
|
|
140
|
-
| **
|
|
141
|
-
|
|
142
|
-
> **181/183 tests passing** across all platforms (99% pass rate)
|
|
143
|
-
|
|
144
|
-
Each SDK README has platform-specific setup instructions. The same CLI and MCP tools work for all platforms.
|
|
145
|
-
|
|
146
|
-
<details>
|
|
147
|
-
<summary><strong>Platform setup examples</strong></summary>
|
|
118
|
+
| Platform | SDK | Test Score |
|
|
119
|
+
|----------|-----|:----------:|
|
|
120
|
+
| **Flutter** (iOS/Android/Web) | [`flutter_skill`](https://pub.dev/packages/flutter_skill) | ✅ 188/195 |
|
|
121
|
+
| **React Native** | [`sdks/react-native`](sdks/react-native/) | ✅ 75/75 |
|
|
122
|
+
| **Electron** | [`sdks/electron`](sdks/electron/) | ✅ 75/75 |
|
|
123
|
+
| **Tauri** (Rust) | [`sdks/tauri`](sdks/tauri/) | ✅ 75/75 |
|
|
124
|
+
| **Android** (Kotlin) | [`sdks/android`](sdks/android/) | ✅ 74/75 |
|
|
125
|
+
| **KMP Desktop** | [`sdks/kmp`](sdks/kmp/) | ✅ 75/75 |
|
|
126
|
+
| **.NET MAUI** | [`sdks/dotnet-maui`](sdks/dotnet-maui/) | ✅ 75/75 |
|
|
127
|
+
| **iOS** (Swift/UIKit) | [`sdks/ios`](sdks/ios/) | ✅ 19/19 |
|
|
148
128
|
|
|
149
|
-
**
|
|
150
|
-
```html
|
|
151
|
-
<script src="flutter-skill.js"></script>
|
|
152
|
-
<script>FlutterSkill.start({ port: 50000 });</script>
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**React Native** — npm install:
|
|
156
|
-
```bash
|
|
157
|
-
npm install flutter-skill
|
|
158
|
-
```
|
|
159
|
-
```js
|
|
160
|
-
import FlutterSkill from 'flutter-skill';
|
|
161
|
-
FlutterSkill.start();
|
|
162
|
-
```
|
|
129
|
+
**Total: 656/664 tests passing (98.8%)** — each platform tested against a complex social media app with 50+ elements.
|
|
163
130
|
|
|
164
|
-
|
|
165
|
-
```swift
|
|
166
|
-
import FlutterSkill
|
|
167
|
-
FlutterSkillBridge.shared.start()
|
|
131
|
+
---
|
|
168
132
|
|
|
169
|
-
|
|
170
|
-
Button("Submit") { submit() }.flutterSkillButton("submitBtn")
|
|
171
|
-
```
|
|
133
|
+
## Why Not Playwright / Appium / Detox?
|
|
172
134
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
**
|
|
135
|
+
| | flutter-skill | Playwright | Appium | Detox |
|
|
136
|
+
|---|:---:|:---:|:---:|:---:|
|
|
137
|
+
| **Setup time** | 30 sec | Minutes | Hours | Hours |
|
|
138
|
+
| **Test code needed** | ❌ None | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
139
|
+
| **AI-native (MCP)** | ✅ | ❌ | ❌ | ❌ |
|
|
140
|
+
| **Platforms** | 8 | 3 (web) | Mobile | React Native |
|
|
141
|
+
| **Natural language** | ✅ | ❌ | ❌ | ❌ |
|
|
142
|
+
| **Maintenance** | Zero | High | High | Medium |
|
|
143
|
+
| **Flutter support** | ✅ Native | Partial | Partial | ❌ |
|
|
144
|
+
| **Desktop apps** | ✅ | ✅ | ❌ | ❌ |
|
|
180
145
|
|
|
181
|
-
|
|
146
|
+
**flutter-skill is the only AI-native E2E testing tool that works across mobile, web, and desktop.**
|
|
182
147
|
|
|
183
148
|
---
|
|
184
149
|
|
|
185
|
-
## What Can
|
|
186
|
-
|
|
187
|
-
**40+ MCP tools** organized in 4 categories:
|
|
150
|
+
## What It Can Do
|
|
188
151
|
|
|
189
152
|
<table>
|
|
190
153
|
<tr>
|
|
191
154
|
<td width="50%" valign="top">
|
|
192
155
|
|
|
193
|
-
### 👀 See
|
|
194
|
-
- `screenshot` —
|
|
195
|
-
- `
|
|
196
|
-
- `
|
|
197
|
-
- `
|
|
198
|
-
- `get_text_content` — extract all text
|
|
156
|
+
### 👀 See
|
|
157
|
+
- `screenshot` — capture the screen
|
|
158
|
+
- `inspect_interactive` — all tappable/typeable elements with semantic refs
|
|
159
|
+
- `find_element` / `wait_for_element`
|
|
160
|
+
- `get_elements` — full element tree
|
|
199
161
|
|
|
200
162
|
</td>
|
|
201
163
|
<td width="50%" valign="top">
|
|
202
164
|
|
|
203
|
-
### 👆 Interact
|
|
204
|
-
- `tap` / `
|
|
205
|
-
- `enter_text`
|
|
206
|
-
- `
|
|
207
|
-
- `go_back`
|
|
208
|
-
- Native: `native_tap`, `native_swipe`
|
|
165
|
+
### 👆 Interact
|
|
166
|
+
- `tap` / `long_press` / `swipe` / `drag`
|
|
167
|
+
- `enter_text` / `set_text` / `clear_text`
|
|
168
|
+
- `scroll` — all directions
|
|
169
|
+
- `go_back` / `press_key`
|
|
209
170
|
|
|
210
171
|
</td>
|
|
211
172
|
</tr>
|
|
212
173
|
<tr>
|
|
213
174
|
<td valign="top">
|
|
214
175
|
|
|
215
|
-
###
|
|
216
|
-
-
|
|
217
|
-
-
|
|
218
|
-
- `
|
|
219
|
-
-
|
|
176
|
+
### 🔍 Inspect (v0.8.0)
|
|
177
|
+
- **Semantic refs**: `button:Login`, `input:Email`
|
|
178
|
+
- Stable across UI changes
|
|
179
|
+
- `tap(ref: "button:Submit")`
|
|
180
|
+
- 7 roles: button, input, toggle, slider, select, link, item
|
|
220
181
|
|
|
221
182
|
</td>
|
|
222
183
|
<td valign="top">
|
|
223
184
|
|
|
224
|
-
### 🚀
|
|
225
|
-
- `launch_app` — launch with flavors
|
|
226
|
-
- `scan_and_connect` — find running apps
|
|
185
|
+
### 🚀 Control
|
|
186
|
+
- `launch_app` — launch with flavors
|
|
227
187
|
- `hot_reload` / `hot_restart`
|
|
228
|
-
- `
|
|
188
|
+
- `get_logs` / `get_errors`
|
|
189
|
+
- `scan_and_connect` — auto-find apps
|
|
229
190
|
|
|
230
191
|
</td>
|
|
231
192
|
</tr>
|
|
232
193
|
</table>
|
|
233
194
|
|
|
234
195
|
<details>
|
|
235
|
-
<summary><strong>
|
|
196
|
+
<summary><strong>40+ tools — full reference</strong></summary>
|
|
236
197
|
|
|
237
198
|
**Launch & Connect:** `launch_app`, `scan_and_connect`, `hot_reload`, `hot_restart`, `list_sessions`, `switch_session`, `close_session`
|
|
238
199
|
|
|
239
|
-
**Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `get_widget_tree`, `find_by_type`, `get_text_content`
|
|
200
|
+
**Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `inspect_interactive`, `get_widget_tree`, `find_by_type`, `get_text_content`
|
|
240
201
|
|
|
241
|
-
**Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `native_tap`, `native_input_text`, `native_swipe`
|
|
202
|
+
**Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `set_text`, `clear_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `press_key`, `native_tap`, `native_input_text`, `native_swipe`
|
|
242
203
|
|
|
243
204
|
**Assertions:** `assert_text`, `assert_visible`, `assert_not_visible`, `assert_element_count`, `wait_for_element`, `wait_for_gone`, `get_checkbox_state`, `get_slider_value`, `get_text_value`
|
|
244
205
|
|
|
@@ -248,88 +209,145 @@ FlutterSkillBridge.start(this)
|
|
|
248
209
|
|
|
249
210
|
---
|
|
250
211
|
|
|
251
|
-
##
|
|
212
|
+
## Platform Setup
|
|
213
|
+
|
|
214
|
+
<details>
|
|
215
|
+
<summary><strong>Flutter</strong> (iOS / Android / Web)</summary>
|
|
216
|
+
|
|
217
|
+
```yaml
|
|
218
|
+
dependencies:
|
|
219
|
+
flutter_skill: ^0.8.1
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
```dart
|
|
223
|
+
import 'package:flutter_skill/flutter_skill.dart';
|
|
224
|
+
|
|
225
|
+
void main() {
|
|
226
|
+
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
|
|
227
|
+
runApp(MyApp());
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
</details>
|
|
232
|
+
|
|
233
|
+
<details>
|
|
234
|
+
<summary><strong>React Native</strong></summary>
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
npm install flutter-skill-react-native
|
|
238
|
+
```
|
|
252
239
|
|
|
240
|
+
```js
|
|
241
|
+
import FlutterSkill from 'flutter-skill-react-native';
|
|
242
|
+
FlutterSkill.start();
|
|
253
243
|
```
|
|
254
|
-
"Test login with test@example.com / password123, verify it reaches the dashboard"
|
|
255
244
|
|
|
256
|
-
|
|
245
|
+
</details>
|
|
257
246
|
|
|
258
|
-
|
|
247
|
+
<details>
|
|
248
|
+
<summary><strong>Electron</strong></summary>
|
|
259
249
|
|
|
260
|
-
|
|
250
|
+
```bash
|
|
251
|
+
npm install flutter-skill-electron
|
|
261
252
|
```
|
|
262
253
|
|
|
263
|
-
|
|
254
|
+
```js
|
|
255
|
+
const { FlutterSkillBridge } = require('flutter-skill-electron');
|
|
256
|
+
FlutterSkillBridge.start(mainWindow);
|
|
257
|
+
```
|
|
264
258
|
|
|
265
|
-
|
|
259
|
+
</details>
|
|
266
260
|
|
|
267
|
-
|
|
261
|
+
<details>
|
|
262
|
+
<summary><strong>iOS (Swift)</strong></summary>
|
|
268
263
|
|
|
269
|
-
|
|
264
|
+
```swift
|
|
265
|
+
// Swift Package Manager: FlutterSkillSDK
|
|
266
|
+
import FlutterSkill
|
|
267
|
+
FlutterSkillBridge.shared.start()
|
|
270
268
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
| Screenshot | `xcrun simctl` | `adb screencap` |
|
|
274
|
-
| Tap | macOS Accessibility | `adb input tap` |
|
|
275
|
-
| Text input | Pasteboard + Cmd+V | `adb input text` |
|
|
276
|
-
| Swipe | Accessibility scroll | `adb input swipe` |
|
|
269
|
+
Text("Hello").flutterSkillId("greeting")
|
|
270
|
+
```
|
|
277
271
|
|
|
278
|
-
|
|
272
|
+
</details>
|
|
279
273
|
|
|
280
|
-
|
|
274
|
+
<details>
|
|
275
|
+
<summary><strong>Android (Kotlin)</strong></summary>
|
|
281
276
|
|
|
282
|
-
|
|
277
|
+
```kotlin
|
|
278
|
+
implementation("com.flutterskill:flutter-skill:0.8.0")
|
|
283
279
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
| "Not connected" | `flutter-skill scan_and_connect` to auto-find apps |
|
|
287
|
-
| "Unknown method" | `flutter pub add flutter_skill` then restart (not hot reload) |
|
|
288
|
-
| No VM Service URI | Add `--vm-service-port=50000` to launch args |
|
|
289
|
-
| Claude Code priority | Run `flutter_skill setup` for priority rules |
|
|
280
|
+
FlutterSkillBridge.start(this)
|
|
281
|
+
```
|
|
290
282
|
|
|
291
|
-
|
|
283
|
+
</details>
|
|
292
284
|
|
|
293
|
-
|
|
285
|
+
<details>
|
|
286
|
+
<summary><strong>Tauri (Rust)</strong></summary>
|
|
294
287
|
|
|
295
|
-
|
|
288
|
+
```toml
|
|
289
|
+
[dependencies]
|
|
290
|
+
flutter-skill-tauri = "0.8.0"
|
|
291
|
+
```
|
|
296
292
|
|
|
297
|
-
|
|
298
|
-
<tr>
|
|
299
|
-
<td>
|
|
293
|
+
</details>
|
|
300
294
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
- [npm](https://www.npmjs.com/package/flutter-skill)
|
|
304
|
-
- [Homebrew](https://github.com/ai-dashboad/homebrew-flutter-skill)
|
|
295
|
+
<details>
|
|
296
|
+
<summary><strong>KMP Desktop</strong></summary>
|
|
305
297
|
|
|
306
|
-
|
|
307
|
-
<td>
|
|
298
|
+
Add Gradle dependency — see [`sdks/kmp`](sdks/kmp/) for details.
|
|
308
299
|
|
|
309
|
-
|
|
310
|
-
- [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=ai-dashboad.flutter-skill)
|
|
311
|
-
- [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/29991-flutter-skill)
|
|
300
|
+
</details>
|
|
312
301
|
|
|
313
|
-
|
|
314
|
-
<
|
|
302
|
+
<details>
|
|
303
|
+
<summary><strong>.NET MAUI</strong></summary>
|
|
315
304
|
|
|
316
|
-
|
|
317
|
-
- [Roadmap](docs/ROADMAP.md)
|
|
318
|
-
- [Changelog](CHANGELOG.md)
|
|
319
|
-
- [Architecture](docs/ARCHITECTURE.md)
|
|
305
|
+
Add NuGet package — see [`sdks/dotnet-maui`](sdks/dotnet-maui/) for details.
|
|
320
306
|
|
|
321
|
-
</
|
|
322
|
-
</tr>
|
|
323
|
-
</table>
|
|
307
|
+
</details>
|
|
324
308
|
|
|
325
309
|
---
|
|
326
310
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
311
|
+
## Example Prompts
|
|
312
|
+
|
|
313
|
+
Just tell your AI what to test:
|
|
314
|
+
|
|
315
|
+
| Prompt | What happens |
|
|
316
|
+
|--------|-------------|
|
|
317
|
+
| *"Test login with wrong password"* | Screenshots → enters creds → taps login → verifies error |
|
|
318
|
+
| *"Explore every screen and report bugs"* | Systematically navigates all screens, tests all elements |
|
|
319
|
+
| *"Fill registration with edge cases"* | Tests emoji 🌍, long strings, empty fields, special chars |
|
|
320
|
+
| *"Compare checkout flow on iOS and Android"* | Runs same test on both platforms, compares screenshots |
|
|
321
|
+
| *"Take screenshots of all 5 tabs"* | Taps each tab, captures state |
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Contributing
|
|
326
|
+
|
|
327
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
git clone https://github.com/ai-dashboad/flutter-skill
|
|
331
|
+
cd flutter-skill
|
|
332
|
+
dart pub get
|
|
333
|
+
dart run bin/flutter_skill.dart server # Start MCP server
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Links
|
|
339
|
+
|
|
340
|
+
| | |
|
|
341
|
+
|---|---|
|
|
342
|
+
| 📦 [pub.dev](https://pub.dev/packages/flutter_skill) | 🧩 [VSCode](https://marketplace.visualstudio.com/items?itemName=AIDashboard.flutter-skill) |
|
|
343
|
+
| 📦 [npm](https://www.npmjs.com/package/flutter-skill) | 🧩 [JetBrains](https://plugins.jetbrains.com/plugin/29991-flutter-skill) |
|
|
344
|
+
| 🍺 [Homebrew](https://github.com/ai-dashboad/homebrew-flutter-skill) | 📖 [Docs](docs/USAGE_GUIDE.md) |
|
|
345
|
+
| 🤖 [Agent Skill](https://skills.sh/ai-dashboad/flutter-skill) | 📋 [Changelog](CHANGELOG.md) |
|
|
346
|
+
|
|
347
|
+
---
|
|
330
348
|
|
|
331
349
|
<p align="center">
|
|
332
|
-
<
|
|
350
|
+
<strong>⭐ If flutter-skill saves you time, star it so others can find it too!</strong>
|
|
333
351
|
</p>
|
|
334
352
|
|
|
335
|
-
<p align="center">MIT License</p>
|
|
353
|
+
<p align="center">MIT License © 2025</p>
|
package/dart/pubspec.yaml
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: flutter_skill_npm
|
|
2
2
|
description: Give your AI Agent eyes and hands inside your Flutter app.
|
|
3
3
|
version: 0.2.0
|
|
4
|
+
publish_to: 'none'
|
|
4
5
|
homepage: https://github.com/ai-dashboad/flutter-skill
|
|
5
6
|
repository: https://github.com/ai-dashboad/flutter-skill
|
|
6
|
-
# publish_to: 'none' # Remove this when ready to publish to pub.dev
|
|
7
7
|
|
|
8
8
|
executables:
|
|
9
9
|
flutter_skill: flutter_skill
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flutter-skill",
|
|
3
|
-
"mcpName": "io.github.
|
|
4
|
-
"version": "0.
|
|
3
|
+
"mcpName": "io.github.ai-dashboad/flutter-skill",
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"description": "MCP Server for app automation - Give your AI Agent eyes and hands inside any app (Flutter, React, Web, Native)",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"bin": {
|