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

flutter-devFlutter DEV 搜索

Agent Skill

flutter-dev 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

2,661

周安装

112

GitHub Stars

公开资料未说明

下载量

932
CodexClaudeCursorGemini CLI

安装说明

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

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

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

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

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/bogdanustyak/flutter-expert-skill --skill flutter-dev

简介

flutter-dev 用于在 DEV.to 等平台搜索 Flutter 开发相关内容,支持关键词筛选与信息聚合。

  • 适用于在 Codex、Claude、Cursor、Gemini CLI 中快速获取社区讨论、教程或技术动态。
  • 通过 npx skills add 命令从指定仓库安装,具体接口需参照原始技能文档说明。
  • 使用前应确认是否依赖外部 API 或产生网络流量,确保符合组织安全策略。
  • 适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

SKILL.md

Flutter Development Expert

Expert guidance for Flutter and Dart development following official Flutter team best practices.

Core Development Principles

Code Philosophy

  • Apply SOLID principles throughout the codebase
  • Write concise, modern, technical Dart code with functional and declarative patterns
  • Favor composition over inheritance for building complex widgets and logic
  • Prefer immutable data structures, especially for widgets (use StatelessWidget when possible)
  • Separate ephemeral state from app state using appropriate state management
  • Keep functions short with single purpose (strive for less than 20 lines)
  • Use meaningful, descriptive names - avoid abbreviations

Project Structure Assumptions

  • Standard Flutter project structure with lib/main.dart as entry point
  • Organize by logical layers: Presentation (widgets/screens), Domain (business logic), Data (models/API clients), Core (utilities/extensions)
  • For larger projects: organize by feature with presentation/domain/data subfolders per feature

Interaction Guidelines

When generating code:

  • Provide explanations for Dart-specific features (null safety, futures, streams)
  • If request is ambiguous, ask for clarification on functionality and target platform
  • When suggesting new dependencies from pub.dev, explain their benefits
  • Use dart format tool for consistent formatting
  • Use dart fix tool to automatically fix common errors
  • Use the Dart linter with recommended rules to catch issues

Code Quality Standards

Styling Rules

  • Line length: 80 characters or fewer
  • Naming conventions:

- PascalCase for classes - camelCase for members/variables/functions/enums - snake_case for files

  • No trailing comments
  • Use arrow syntax for simple one-line functions

Error Handling

  • Anticipate and handle potential errors - never fail silently
  • Use try-catch blocks with appropriate exception types
  • Use custom exceptions for code-specific situations
  • Proper async/await usage with robust error handling

Documentation

  • Add dartdoc comments to all public APIs (classes, constructors, methods, top-level functions)
  • Write clear comments for complex/non-obvious code
  • Use /// for doc comments
  • Start with single-sentence summary ending with period
  • Comment why code is written a certain way, not what it does

Dart Best Practices

Type System & Null Safety

  • Write soundly null-safe code
  • Leverage Dart's null safety features
  • Avoid ! operator unless value is guaranteed non-null
  • Use pattern matching features where they simplify code
  • Use records to return multiple types when defining a class is cumbersome
  • Prefer exhaustive switch statements/expressions (no break needed)

Async Programming

  • Use Futures, async, await for single asynchronous operations
  • Use Streams for sequences of asynchronous events
  • Ensure proper error handling in async operations

Class & Library Organization

  • Define related classes within the same library file
  • For large libraries: export smaller private libraries from single top-level library
  • Group related libraries in same folder

Flutter Best Practices

Widget Design

  • Widgets (especially StatelessWidget) are immutable
  • When UI needs to change, Flutter rebuilds widget tree
  • Prefer composing smaller widgets over extending existing ones
  • Use small, private Widget classes instead of private helper methods returning widgets
  • Break down large build() methods into smaller, reusable private Widget classes
  • Use const constructors whenever possible to reduce rebuilds

Performance Optimization

  • Use ListView.builder or SliverList for long lists (lazy-loaded)
  • Use compute() to run expensive calculations in separate isolate (e.g., JSON parsing)
  • Avoid expensive operations (network calls, complex computations) in build() methods
  • Use const constructors in build() methods to minimize rebuilds

Responsive Design

  • Use LayoutBuilder or MediaQuery for responsive UIs
  • Ensure mobile responsive design across different screen sizes
  • Test on mobile and web platforms

State Management

Prefer Flutter's built-in solutions unless third-party explicitly requested:

Built-in Solutions (in order of simplicity)

  1. ValueNotifier + ValueListenableBuilder - Simple, local state with single value
final ValueNotifier<int> _counter = ValueNotifier<int>(0);

ValueListenableBuilder<int>(
  valueListenable: _counter,
  builder: (context, value, child) => Text('Count: $value'),
);
  1. ChangeNotifier + ListenableBuilder - Complex/shared state across widgets
class CounterModel extends ChangeNotifier {
  int _count = 0;
  int get count => _count;
  void increment() {
    _count++;
    notifyListeners();
  }
}

ListenableBuilder(
  listenable: counterModel,
  builder: (context, child) => Text('${counterModel.count}'),
);
  1. Streams + StreamBuilder - Sequences of asynchronous events
  2. Futures + FutureBuilder - Single async operations

Advanced Patterns

  • MVVM: Model-View-ViewModel pattern for robust applications
  • Dependency Injection: Use manual constructor injection for explicit dependencies
  • Provider: Only if explicitly requested for DI beyond manual injection

Navigation

GoRouter (Recommended)

Use go_router for declarative navigation, deep linking, and web support:

// Add dependency
flutter pub add go_router

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

// Use in MaterialApp
MaterialApp.router(routerConfig: _router);
  • Configure redirect property for authentication flows
  • Use for deep-linkable routes

Navigator (Built-in)

Use for short-lived screens not needing deep links (dialogs, temporary views):

Navigator.push(context, MaterialPageRoute(builder: (context) => DetailsScreen()));
Navigator.pop(context);

Package Management

Using pub Tool

  • Add dependency: flutter pub add <package_name>
  • Add dev dependency: flutter pub add dev:<package_name>
  • Add override: flutter pub add override:<package_name>:1.0.0
  • Remove dependency: dart pub remove <package_name>

External Packages

  • Search pub.dev for suitable, stable packages
  • Explain benefits when suggesting new dependencies

Data Handling

JSON Serialization

Use json_serializable and json_annotation:

import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';

@JsonSerializable(fieldRename: FieldRename.snake)
class User {
  final String firstName;
  final String lastName;

  User({required this.firstName, required this.lastName});

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}

Code Generation

  • Ensure build_runner is dev dependency
  • Run after modifications: dart run build_runner build --delete-conflicting-outputs

Logging

Use dart:developer for structured logging:

import 'dart:developer' as developer;

// Simple messages
developer.log('User logged in successfully.');

// Structured error logging
try {
  // code
} catch (e, s) {
  developer.log(
    'Failed to fetch data',
    name: 'myapp.network',
    level: 1000, // SEVERE
    error: e,
    stackTrace: s,
  );
}

UI & Theming

Material Design 3 & ThemeData

Use ColorScheme.fromSeed() for harmonious palettes:

MaterialApp(
  theme: ThemeData(
    colorScheme: ColorScheme.fromSeed(
      seedColor: Colors.deepPurple,
      brightness: Brightness.light,
    ),
    textTheme: TextTheme(
      displayLarge: TextStyle(fontSize: 57, fontWeight: FontWeight.bold),
      bodyMedium: TextStyle(fontSize: 14, height: 1.4),
    ),
  ),
  darkTheme: ThemeData(
    colorScheme: ColorScheme.fromSeed(
      seedColor: Colors.deepPurple,
      brightness: Brightness.dark,
    ),
  ),
  themeMode: ThemeMode.system,
);

Custom Theme Extensions

For custom design tokens beyond standard ThemeData:

@immutable
class MyColors extends ThemeExtension<MyColors> {
  const MyColors({required this.success, required this.danger});
  final Color? success;
  final Color? danger;

  @override
  ThemeExtension<MyColors> copyWith({Color? success, Color? danger}) {
    return MyColors(success: success ?? this.success, danger: danger ?? this.danger);
  }

  @override
  ThemeExtension<MyColors> lerp(ThemeExtension<MyColors>? other, double t) {
    if (other is! MyColors) return this;
    return MyColors(
      success: Color.lerp(success, other.success, t),
      danger: Color.lerp(danger, other.danger, t),
    );
  }
}

// Register in ThemeData
theme: ThemeData(
  extensions: [MyColors(success: Colors.green, danger: Colors.red)],
),

// Use in widgets
Container(color: Theme.of(context).extension<MyColors>()!.success)

Fonts

Use google_fonts package for custom fonts:

flutter pub add google_fonts

final TextTheme appTextTheme = TextTheme(
  displayLarge: GoogleFonts.oswald(fontSize: 57, fontWeight: FontWeight.bold),
  titleLarge: GoogleFonts.roboto(fontSize: 22, fontWeight: FontWeight.w500),
  bodyMedium: GoogleFonts.openSans(fontSize: 14),
);

Images & Assets

Declare in pubspec.yaml:

flutter:
  uses-material-design: true
  assets:
    - assets/images/
// Local images
Image.asset('assets/images/placeholder.png')

// Network images (always include error handling)
Image.network(
  'https://example.com/image.png',
  loadingBuilder: (context, child, progress) {
    if (progress == null) return child;
    return Center(child: CircularProgressIndicator());
  },
  errorBuilder: (context, error, stackTrace) => Icon(Icons.error),
)

Layout Best Practices

Flexible Layouts

  • Expanded: Fill remaining space in Row/Column
  • Flexible: Shrink to fit (don't combine with Expanded)
  • Wrap: Auto-wrap to next line on overflow
  • SingleChildScrollView: For fixed-size content larger than viewport
  • ListView.builder/GridView.builder: For long lists (lazy loading)
  • FittedBox: Scale/fit single child within parent
  • LayoutBuilder: Responsive layouts based on available space

Stack Layouts

  • Positioned: Precisely place child by anchoring to edges
  • Align: Position using alignments (e.g., Alignment.center)

Overlays

Use OverlayPortal for UI elements on top of everything:

final _controller = OverlayPortalController();

OverlayPortal(
  controller: _controller,
  overlayChildBuilder: (context) => Positioned(
    top: 50,
    left: 10,
    child: Card(child: Text('Overlay content')),
  ),
  child: ElevatedButton(
    onPressed: _controller.toggle,
    child: Text('Toggle'),
  ),
)

Visual Design Principles

Design Guidelines

  • Build beautiful, intuitive UIs following modern design
  • Ensure responsive across screen sizes (mobile & web)
  • Provide intuitive navigation
  • Use typography hierarchy (hero text, headlines, keywords)
  • Apply subtle background textures for premium feel
  • Use multi-layered shadows for depth
  • Incorporate icons for enhanced understanding
  • Interactive elements have shadows with color glow effects

Color Guidelines

  • 60-30-10 Rule: 60% primary/neutral, 30% secondary, 10% accent
  • Contrast Ratios (WCAG 2.1):

- Normal text: 4.5:1 minimum - Large text (18pt or 14pt bold): 3:1 minimum

  • Avoid complementary colors for text/background (causes eye strain)
  • Use complementary colors sparingly for accents

Typography

  • Limit to 1-2 font families
  • Prioritize legibility (sans-serif for UI body text)
  • Line height: 1.4x-1.6x font size
  • Line length: 45-75 characters for body text
  • Avoid all caps for long-form text

Testing

Test Types

  • Unit Tests: package:test for domain logic, data layer, state management
  • Widget Tests: package:flutter_test for UI components
  • Integration Tests: package:integration_test for end-to-end flows

Testing Best Practices

  • Follow Arrange-Act-Assert (Given-When-Then) pattern
  • Prefer package:checks for more expressive assertions
  • Prefer fakes/stubs over mocks
  • If mocks necessary: use mockito or mocktail
  • Aim for high test coverage
  • Write testable code: use file, process, platform packages for dependency injection

Running Tests

flutter test

Accessibility (A11y)

  • Color Contrast: Text minimum 4.5:1 ratio against background
  • Dynamic Text Scaling: Test UI with increased system font size
  • Semantic Labels: Use Semantics widget for clear, descriptive labels
  • Screen Reader Testing: Test with TalkBack (Android) and VoiceOver (iOS)

Analysis & Linting

Include in analysis_options.yaml:

include: package:flutter_lints/flutter.yaml

linter:
  rules:
    # Add additional lint rules here

Additional Resources

For detailed patterns and examples, see:

  • references/navigation_patterns.md - Advanced navigation patterns with GoRouter
  • references/state_patterns.md - Comprehensive state management examples
  • references/theme_patterns.md - Advanced theming and styling patterns

适合场景

01

用户想查找某类 Agent Skill 时

02

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

03

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

04

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

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

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

能力 4

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

能力 5

展示第三方安全扫描或审计结果

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

平台分布

Claude Code

29.26%
按下载量换算273

Antigravity

22.8%
按下载量换算212

Gemini CLI

18.07%
按下载量换算168

OpenCode

13.95%
按下载量换算130

Cursor

7.19%
按下载量换算67

windsurf

3.19%
按下载量换算30

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

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

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

来源信息

继续浏览同类 Skills