You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Stack用Positioned出现'size.isFinite': is not true断言错误排查

Flutter Stack + Positioned 触发 'size.isFinite' 断言错误的原因及解决办法

你遇到的这个断言错误,核心问题是Stack没有被赋予明确的尺寸约束。当Stack的子组件只有Positioned元素时,Stack会尝试根据子组件的位置和大小计算自身尺寸,但Positioned的top/left是相对父容器的偏移量,此时Stack没有自身的边界限制,会被判定为无限大尺寸,从而触发size.isFinite的断言检查失败。

看你的代码,直接返回Stack却没有给它设置任何尺寸限制,这就是错误根源。

解决办法

给Stack添加明确的尺寸约束,常见的两种方式:

1. 让Stack占满父容器/屏幕

通过MediaQuery获取屏幕尺寸,或者用Expanded(在Column/Row布局中)让Stack填充可用空间:

double width = 200.0;
double height = 80.0;
double top = 100;
double left = 100;

@override
Widget build(BuildContext context) {
  final screenSize = MediaQuery.of(context).size;
  return SizedBox(
    width: screenSize.width,
    height: screenSize.height,
    child: Stack(
      children: [
        Positioned(
          top: top,
          left: left,
          child: GestureDetector(
            onPanUpdate: (details) {
              setState(() {
                top += details.delta.dy;
                left += details.delta.dx;
              });
            },
            child: Container(
              height: height,
              width: width,
              color: Colors.blue,
            ),
          ),
        ),
      ],
    ),
  );
}

2. 给Stack设置固定尺寸

用SizedBox包裹Stack,指定固定宽高:

@override
Widget build(BuildContext context) {
  return SizedBox(
    width: 300,
    height: 300,
    child: Stack(
      children: [
        // 你的Positioned子组件代码
      ],
    ),
  );
}

内容的提问来源于stack exchange,提问作者Harsh Rajpara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:04:56