flutter
Skill33 starsChanged 35 days agoMITView on GitHub
Use when building Flutter applications. Covers widget composition, state management, build-method performance, platform channels, and the rendering behavior behind most Flutter jank. Trigger on "my flutter app is janky", "too many rebuilds", "riverpod or bloc", "call native code from flutter". Do not use for store submission, signing, and rollout — see the mobile-release skill.
11 other projects use a version of this.
Adopted by
Most recently taken up by
- its-ash/skillstheir own version, first seen Nov 1, 2026
- G1Joshi/Agent-Skillstheir own version, first seen Oct 13, 2026
- Mindrally/skillstheir own version, first seen Oct 8, 2026
- alinaqi/claude-bootstraptheir own version, first seen Oct 8, 2026
- Evan-Kim2028/agent-skillstheir own version, first seen Aug 16, 2026
- guocheng1378/android-reverse-skillstheir own version, first seen Aug 6, 2026
Used with
Projects with it also use firebase and supabase.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
xfstudioSkillfirebase
Firebase gives you a complete backend in minutes - auth, database, storage, functions, hosting. But the ease of setup hides real complexity. Security rules are your last line of defense, and they're often wrong. Firestore queries are limited, and you learn this after you've designed your data model. This skill covers Firebase Authentication, Firestore, Realtime Database, Cloud Functions, Cloud Storage, and Firebase Hosting. Key insight: Firebase is optimized for read-heavy, denormalized data. I
Also in 3 projects that use this
OpenAISkillsupabase
Use when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector).
Also in 3 projects that use this
Other versions11 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 11
- alinaqi/maggy★ 711same name
- alinaqi/claude-bootstrap★ 708same name
- Mindrally/skills★ 275same name
- G1Joshi/Agent-Skills★ 15same name
- guocheng1378/android-reverse-skills★ 4same name
- ffsshhttiikk/opencode-agents-skills★ 2same name
- cocart-headless/cocart-skills★ 1same name
- Evan-Kim2028/agent-skills★ 1same name
- nguyenchilong/claude-skills-fullstacks★ 1same name
- its-ash/skills★ 0same name
1 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository137 other files it gives its agents.
- agent-instructionsSkill
- agent-memorySkill
- hooksSkill
- plugin-developmentSkill
- skill-authoringSkill
- skill-reviewSkill
- slash-commandsSkill
- subagentsSkill
- agent-designSkill
- context-engineeringSkill
- fine-tuningSkill
- llm-cost-optimizationSkill
- llm-evaluationSkill
- llm-integrationSkill
- mcp-serverSkill
- ml-pipelineSkill
- model-selectionSkill
- prompt-engineeringSkill
- ragSkill
- structured-outputSkill
- api-designSkill
- background-jobsSkill
- cachingSkill
- djangoSkill
- event-driven-architectureSkill
- fastapiSkill
- graphqlSkill
- microservicesSkill
- nestjsSkill
- realtime-websocketsSkill
- spring-bootSkill
- competitive-analysisSkill
- lead-researchSkill
- product-analysisSkill
- resumeSkill
- user-researchSkill
- database-performanceSkill
- data-modelingSkill
- data-qualitySkill
- pandasSkill
- postgresSkill
- sparkSkill
- brand-guidelinesSkill
- generative-artSkill
- themingSkill
- ui-reviewSkill
- visual-designSkill
- architecture-decisionsSkill
- bug-fix-protocolSkill
- cli-developmentSkill
- code-reviewSkill
- debuggingSkill
- design-patternsSkill
- domain-modelingSkill
- git-workflowSkill
- legacy-modernizationSkill
- refactoringSkill
- repository-explorationSkill
- simple-designSkill
- system-designSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 0 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 54
Never build a widget inside a build method as a function call (Widget _buildHeader()).
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Flutter
Purpose
Build Flutter applications whose widget tree rebuilds only where it must. Flutter's performance model is simple and unforgiving: a setState at the top of the tree rebuilds everything below it.
When to Use
- Building or reviewing a Flutter application.
- Choosing and applying a state-management approach.
- Diagnosing jank or excessive rebuilds.
- Integrating with platform-native code.
Capabilities
- Widget composition and the
StatelessWidget/StatefulWidgetboundary. - State management with Riverpod, Bloc, or Provider — and when plain state suffices.
- Build-method optimization:
constconstructors, selective rebuilds, keys. - Async:
Future,Stream,FutureBuilder, and their failure states. - Platform channels for native functionality.
Inputs
- The feature set and target platforms.
- The current state-management approach, if any.
- The jank or rebuild symptom, if debugging.
Outputs
- A widget tree where rebuilds are scoped to what changed.
- State that is testable without a widget tree.
- Async UI that handles loading, error, and empty explicitly.
Workflow
- Compose small widgets — A 300-line
buildmethod rebuilds as one unit. Extracting subtrees into widgets is the primary performance tool in Flutter, not a style preference. - Mark everything possible
const— Aconstwidget is never rebuilt. This is the cheapest optimization available and most codebases leave it on the table. - Scope the rebuild —
Consumer,Selector, or a Riverpod provider that watches one field.setStatein a parent rebuilds every child that is notconst. - Handle all three async states — Loading, error, and data.
FutureBuilderwithout an error branch shows a spinner forever when the request fails. - Profile in profile mode — Debug mode is meaningfully slower and will mislead you in both directions. Use the DevTools timeline on a real device.
Best Practices
constconstructors are the highest-leverage change in most Flutter codebases. Enableprefer_const_constructorsin the linter and fix every warning.- Never build a widget inside a
buildmethod as a function call (Widget _buildHeader()). It defeats the element-tree diffing entirely. Extract a real widget class. - Keys matter when reordering or removing items from a list of stateful widgets. Without them, state attaches to the wrong item.
- Business logic does not belong in a widget. If it cannot be tested without pumping a widget tree, it is in the wrong place.
ListView.builder, notListView(children: [...]), for anything that could be long. The latter builds every child immediately.- An
AnimationControllerwithout adisposeis a leak that ticks forever.
Examples
Scoped rebuild versus a rebuild of everything:
// Costly: setState here rebuilds the whole screen, including the static header
// and the entire list, on every counter tick.
class _DashboardState extends State<Dashboard> {
int _count = 0;
@override
Widget build(BuildContext context) => Column(
children: [
const DashboardHeader(), // const: spared, correctly
OrderList(orders: widget.orders), // not const: rebuilt every tick
Text('$_count'),
ElevatedButton(onPressed: () => setState(() => _count++), child: const Text('+')),
],
);
}
// Better: only the Text listening to the counter rebuilds.
class Dashboard extends ConsumerWidget {
const Dashboard({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) => Column(
children: [
const DashboardHeader(),
const OrderList(),
Consumer(builder: (_, ref, __) => Text('${ref.watch(counterProvider)}')),
ElevatedButton(
onPressed: () => ref.read(counterProvider.notifier).increment(),
child: const Text('+'),
),
],
);
}Async with every state handled:
switch (ref.watch(ordersProvider)) {
AsyncData(:final value) when value.isEmpty => const EmptyState(),
AsyncData(:final value) => OrderList(orders: value),
AsyncError(:final error) => ErrorState(error: error, onRetry: _retry),
_ => const LoadingSkeleton(),
}Notes
- Extracting a subtree into a
constwidget removes it from the rebuild path entirely — the framework short-circuits on identity. This is why "just extract widgets" is genuine performance advice in Flutter and not merely tidiness. RepaintBoundaryisolates a subtree's painting. It helps when a small animated element sits inside an expensive static one, and hurts if applied indiscriminately.- Impeller replaced Skia as the default renderer on iOS (and now Android), which eliminates the shader-compilation jank that used to affect first-run animations.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

