بنقرة واحدة
material-design-3
严格遵循Material Design 3配色规范的守护工具,提供Flutter应用界面配色最佳实践指南,确保UI一致性和可访问性
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
严格遵循Material Design 3配色规范的守护工具,提供Flutter应用界面配色最佳实践指南,确保UI一致性和可访问性
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
迁移小组件到事件携带数据模式,优化刷新性能。将数据直接放在事件中传递,小组件直接使用事件数据,避免重复的缓存访问操作。
确保小组件组件根据 HomeWidgetSize 正确调整各元素大小,包括容器、图标、字体、间距、线条粗细等
为插件主页添加带过滤器的列表小组件,使用 commonWidgetsProvider 支持多种公共组件样式,根据过滤条件选择使用多步骤 data selectors 或自定义表单
将插件中内置的dataRenderer(自定义UI)封装成标准的公共小组件,使其可被其他插件或功能复用。核心特性:(1)提取dataRenderer的UI逻辑创建独立组件文件,(2)在common_widgets.dart中注册新组件,(3)在_provideCommonWidgets中添加数据提供函数,(4)移除旧的内置渲染器代码
从 code_snippet 原型文件创建可预览的 Dart 小组件。自动分析 HTML 设计、生成 Flutter 组件、注册路由并添加到组件展示列表。
为Flutter插件添加可配置的选择器小组件(HomeWidget),支持用户点击配置、数据选择和动态数据渲染。核心特性:(1) 配置dataSelector保存必要数据,(2) 通过controller传递id获取最新数据,(3) 支持导航到详情页
| name | Material Design 3 配色规范守护者 |
| description | 严格遵循Material Design 3配色规范的守护工具,提供Flutter应用界面配色最佳实践指南,确保UI一致性和可访问性 |
// 主题配置(全局)
MaterialApp(
theme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue, // 主色调种子
brightness: Brightness.light, // 或 Brightness.dark
),
),
// ...
)
// ✅ 正确:使用系统定义的标准背景色
Scaffold(
backgroundColor: Theme.of(context).colorScheme.surface,
// ...
)
// ❌ 错误:硬编码颜色
// backgroundColor: Colors.white,
// ✅ 正确:使用容器专用背景色
Card(
color: Theme.of(context).colorScheme.surfaceContainerLow,
child: // ...
)
// 或使用 Container
Container(
color: Theme.of(context).colorScheme.surfaceContainer,
child: // ...
)
// ✅ 正确:自动适配的文字颜色
Text(
'标题文字',
style: Theme.of(context).textTheme.titleLarge?.copyWith(
color: Theme.of(context).colorScheme.onSurface,
),
)
// ✅ 正确:InputDecoration 自动使用 onSurface
TextField(
decoration: InputDecoration(
labelText: '用户名',
hintText: '请输入用户名',
// labelStyle/hintStyle 会自动使用 onSurface 的变体
),
)
// 主要按钮
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.primary,
foregroundColor: Theme.of(context).colorScheme.onPrimary,
),
onPressed: () {},
child: Text('主要操作'),
)
// 次要按钮
OutlinedButton(
style: OutlinedButton.styleFrom(
foregroundColor: Theme.of(context).colorScheme.primary,
),
onPressed: () {},
child: Text('次要操作'),
)
// 文本按钮
TextButton(
style: TextButton.styleFrom(
foregroundColor: Theme.of(context).colorScheme.primary,
),
onPressed: () {},
child: Text('文本按钮'),
)
// AppBar
AppBar(
backgroundColor: Theme.of(context).colorScheme.surface,
foregroundColor: Theme.of(context).colorScheme.onSurface,
// ...
)
// 底部导航
NavigationBar(
backgroundColor: Theme.of(context).colorScheme.surface,
indicatorColor: Theme.of(context).colorScheme.secondaryContainer,
// ...
)
TextField(
decoration: InputDecoration(
// 错误状态
errorText: '错误信息',
errorStyle: TextStyle(
color: Theme.of(context).colorScheme.error,
),
// 聚焦状态边框
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary,
),
),
),
)
ListTile(
tileColor: Theme.of(context).colorScheme.surface,
textColor: Theme.of(context).colorScheme.onSurface,
iconColor: Theme.of(context).colorScheme.onSurfaceVariant,
// ...
)
| UI 元素 | 前景色 | 背景色 | 边框色 |
|---|---|---|---|
| 主要内容 | onSurface | surface | outline |
| 次要内容 | onSurfaceVariant | surfaceVariant | outlineVariant |
| 禁用内容 | onSurfaceDisabled | surfaceDisabled | - |
| 错误状态 | onError | error | errorContainer |
| 成功状态 | onPrimary | primary | primaryContainer |
| 警告状态 | onSecondary | secondary | secondaryContainer |
// 主题切换
MaterialApp(
theme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue,
brightness: Brightness.light,
),
),
darkTheme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.blue,
brightness: Brightness.dark,
),
),
// ...
)
// ❌ 错误:硬编码颜色
Container(color: Colors.white, ...)
// ❌ 错误:使用错误的颜色语义
Text('Hello', color: Colors.grey) // 应该使用 onSurface 或 onSurfaceVariant
// ❌ 错误:忽略主题
TextField(decoration: InputDecoration(fillColor: Colors.red))
// ✅ 正确:使用主题颜色
Container(color: Theme.of(context).colorScheme.surface)
Text('Hello', style: TextStyle(color: Theme.of(context).colorScheme.onSurface))
TextField(decoration: InputDecoration(fillColor: Theme.of(context).colorScheme.surface))