flutter-build-responsive-layout
Skill4 starsChanged 4 months agoMITView on GitHub
Use `LayoutBuilder`, `MediaQuery`, or `Expanded/Flexible` to create a layout that adapts to different screen sizes. Use when you need the UI to look good on both mobile and tablet/desktop form factors.
5 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- SamuelAlev/control-centerword for word, first seen Nov 8, 2026
- zhouycheng/skillsword for word, first seen Oct 13, 2026
- enrique-lozano/Monekinedited, first seen Oct 9, 2026
- flutter/skillsword for word, first seen Oct 8, 2026
- deretame/Breezeword for word, first seen Oct 8, 2026
Other versions5 projects use a version of this.
Word for word · 4
- flutter/skills★ 3.2k100% same
- deretame/Breeze★ 3k100% same
- SamuelAlev/control-center★ 8100% same
- zhouycheng/skills★ 1100% same
Edited · 1
- enrique-lozano/Monekin★ 26876% same
Wrote their own version · 0
None found.
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 repository70 other files it gives its agents.
- AGENTS.mdAGENTS.md
- engine/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- engine/CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- brandkitSkill
- code-reviewSkill
- dart-add-unit-testSkill
- dart-build-cli-appSkill
- dart-collect-coverageSkill
- dart-fix-runtime-errorsSkill
- dart-generate-test-mocksSkill
- dart-migrate-to-checks-packageSkill
- dart-resolve-package-conflictsSkill
- dart-run-static-analysisSkill
- dart-setup-ffi-assetsSkill
- dart-use-ffigenSkill
- dart-use-pattern-matchingSkill
- dart-use-primary-constructorsSkill
- design-taste-frontendSkill
- flutter-add-integration-testSkill
- flutter-add-widget-previewSkill
- flutter-add-widget-testSkill
- flutter-apply-architecture-best-practicesSkill
- flutter-fix-layout-issuesSkill
- flutter-implement-json-serializationSkill
- flutter-setup-declarative-routingSkill
- flutter-setup-localizationSkill
- flutter-use-http-packageSkill
- frontend-code-reviewSkill
- full-output-enforcementSkill
- github-releaseSkill
- grill-with-docsSkill
- high-end-visual-designSkill
- imagegen-frontend-webSkill
- image-to-codeSkill
- improve-codebase-architectureSkill
- industrial-brutalist-uiSkill
- minimalist-uiSkill
- redesign-existing-projectsSkill
- source-command-frontend-code-review-skillSkill
- source-command-impeccable-skillSkill
- stitch-design-tasteSkill
- tddSkill
- to-prdSkill
- frontend-code-reviewSkill
- impeccableSkill
- dart-add-unit-testSkill
- dart-build-cli-appSkill
- dart-collect-coverageSkill
- dart-fix-runtime-errorsSkill
- dart-generate-test-mocksSkill
- dart-migrate-to-checks-packageSkill
- dart-resolve-package-conflictsSkill
- dart-run-static-analysisSkill
- dart-setup-ffi-assetsSkill
- dart-use-ffigenSkill
- dart-use-pattern-matchingSkill
- dart-use-primary-constructorsSkill
- flutter-add-integration-testSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
Distribute Space: Use Expanded and Flexible within Row, Column, or Flex widgets.
- Very specific: line 30
Use Expanded to force a child to fill all remaining available space (equivalent to Flexible with fit: FlexFit.tight and a flex factor of …
- Very specific: line 31
Use Flexible to allow a child to size itself up to a specific limit while still expanding/contracting.
- Very specific: line 33
Lazy Rendering: Always use ListView.builder or GridView.builder when rendering lists with an unknown or large number of items.
- Distinctive: line 36
Ensure the app behaves correctly across all device form factors and input methods.
- Very specific: line 39
Fallback for Locked Orientation: If business requirements strictly mandate a locked orientation, use the Display API to retrieve physical …
- Very specific: line 44
Follow this workflow to implement a layout that adapts to the available BoxConstraints.
- Distinctive: line 57
Follow this workflow to prevent UI elements from stretching unnaturally on large displays.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Implementing Adaptive Layouts
Contents
- Space Measurement Guidelines
- Widget Sizing and Constraints
- Device and Orientation Behaviors
- Workflow: Constructing an Adaptive Layout
- Workflow: Optimizing for Large Screens
- Examples
Space Measurement Guidelines
Determine the available space accurately to ensure layouts adapt to the app window, not just the physical device.
- Use
MediaQuery.sizeOf(context)to get the size of the entire app window. - Use
LayoutBuilderto make layout decisions based on the parent widget's allocated space. Evaluateconstraints.maxWidthto determine the appropriate widget tree to return. - Do not use
MediaQuery.orientationOforOrientationBuildernear the top of the widget tree to switch layouts. Device orientation does not accurately reflect the available app window space. - Do not check for hardware types (e.g., "phone" vs. "tablet"). Flutter apps run in resizable windows, multi-window modes, and picture-in-picture. Base all layout decisions strictly on available window space.
Widget Sizing and Constraints
Understand and apply Flutter's core layout rule: Constraints go down. Sizes go up. Parent sets position.
- Distribute Space: Use
ExpandedandFlexiblewithinRow,Column, orFlexwidgets.- Use
Expandedto force a child to fill all remaining available space (equivalent toFlexiblewithfit: FlexFit.tightand aflexfactor of 1.0). - Use
Flexibleto allow a child to size itself up to a specific limit while still expanding/contracting. Use theflexfactor to define the ratio of space consumption among siblings.
- Use
- Constrain Width: Prevent widgets from consuming all horizontal space on large screens. Wrap widgets like
GridVieworListViewin aConstrainedBoxorContainerand define amaxWidthin theBoxConstraints. - Lazy Rendering: Always use
ListView.builderorGridView.builderwhen rendering lists with an unknown or large number of items.
Device and Orientation Behaviors
Ensure the app behaves correctly across all device form factors and input methods.
- Do not lock screen orientation. Locking orientation causes severe layout issues on foldable devices, often resulting in letterboxing (the app centered with black borders). Android large format tiers require both portrait and landscape support.
- Fallback for Locked Orientation: If business requirements strictly mandate a locked orientation, use the
Display APIto retrieve physical screen dimensions instead ofMediaQuery.MediaQueryfails to receive the larger window size in compatibility modes. - Support Multiple Inputs: Implement support for basic mice, trackpads, and keyboard shortcuts. Ensure touch targets are appropriately sized and keyboard navigation is accessible.
Workflow: Constructing an Adaptive Layout
Follow this workflow to implement a layout that adapts to the available BoxConstraints.
Task Progress:
- Identify the target widget that requires adaptive behavior.
- Wrap the widget tree in a
LayoutBuilder. - Extract the
constraints.maxWidthfrom the builder callback. - Define an adaptive breakpoint (e.g.,
largeScreenMinWidth = 600). - If
maxWidth > largeScreenMinWidth: Return a large-screen layout (e.g., aRowplacing a navigation sidebar and content area side-by-side). - If
maxWidth <= largeScreenMinWidth: Return a small-screen layout (e.g., aColumnor standard navigation-style approach). - Run validator -> resize the application window -> review layout transitions -> fix overflow errors.
Workflow: Optimizing for Large Screens
Follow this workflow to prevent UI elements from stretching unnaturally on large displays.
Task Progress:
- Identify full-width components (e.g.,
ListView, text blocks, forms). - If optimizing a list: Convert
ListView.buildertoGridView.builderusingSliverGridDelegateWithMaxCrossAxisExtentto automatically adjust column counts based on window size. - If optimizing a form or text block: Wrap the component in a
ConstrainedBox. - Apply
BoxConstraints(maxWidth: [optimal_width])to theConstrainedBox. - Wrap the
ConstrainedBoxin aCenterwidget to keep the constrained content centered on large screens. - Run validator -> test on desktop/tablet target -> review horizontal stretching -> adjust
maxWidthor grid extents.
Examples
Adaptive Layout using LayoutBuilder
Demonstrates switching between a mobile and desktop layout based on available width.
import 'package:flutter/material.dart';
const double largeScreenMinWidth = 600.0;
class AdaptiveLayout extends StatelessWidget {
const AdaptiveLayout({super.key});
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
if (constraints.maxWidth > largeScreenMinWidth) {
return _buildLargeScreenLayout();
} else {
return _buildSmallScreenLayout();
}
},
);
}
Widget _buildLargeScreenLayout() {
return Row(
children: [
const SizedBox(width: 250, child: Placeholder(color: Colors.blue)),
const VerticalDivider(width: 1),
Expanded(child: const Placeholder(color: Colors.green)),
],
);
}
Widget _buildSmallScreenLayout() {
return const Placeholder(color: Colors.green);
}
}Constraining Width on Large Screens
Demonstrates preventing a widget from consuming all horizontal space.
import 'package:flutter/material.dart';
class ConstrainedContent extends StatelessWidget {
const ConstrainedContent({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 800.0, // Maximum width for readability
),
child: ListView.builder(
itemCount: 50,
itemBuilder: (context, index) {
return ListTile(
title: Text('Item $index'),
);
},
),
),
),
);
}
}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.

