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

Flutter报错double类型无法赋值给int类型的解决方法

Flutter 开发类型报错修复:A value of type 'double' can't be assigned to a variable of type 'int'

触发场景

给SizedBox组件生成受屏幕尺寸约束的随机宽高时,将屏幕尺寸作为随机值上限传入的过程中触发该类型错误,目标是让随机宽高最小值为70,最大值不超过当前屏幕的宽高尺寸。

错误原因

  • MediaQuery获取到的屏幕宽高size.height、size.width返回值为double类型,Dart作为强类型语言不会自动做跨类型隐式赋值
  • 原代码直接把double类型的屏幕高度赋值给声明为int类型的max变量,直接触发类型不匹配错误
  • 原代码存在变量重名问题:先后声明了double类型和int类型的同名randomHeight变量,会触发命名冲突编译错误
  • Random.nextInt()方法要求传入的上限参数必须为int类型,本身不支持接收double参数

修复方案

  • 调用.toInt()方法将double类型的屏幕尺寸显式转换为int类型,再作为随机数的上限参数传入
  • 重命名重复变量,区分存储屏幕尺寸的变量和存储最终随机宽高的变量
  • 生成的int类型随机值可以直接传给SizedBox/Positioned的宽高参数,这些参数本身接收double类型,Dart会自动适配,也可以手动调用.toDouble()做显式转换更稳妥

修复后完整代码

@override
Widget build(BuildContext context) {
  // 获取当前屏幕宽高,返回值为double类型
  double screenHeight = MediaQuery.of(context).size.height;
  double screenWidth = MediaQuery.of(context).size.width; 

  Random random = Random();
  // 配置随机尺寸的最小、最大值
  int minSize = 70;
  int maxHeight = screenHeight.toInt();
  int maxWidth = screenWidth.toInt();

  // 生成符合范围的随机宽高
  double randomHeight = (minSize + random.nextInt(maxHeight - minSize)).toDouble();
  double randomWidth = (minSize + random.nextInt(maxWidth - minSize)).toDouble();

  return Positioned(
    height: randomHeight,
    width: randomWidth,
    child: const SizedBox()
  );
}

注意:nextInt(max)生成的随机数范围是[0, max),也就是不包含max本身,上述写法生成的随机尺寸最大不会超过屏幕尺寸,完全符合约束要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:35