用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/K9i-0/flutter_deck_template --skill flutter-deck-slide命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | flutter-deck-slide |
| description | flutter_deckでプレゼンテーションスライドを作成・編集。「スライドを追加」「新しいスライド」「スライドを編集」「テーマ変更」「コード挿入」「画像追加」「プレビュー」などで発動。 |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash(flutter:*), mcp__marionette__connect, mcp__marionette__take_screenshots, mcp__marionette__tap, mcp__marionette__hot_reload |
flutter_deckを使ったプレゼンテーションスライドの作成・編集を支援するスキル。
まず既存のスライドを確認:
lib/slides/
├── slides.dart # バレルファイル
└── NN_*_slide.dart # 各スライド
既存スライドの番号を確認し、適切な位置に挿入:
新規ファイルをlib/slides/NN_descriptive_name_slide.dartとして作成。
lib/slides/slides.dartにexportを追加:
export 'NN_descriptive_name_slide.dart';
lib/main.dartのslidesリストに追加。
スライド追加・編集後、以下を提案する:
重要: カンファレンス発表ではフォントサイズ 20pt以上 を必ず使用すること。 20pt未満は会場後方から読めないため使用禁止。
| スタイル | サイズ | 用途 |
|---|---|---|
display | 103pt | 大見出し |
header | 57pt | ヘッダー |
title | 54pt | タイトル |
subtitle | 42pt | サブタイトル |
bodyLarge | 32pt | 本文(大) |
bodyMedium | 26pt | 本文(中) |
bodySmall | 22pt | 本文(小)最小推奨 |
カスタムTextStyleを使う場合も fontSize: 20 以上を維持する。
assets/images/ に配置するpubspec.yaml の assets セクションに登録が必要flutter_svg パッケージの追加が必要// 画像表示例
Image.asset(
'assets/images/my_image.png',
fit: BoxFit.contain,
)
import 'package:flutter_deck/flutter_deck.dart';
class MyTitleSlide extends FlutterDeckSlideWidget {
const MyTitleSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-title',
title: 'My Title',
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.title(
title: 'スライドタイトル',
subtitle: 'サブタイトル',
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_deck/flutter_deck.dart';
class MyBlankSlide extends FlutterDeckSlideWidget {
const MyBlankSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-blank',
title: 'My Blank',
header: FlutterDeckHeaderConfiguration(
title: 'ヘッダータイトル',
),
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.blank(
builder: (context) => Center(
child: Text(
'カスタムコンテンツ',
style: FlutterDeckTheme.of(context).textTheme.bodyLarge,
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_deck/flutter_deck.dart';
class MySplitSlide extends FlutterDeckSlideWidget {
const MySplitSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-split',
title: 'My Split',
header: FlutterDeckHeaderConfiguration(
title: '2カラムスライド',
),
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.split(
leftBuilder: (context) => Center(
child: Text('左側コンテンツ'),
),
rightBuilder: (context) => Center(
child: Text('右側コンテンツ'),
),
);
}
}
import 'package:flutter_deck/flutter_deck.dart';
class MyImageSlide extends FlutterDeckSlideWidget {
const MyImageSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-image',
title: 'My Image',
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.image(
imageBuilder: (context) => Image.asset(
'assets/images/my_image.png',
fit: BoxFit.contain,
),
label: '画像の説明',
);
}
}
import 'package:flutter_deck/flutter_deck.dart';
class MyBigFactSlide extends FlutterDeckSlideWidget {
const MyBigFactSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-big-fact',
title: 'My Big Fact',
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.bigFact(
title: '100%',
subtitle: 'サブタイトル説明',
);
}
}
import 'package:flutter_deck/flutter_deck.dart';
class MyQuoteSlide extends FlutterDeckSlideWidget {
const MyQuoteSlide()
: super(
configuration: const FlutterDeckSlideConfiguration(
route: '/my-quote',
title: 'My Quote',
),
);
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.quote(
quote: '引用テキスト',
attribution: '引用元',
);
}
}
段階的に内容を表示:
configuration: const FlutterDeckSlideConfiguration(
route: '/steps-demo',
title: 'Steps Demo',
steps: 4, // ステップ数を指定
),
@override
FlutterDeckSlide build(BuildContext context) {
return FlutterDeckSlide.blank(
builder: (context) => FlutterDeckSlideStepsBuilder(
builder: (context, step) => Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (step >= 1) Text('ステップ 1'),
if (step >= 2) Text('ステップ 2'),
if (step >= 3) Text('ステップ 3'),
if (step >= 4) Text('ステップ 4'),
],
),
),
);
}
import 'package:flutter_deck/flutter_deck.dart';
FlutterDeckCodeHighlight(
code: '''
void main() {
print('Hello, Flutter Deck!');
}
''',
fileName: 'main.dart',
language: 'dart',
)
FlutterDeckBulletList(
items: const [
'アイテム 1',
'アイテム 2',
'アイテム 3',
],
)
テーマからスタイルを取得:
final theme = FlutterDeckTheme.of(context);
// テキストスタイル
theme.textTheme.title
theme.textTheme.subtitle
theme.textTheme.header
theme.textTheme.bodyLarge
theme.textTheme.bodyMedium
theme.textTheme.bodySmall