mcpField
F
flutter-errors

flutter-errors

github.com/evanca开发663259 次安装3 周前更新
代码仓库

关于 flutter-errors

flutter-errors 汇总常见 Flutter 运行时与布局错误的成因、修复方式和调试方法,面向 Flutter 开发者。内容覆盖约束、滚动与状态更新等问题。

主要功能

  1. 01常见布局错误排查
  2. 02提供对应修复方式
  3. 03使用 Flutter Inspector 调试
  4. 04查看布局边界指南

适用场景

  1. 01修复 Row 或 Column 溢出
  2. 02处理滚动视图高度约束
  3. 03排查构建期间状态更新错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/evanca/flutter-ai-rules --skill flutter-errors

安装后在 Claude Code 中输入/flutter-errors确认已加载。

详细介绍

Flutter 错误技能

此技能提供最常见的 Flutter 运行时和布局错误的解决方案。


RenderFlex 溢出

错误: A RenderFlex overflowed by X pixels on the right/bottom.

原因: Row 或 Column 中的子项宽度或高度超出了可用空间。

修复方法: 将溢出的子项包裹在 Flexible 或 Expanded 中,或限制其尺寸:

Row(
  children: [
    Expanded(child: Text('Long text that might overflow')),
    Icon(Icons.info),
  ],
)

纵向视口高度无界

错误: Vertical viewport was given unbounded height.

原因: ListView(或其他可滚动组件)放置在没有限定高度的 Column 中。

修复方法: 将 ListView 包裹在 Expanded 中,或使用 SizedBox 为其指定固定高度:

Column(
  children: [
    Text('Header'),
    Expanded(
      child: ListView(children: [...]),
    ),
  ],
)

InputDecorator 宽度无界

错误: An InputDecorator...cannot have an unbounded width.

原因: TextField 或类似组件放置在没有宽度约束的上下文中。

修复方法: 将其包裹在 Expanded、SizedBox 或任何可提供宽度约束的父组件中:

Row(
  children: [
    Expanded(child: TextField()),
  ],
)

在构建期间调用了 setState

错误: setState() or markNeedsBuild() called during build.

原因: 在 build 方法中直接调用了 setState 或 showDialog。

修复方法: 在响应用户操作时触发状态变更,或使用 addPostFrameCallback 将操作延迟到当前帧之后:

@override
void initState() {
  super.initState();
  WidgetsBinding.instance.addPostFrameCallback((_) {
    // Safe to call setState or showDialog here
  });
}

ScrollController 关联到多个滚动视图

错误: The ScrollController is attached to multiple scroll views.

原因: 同一个 ScrollController 实例同时被多个可滚动组件共用。

修复方法: 确保每个可滚动组件都有专属的 ScrollController 实例。


RenderBox 尚未完成布局

错误: RenderBox was not laid out: ...

原因: 组件缺少约束或约束无界,常见情况包括没有适当尺寸约束的 ListView 或 Column。

修复方法: 检查组件树中是否缺少约束。常见做法:

  • 在 Column 中将 ListView 包裹在 Expanded 中。
  • 使用 SizedBox 或 ConstrainedBox 为组件指定明确的 width 或 height。

调试布局问题

  • 使用 DevTools 中的 Flutter Inspector 查看组件约束。
  • 启用 “Show guidelines”,查看布局边界。
  • 在 main() 中临时添加 debugPaintSizeEnabled = true;,绘制布局边界。
  • 参阅 Flutter 约束文档,深入了解约束的传递方式。

参考资料

评论

支持 Markdown