Token导航 LogoToken导航TokenDH.com
研究检索需要联网github未标认证来源可访问clear审计未展示

flutter-developmentFlutter 开发

Agent Skill

用于辅助测试设计、自动化测试、用例整理和回归验证。它适合让 Agent 编写单元测试、端到端测试、测试计划或根据失败日志定位问题。使用时需要确认项目测试框架、运行命令和夹具数据,避免为了通过测试而改坏真实逻辑;涉及浏览器或外部服务时,应区分本地模拟、测试环境和生产环境。

总安装

98

周安装

4

GitHub Stars

公开资料未说明

下载量

31
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:flutter-development(Flutter 开发)
来源仓库:https://github.com/orgoj/cac-test
仓库路径:skills/flutter-development
安装命令:
npx skills add orgoj/cac-test --skill "flutter-development"
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

AgentSkills.tonpx skills
npx skills add orgoj/cac-test --skill "flutter-development"

简介

用于辅助 Flutter 开发,支持测试设计、用例整理和回归验证,适合让 Agent 编写单元测试或端到端测试。

  • 适用于测试类任务,需确认项目测试框架和运行命令;涉及外部服务时应区分环境与模拟。
  • 通过 npx skills add orgoj/cac-test --skill "flutter-development" 命令安装。
  • 安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写操作。
  • 适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

SKILL.md

Flutter Development

Build beautiful, natively compiled applications for mobile, web, and desktop from a single codebase using Flutter and Dart.

When to use this Skill

Use this Skill when:

  • Creating new Flutter applications
  • Working with Flutter widgets and UI components
  • Implementing state management (Provider, BLoC, Riverpod)
  • Setting up navigation and routing
  • Integrating APIs and HTTP requests
  • Debugging Flutter applications
  • Following Flutter best practices
  • User mentions Flutter, Dart, mobile apps, iOS, Android, or cross-platform development

Project structure

Standard Flutter project:

my_flutter_app/
├── lib/
│   ├── main.dart           # App entry point
│   ├── screens/            # Screen widgets
│   ├── widgets/            # Reusable widgets
│   ├── models/             # Data models
│   ├── services/           # API, database services
│   └── providers/          # State management
├── pubspec.yaml            # Dependencies and assets
├── test/                   # Unit and widget tests
└── assets/                 # Images, fonts, etc.

Common Flutter commands

Create new project

flutter create my_app
cd my_app

Run application

flutter run              # Default device
flutter run -d chrome    # Web
flutter run -d linux     # Linux desktop
flutter run -d android   # Android device/emulator

Manage dependencies

flutter pub add package_name    # Add dependency
flutter pub get                 # Install dependencies
flutter pub upgrade            # Update dependencies

Testing and building

flutter test                   # Run tests
flutter analyze               # Static analysis
flutter build apk             # Android APK
flutter build ios             # iOS build
flutter build web             # Web build

Basic Flutter app template

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter App',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Home'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: const Center(
        child: Text('Hello, Flutter!'),
      ),
    );
  }
}

State management with Provider

Install Provider:

flutter pub add provider

Example usage:

// 1. Create a ChangeNotifier model
class Counter extends ChangeNotifier {
  int _count = 0;
  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}

// 2. Wrap app with ChangeNotifierProvider
void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => Counter(),
      child: const MyApp(),
    ),
  );
}

// 3. Access in widgets
class CounterDisplay extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final counter = context.watch<Counter>();
    return Text('Count: ${counter.count}');
  }
}

// 4. Trigger updates
ElevatedButton(
  onPressed: () => context.read<Counter>().increment(),
  child: const Text('Increment'),
)

Navigation

Basic navigation

// Navigate to new screen
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => const SecondScreen()),
);

// Navigate back
Navigator.pop(context);

// Navigate with data
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => DetailScreen(data: myData),
  ),
);

GoRouter (recommended for complex apps)

flutter pub add go_router
final router = GoRouter(
  routes: [
    GoRoute(
      path: '/',
      builder: (context, state) => const HomeScreen(),
    ),
    GoRoute(
      path: '/details/:id',
      builder: (context, state) {
        final id = state.pathParameters['id']!;
        return DetailScreen(id: id);
      },
    ),
  ],
);

// Use in app
MaterialApp.router(
  routerConfig: router,
)

// Navigate
context.go('/details/123');

HTTP requests

Install http package:

flutter pub add http

Example:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<List<User>> fetchUsers() async {
  final response = await http.get(
    Uri.parse('https://api.example.com/users'),
  );

  if (response.statusCode == 200) {
    final List<dynamic> data = json.decode(response.body);
    return data.map((json) => User.fromJson(json)).toList();
  } else {
    throw Exception('Failed to load users');
  }
}

// Use with FutureBuilder
FutureBuilder<List<User>>(
  future: fetchUsers(),
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return ListView.builder(
        itemCount: snapshot.data!.length,
        itemBuilder: (context, index) {
          return ListTile(title: Text(snapshot.data![index].name));
        },
      );
    } else if (snapshot.hasError) {
      return Text('Error: ${snapshot.error}');
    }
    return const CircularProgressIndicator();
  },
)

Essential widgets

Layout widgets

  • Container - Box model with padding, margin, decoration
  • Column - Vertical layout
  • Row - Horizontal layout
  • Stack - Layered widgets
  • Expanded - Fills available space
  • Padding - Adds padding around widget
  • Center - Centers child widget
  • SizedBox - Fixed size box or spacer

Input widgets

  • TextField - Text input
  • Form - Group input fields with validation
  • Checkbox - Boolean selection
  • Radio - Single choice from options
  • Switch - Toggle on/off
  • Slider - Select value from range
  • DropdownButton - Select from dropdown

Display widgets

  • Text - Display text with styling
  • Image - Display images (network, asset, file)
  • Icon - Material or custom icons
  • Card - Material Design card
  • ListTile - Standard list item

Interactive widgets

  • ElevatedButton - Raised button with elevation
  • TextButton - Flat text button
  • IconButton - Button with icon
  • FloatingActionButton - Floating action button
  • GestureDetector - Detect gestures (tap, swipe, etc.)
  • InkWell - Touch feedback with ripple

Async widgets

  • FutureBuilder - Build based on Future
  • StreamBuilder - Build based on Stream

Best practices

DO:

✅ Use const constructors wherever possible for better performance ✅ Implement proper dispose() methods to prevent memory leaks ✅ Extract widgets into separate classes for reusability ✅ Use meaningful, descriptive widget names ✅ Separate business logic from UI (use services/providers) ✅ Handle errors comprehensively with try-catch ✅ Test on both iOS and Android platforms ✅ Use responsive design (MediaQuery, LayoutBuilder) ✅ Follow Dart naming conventions (lowerCamelCase for variables, UpperCamelCase for classes) ✅ Add comments for complex logic

DON'T:

❌ Hardcode values (use constants or configuration) ❌ Use complex setState logic (prefer state management solutions) ❌ Make network calls in build() methods ❌ Skip testing phases ❌ Ignore platform-specific differences ❌ Create deeply nested widget trees (extract to methods/classes) ❌ Store heavy objects in state unnecessarily ❌ Forget to add loading and error states

Common patterns

Stateless vs Stateful widgets

  • StatelessWidget: UI doesn't change, no mutable state
  • StatefulWidget: UI changes based on state updates

Lifting state up

Move state to common ancestor when multiple widgets need access:

class Parent extends StatefulWidget {
  @override
  State<Parent> createState() => _ParentState();
}

class _ParentState extends State<Parent> {
  int _count = 0;

  void _increment() => setState(() => _count++);

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ChildA(count: _count),
        ChildB(onPressed: _increment),
      ],
    );
  }
}

Responsive design

Widget build(BuildContext context) {
  final size = MediaQuery.of(context).size;
  final isLargeScreen = size.width > 600;

  return isLargeScreen
      ? Row(children: [...])  // Tablet/Desktop layout
      : Column(children: [...]);  // Mobile layout
}

Debugging tips

  1. Hot reload: Press r in terminal or save file (for quick UI updates)
  2. Hot restart: Press R in terminal (for state reset)
  3. Flutter DevTools: Run flutter pub global activate devtools then flutter pub global run devtools
  4. Debug print: Use debugPrint() instead of print()
  5. Widget inspector: Enable in DevTools to inspect widget tree
  6. Performance overlay: flutter run --profile for performance metrics

Instructions for Claude

When helping with Flutter development:

  1. Always check Flutter installation before creating projects
  2. Create proper project structure following Flutter conventions
  3. Use Material Design 3 (useMaterial3: true) for modern UI
  4. Implement responsive design considering different screen sizes
  5. Add proper error handling and loading states
  6. Use const constructors wherever possible
  7. Follow Dart naming conventions throughout the code
  8. Add helpful comments for complex logic
  9. Suggest appropriate state management based on app complexity
  10. Test code structure before suggesting advanced features
  11. Provide both code and explanations for learning
  12. Include pubspec.yaml changes when adding dependencies

Common issues and solutions

Issue: "Waiting for another flutter command to release the startup lock"

Solution: Delete flutter.lock file or restart terminal

Issue: "Gradle build failed"

Solution: Run flutter clean then flutter pub get

Issue: "setState called during build"

Solution: Move setState calls to lifecycle methods or use Future.microtask

Issue: "RenderBox overflow"

Solution: Wrap content in SingleChildScrollView or use Flexible/Expanded widgets

Issue: Hot reload not working

Solution: Use hot restart (R) or restart app completely

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

04

需要参考平台分布和安装热度时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

66.92%
按下载量换算21

Claude Code

26.3%
按下载量换算8

安全审计

暂无安全审计结果可展示。

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills