[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CC0FRNFSES7WNPDCY9DDDP":3,"skill-same:01M7CC0FRNFSES7WNPDCY9DDDP":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M7CC0FRNFSES7WNPDCY9DDDP","flutter-expert",null,"Use when building cross-platform applications with Flutter 3+ and Dart. Invoke for widget development, Riverpod\u002FBloc state management, GoRouter navigation, platform-specific implementations, performance optimization.","om-scogo\u002Fskillsh-scraper","om-scogo","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160466840?v=4","01M79AWB6DFVCQ7RK70CS34B96","Om Achrekar","01M79AWB6ZM9SKR8KDH1WSSM22",0,"MIT","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fjeffallan-claude-skills\u002Fflutter-expert\u002Fskills\u002Fflutter-expert\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: flutter-expert\ndescription: Use when building cross-platform applications with Flutter 3+ and Dart. Invoke for widget development, Riverpod\u002FBloc state management, GoRouter navigation, platform-specific implementations, performance optimization.\nlicense: MIT\nmetadata:\n  author: https:\u002F\u002Fgithub.com\u002FJeffallan\n  version: \"1.1.0\"\n  domain: frontend\n  triggers: Flutter, Dart, widget, Riverpod, Bloc, GoRouter, cross-platform\n  role: specialist\n  scope: implementation\n  output-format: code\n  related-skills: react-native-expert, test-master, fullstack-guardian\n---\n\n# Flutter Expert\n\nSenior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart.\n\n## When to Use This Skill\n\n- Building cross-platform Flutter applications\n- Implementing state management (Riverpod, Bloc)\n- Setting up navigation with GoRouter\n- Creating custom widgets and animations\n- Optimizing Flutter performance\n- Platform-specific implementations\n\n## Core Workflow\n\n1. **Setup** — Scaffold project, add dependencies (`flutter pub get`), configure routing\n2. **State** — Define Riverpod providers or Bloc\u002FCubit classes; verify with `flutter analyze`\n   - If `flutter analyze` reports issues: fix all lints and warnings before proceeding; re-run until clean\n3. **Widgets** — Build reusable, const-optimized components; run `flutter test` after each feature\n   - If tests fail: inspect widget tree with Flutter DevTools, fix failing assertions, re-run `flutter test`\n4. **Test** — Write widget and integration tests; confirm with `flutter test --coverage`\n   - If coverage drops or tests fail: identify untested branches, add targeted tests, re-run before merging\n5. **Optimize** — Profile with Flutter DevTools (`flutter run --profile`), eliminate jank, reduce rebuilds\n   - If jank persists: check rebuild counts in the Performance overlay, isolate expensive `build()` calls, apply `const` or move state closer to consumers\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Riverpod | `references\u002Friverpod-state.md` | State management, providers, notifiers |\n| Bloc | `references\u002Fbloc-state.md` | Bloc, Cubit, event-driven state, complex business logic |\n| GoRouter | `references\u002Fgorouter-navigation.md` | Navigation, routing, deep linking |\n| Widgets | `references\u002Fwidget-patterns.md` | Building UI components, const optimization |\n| Structure | `references\u002Fproject-structure.md` | Setting up project, architecture |\n| Performance | `references\u002Fperformance.md` | Optimization, profiling, jank fixes |\n\n## Code Examples\n\n### Riverpod Provider + ConsumerWidget (correct pattern)\n\n```dart\n\u002F\u002F provider definition\nfinal counterProvider = StateNotifierProvider\u003CCounterNotifier, int>(\n  (ref) => CounterNotifier(),\n);\n\nclass CounterNotifier extends StateNotifier\u003Cint> {\n  CounterNotifier() : super(0);\n  void increment() => state = state + 1; \u002F\u002F new instance, never mutate\n}\n\n\u002F\u002F consuming widget — use ConsumerWidget, not StatefulWidget\nclass CounterView extends ConsumerWidget {\n  const CounterView({super.key});\n\n  @override\n  Widget build(BuildContext context, WidgetRef ref) {\n    final count = ref.watch(counterProvider);\n    return Text('$count');\n  }\n}\n```\n\n### Before \u002F After — State Management\n\n```dart\n\u002F\u002F ❌ WRONG: app-wide state in setState\nclass _BadCounterState extends State\u003CBadCounter> {\n  int _count = 0;\n  void _inc() => setState(() => _count++); \u002F\u002F causes full subtree rebuild\n}\n\n\u002F\u002F ✅ CORRECT: scoped Riverpod consumer\nclass GoodCounter extends ConsumerWidget {\n  const GoodCounter({super.key});\n  @override\n  Widget build(BuildContext context, WidgetRef ref) {\n    final count = ref.watch(counterProvider);\n    return IconButton(\n      onPressed: () => ref.read(counterProvider.notifier).increment(),\n      icon: const Icon(Icons.add), \u002F\u002F const on static widgets\n    );\n  }\n}\n```\n\n## Constraints\n\n### MUST DO\n- Use `const` constructors wherever possible\n- Implement proper keys for lists\n- Use `Consumer`\u002F`ConsumerWidget` for state (not `StatefulWidget`)\n- Follow Material\u002FCupertino design guidelines\n- Profile with DevTools, fix jank\n- Test widgets with `flutter_test`\n\n### MUST NOT DO\n- Build widgets inside `build()` method\n- Mutate state directly (always create new instances)\n- Use `setState` for app-wide state\n- Skip `const` on static widgets\n- Ignore platform-specific behavior\n- Block UI thread with heavy computation (use `compute()`)\n\n## Troubleshooting Common Failures\n\n| Symptom | Likely Cause | Recovery |\n|---------|-------------|----------|\n| `flutter analyze` errors | Unresolved imports, missing `const`, type mismatches | Fix flagged lines; run `flutter pub get` if imports are missing |\n| Widget test assertion failures | Widget tree mismatch or async state not settled | Use `tester.pumpAndSettle()` after state changes; verify finder selectors |\n| Build fails after adding package | Incompatible dependency version | Run `flutter pub upgrade --major-versions`; check pub.dev compatibility |\n| Jank \u002F dropped frames | Expensive `build()` calls, uncached widgets, heavy main-thread work | Use `RepaintBoundary`, move heavy work to `compute()`, add `const` |\n| Hot reload not reflecting changes | State held in `StateNotifier` not reset | Use hot restart (`R` in terminal) to reset full app state |\n\n## Output Templates\n\nWhen implementing Flutter features, provide:\n1. Widget code with proper `const` usage\n2. Provider\u002FBloc definitions\n3. Route configuration if needed\n4. Test file structure\n\n[Documentation](https:\u002F\u002Fjeffallan.github.io\u002Fclaude-skills\u002Fskills\u002Ffrontend\u002Fflutter-expert\u002F)\n","# Flutter Expert\n\nSenior mobile engineer building high-performance cross-platform applications with Flutter 3 and Dart.\n\n## When to Use This Skill\n\n- Building cross-platform Flutter applications\n- Implementing state management (Riverpod, Bloc)\n- Setting up navigation with GoRouter\n- Creating custom widgets and animations\n- Optimizing Flutter performance\n- Platform-specific implementations\n\n## Core Workflow\n\n1. **Setup** — Scaffold project, add dependencies (`flutter pub get`), configure routing\n2. **State** — Define Riverpod providers or Bloc\u002FCubit classes; verify with `flutter analyze`\n   - If `flutter analyze` reports issues: fix all lints and warnings before proceeding; re-run until clean\n3. **Widgets** — Build reusable, const-optimized components; run `flutter test` after each feature\n   - If tests fail: inspect widget tree with Flutter DevTools, fix failing assertions, re-run `flutter test`\n4. **Test** — Write widget and integration tests; confirm with `flutter test --coverage`\n   - If coverage drops or tests fail: identify untested branches, add targeted tests, re-run before merging\n5. **Optimize** — Profile with Flutter DevTools (`flutter run --profile`), eliminate jank, reduce rebuilds\n   - If jank persists: check rebuild counts in the Performance overlay, isolate expensive `build()` calls, apply `const` or move state closer to consumers\n\n## Reference Guide\n\nLoad detailed guidance based on context:\n\n| Topic | Reference | Load When |\n|-------|-----------|-----------|\n| Riverpod | `references\u002Friverpod-state.md` | State management, providers, notifiers |\n| Bloc | `references\u002Fbloc-state.md` | Bloc, Cubit, event-driven state, complex business logic |\n| GoRouter | `references\u002Fgorouter-navigation.md` | Navigation, routing, deep linking |\n| Widgets | `references\u002Fwidget-patterns.md` | Building UI components, const optimization |\n| Structure | `references\u002Fproject-structure.md` | Setting up project, architecture |\n| Performance | `references\u002Fperformance.md` | Optimization, profiling, jank fixes |\n\n## Code Examples\n\n### Riverpod Provider + ConsumerWidget (correct pattern)\n\n```dart\n\u002F\u002F provider definition\nfinal counterProvider = StateNotifierProvider\u003CCounterNotifier, int>(\n  (ref) => CounterNotifier(),\n);\n\nclass CounterNotifier extends StateNotifier\u003Cint> {\n  CounterNotifier() : super(0);\n  void increment() => state = state + 1; \u002F\u002F new instance, never mutate\n}\n\n\u002F\u002F consuming widget — use ConsumerWidget, not StatefulWidget\nclass CounterView extends ConsumerWidget {\n  const CounterView({super.key});\n\n  @override\n  Widget build(BuildContext context, WidgetRef ref) {\n    final count = ref.watch(counterProvider);\n    return Text('$count');\n  }\n}\n```\n\n### Before \u002F After — State Management\n\n```dart\n\u002F\u002F ❌ WRONG: app-wide state in setState\nclass _BadCounterState extends State\u003CBadCounter> {\n  int _count = 0;\n  void _inc() => setState(() => _count++); \u002F\u002F causes full subtree rebuild\n}\n\n\u002F\u002F ✅ CORRECT: scoped Riverpod consumer\nclass GoodCounter extends ConsumerWidget {\n  const GoodCounter({super.key});\n  @override\n  Widget build(BuildContext context, WidgetRef ref) {\n    final count = ref.watch(counterProvider);\n    return IconButton(\n      onPressed: () => ref.read(counterProvider.notifier).increment(),\n      icon: const Icon(Icons.add), \u002F\u002F const on static widgets\n    );\n  }\n}\n```\n\n## Constraints\n\n### MUST DO\n- Use `const` constructors wherever possible\n- Implement proper keys for lists\n- Use `Consumer`\u002F`ConsumerWidget` for state (not `StatefulWidget`)\n- Follow Material\u002FCupertino design guidelines\n- Profile with DevTools, fix jank\n- Test widgets with `flutter_test`\n\n### MUST NOT DO\n- Build widgets inside `build()` method\n- Mutate state directly (always create new instances)\n- Use `setState` for app-wide state\n- Skip `const` on static widgets\n- Ignore platform-specific behavior\n- Block UI thread with heavy computation (use `compute()`)\n\n## Troubleshooting Common Failures\n\n| Symptom | Likely Cause | Recovery |\n|---------|-------------|----------|\n| `flutter analyze` errors | Unresolved imports, missing `const`, type mismatches | Fix flagged lines; run `flutter pub get` if imports are missing |\n| Widget test assertion failures | Widget tree mismatch or async state not settled | Use `tester.pumpAndSettle()` after state changes; verify finder selectors |\n| Build fails after adding package | Incompatible dependency version | Run `flutter pub upgrade --major-versions`; check pub.dev compatibility |\n| Jank \u002F dropped frames | Expensive `build()` calls, uncached widgets, heavy main-thread work | Use `RepaintBoundary`, move heavy work to `compute()`, add `const` |\n| Hot reload not reflecting changes | State held in `StateNotifier` not reset | Use hot restart (`R` in terminal) to reset full app state |\n\n## Output Templates\n\nWhen implementing Flutter features, provide:\n1. Widget code with proper `const` usage\n2. Provider\u002FBloc definitions\n3. Route configuration if needed\n4. Test file structure\n\n[Documentation](https:\u002F\u002Fjeffallan.github.io\u002Fclaude-skills\u002Fskills\u002Ffrontend\u002Fflutter-expert\u002F)\n",{"name":5,"license":15,"metadata":24,"description":7},{"role":25,"scope":26,"author":27,"domain":28,"version":29,"triggers":30,"output-format":31,"related-skills":32},"specialist","implementation","https:\u002F\u002Fgithub.com\u002FJeffallan","frontend","1.1.0","Flutter, Dart, widget, Riverpod, Bloc, GoRouter, cross-platform","code","react-native-expert, test-master, fullstack-guardian","main","8859218955d9504cd18b59e7892100718039d3b4","data\u002Fskills\u002Fjeffallan-claude-skills\u002Fflutter-expert\u002Fskills\u002Fflutter-expert",1,"https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper","https:\u002F\u002Fgithub.com\u002Fom-scogo","SDE-1 @ Scogo ","2026-07-18 12:22:46",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add om-scogo\u002Fskillsh-scraper --skill flutter-expert",{"tool":47,"command":48},"bunx","bunx skills add om-scogo\u002Fskillsh-scraper --skill flutter-expert",{"tool":50,"command":51},"pnpm","pnpm dlx skills add om-scogo\u002Fskillsh-scraper --skill flutter-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fjeffallan-claude-skills\u002Fflutter-expert\u002Fskills\u002Fflutter-expert\u002FSKILL.md",true,[],[56,63,68,75,80,87],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":19},"01M7D6MC9FAAEV4CMNYX8W7JTG","arxiv-search","Search arXiv physics, math, and computer science preprints using natural language queries. Powered by Valyu semantic search.","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fyorkeccak-scientific-skills\u002Farxiv-search\u002Fskills\u002Farxiv-search\u002FSKILL.md",[],[],{"skillNo":64,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":19},"01M7D6M85CKKN87TA98VCQV4H7","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fyorkeccak-scientific-skills\u002Farxiv-search\u002FSkill.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M7D4ZTCS4DR3CE4JY06X84T2","working-with-legacy-code","Safely change and test untested codebases using Feathers' \"Working Effectively with Legacy Code\". Use when the user mentions \"legacy code\", \"no tests\", \"untested codebase\", \"how do I test this\", \"seams\", \"characterization tests\", \"golden master\", \"sprout method\", \"afraid to change this code\", \"monster method\", \"dependency breaking\", or \"inherited a messy codebase\". Also trigger when changing code without tests safely, getting a class under test when constructors, statics, or singletons block it, adding features to tangled modules, or planning incremental test coverage for an old codebase. Covers the legacy-code change algorithm, seams, characterization tests, sprout\u002Fwrap, and dependency-breaking techniques. For refactoring code that already has tests, see refactoring-patterns. For day-to-day code quality, see clean-code.","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fworking-with-legacy-code\u002Fworking-with-legacy-code\u002FSKILL.md",[],[],{"skillNo":76,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7D4ZHZKJD2RSNGAF63V14P4","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fworking-with-legacy-code\u002FSkill.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M7D4ZB4CJBFW5JE67CPH2QRV","web-typography","Select, pair, and implement typefaces for web projects. Use when the user mentions \"font pairing\", \"which typeface\", \"line height\", \"responsive typography\", \"web font loading\", \"type hierarchy\", \"variable fonts\", \"FOUT\u002FFOIT\", \"typographic scale\", or \"the text is hard to read\". Also trigger when choosing between system fonts and web fonts, optimizing font-loading performance, or designing readable long-form content. Covers readability evaluation, CSS implementation, and performance optimization. For overall UI design systems, see refactoring-ui. For dramatic typographic experiences, see top-design.","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fweb-typography\u002Fweb-typography\u002FSKILL.md",[],[],{"skillNo":88,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M7D4Z4MVYVY3NMJ18BNV6WNA","https:\u002F\u002Fgithub.com\u002Fom-scogo\u002Fskillsh-scraper\u002Fblob\u002Fmain\u002Fdata\u002Fskills\u002Fwondelai-skills\u002Fweb-typography\u002FSkill.md",[],[]]