用途:在构建 Flutter 屏幕或组件时,从约束系统出发搭建响应式布局,优先使用简单的弹性组合,仅在设计有明确需要时才引入固定尺寸或叠加层。
主要能力与规则:先判断每组内容是垂直、水平、重叠、滚动还是换行;垂直组用 Column,水平组用 Row;用 Expanded、Flexible、Spacer 分配有界剩余空间;用 mainAxisAlignment、crossAxisAlignment、mainAxisSize 控制对齐;flex 仅表达比例分配,flex:2 的子项获得 flex:1 兄弟的两倍剩余空间份额;Spacer 用于弹性间隔,SizedBox 用于固定间隔;Row 中可变宽内容需包在 Expanded 或 Flexible 中;内容可能超出视口时用 ListView 等可滚动组件,Column 本身不滚动;水平子项应换行而非收缩或溢出时用 Wrap;组合本身需随空间变化时用 LayoutBuilder、断点或自适应组件;需避开系统区域时用 SafeArea。
避免的默认做法:硬编码 Positioned 坐标的 Stack、硬编码屏幕式宽高的 Container/SizedBox/ConstrainedBox、用偏移或变换模拟正常文档流、照搬设计稿尺寸。仅在真实重叠、徽章、浮动控件、触摸目标最小值、图标尺寸、缩略图、有界媒体、最大阅读宽度、宽高比要求、平台或设计系统常量等具体目的下使用,并在代码结构或注释中说明用途。
约束安全:Expanded 和 Flexible 只能放在 Row、Column 或 Flex 下;不要在无界主轴使用非零 flex;垂直滚动中移除垂直方向的 Expanded/Flexible 或建立有限约束;嵌套 Column 需要外层剩余高度时用 Expanded 包裹;溢出时先检查约束和可变内容,再考虑裁剪或更小硬编码尺寸;内容确实超出时优先滚动。
验证:确认支持的视口尺寸下无 RenderFlex 溢出;文本按预期换行或截断;弹性子项获得有界约束;可滚动内容可达;固定尺寸与 Stack/Positioned 用法有具体设计理由。
限制:资料未提供安装命令、收费、平台或效果信息。