首页 > 原创文章 > 软件开发 > 查看文章

在Dart/Flutter中,double.infinity和double.maxFinite的区别是什么?

所属分类:软件开发 来源: 丁老师原创 更新时间:2025-05-25 10:38 浏览: 2412 IP属地: 深圳

在Flutter中,double.infinity和double.maxFinite看起来非常的相似,他们的区别是什么,分别在什么情况下使用呢?今天丁老师给你解答。

如果从严格的面向数据角度来看,两者的区别在于double.maxFinite表示double数据类型所能容纳的最大允许值,而double.infinity则表示无穷大。由于Dart在所有平台上都将double严格定义为64位浮点数,因此double.maxFinite的值为1.7976931348623157e+308。

在Flutter中,其实大多数时候这两个值之间没有太大的实际差异。实际用到的地方通常是在调整widget的大小方面,当你希望widget尽可能大时,会使用double.infinity设置宽度或高度:

SizedBox(
	width:800,
	height:800,
	child:Container(
		width:double.infinity,
		height:double.infinity,
	),
)

在这个例子中,子Container被赋予了无限的宽度和高度。Flutter会通过其父级来计算它实际可获得的空间大小,并在必要时对其进行约束。在这种情况下,Container受到SizedBox的约束,SizedBox对Container强制设置了500×500像素的严格限制,无论Container请求多少空间,它都不能超过这个大小。因此,用double.maxFinite替换double.infinity不会产生任何变化,因为父级SizedBox仍然只会让它达到这么大。

数值定义
double.infinity
表示正无穷大(∞),即一个比任何有限数值都大的值。在IEEE 754标准中,它对应于指数位全为1且尾数位全为0的浮点数表示。
double.maxFinite
表示最大的有限双精度浮点数,其值约为1.7976931348623157e+308。这是64位双精度浮点数能表示的最大正值,超过这个值会导致溢出(变为double.infinity)。

在Flutter布局中的行为
在Flutter的布局系统中,这两个值的表现差异尤为明显:

double.infinity
用于告诉父组件“尽可能占据可用空间”,但需父组件主动约束其大小。
例如,在SizedBox、ConstrainedBox等明确限制尺寸的父组件中,double.infinity会被约束为父组件的大小。
错误场景:
若父组件本身无边界(如Column、Row在主轴方向默认无限延伸),使用double.infinity会导致布局冲突,抛出BoxConstraints forces an infinite height/width错误。

double.maxFinite
指定一个极大但有限的值,通常约为1.79e+308像素。
父组件若有约束,会限制其大小;若无约束,可能导致组件尺寸超出屏幕范围,引发RenderFlex overflowed错误(显示溢出的具体像素值)。


标签:

相关文章

安装fastadmin提示“你所浏览的页面暂...

安装fastadmin,打开后提示"你所浏览的页面暂时无法访问",无法安装,是因为程序的runtime没有写权限,需要对runtime目录,添加写权限。解决方法:windows:右键目录,写入按钮打勾。如果不行,在“...

IntelliJ/phpstorm/webs...

在使用jet brains的ide开发代码时,经常性的会输入单引号或双引号,ide默认有对于引号的自动完成功能,即输入一个引号,自动显示两个,这一点其实做的很不智能,因为在使用时经常会有显示出3个的情况,那么怎么关闭这个功能呢?file...

Uniapp开发微信小程序怎么模拟位置?

废话不多说,直接上货。在微信开发者工具调试栏,找到Sensor(传感器)。Geolocation,勾选启用,下边输入经纬度即可!

PDF和图片怎么添加水印

pdf添加水印,可以使用专业的pdf工具,如Adobe Acrobat、福昕PDF阅读器等,支持文字和图片形式的添加水印,支持透明度设置、水印位置设置等。图片添加水印,可以使用photoshop软件,但是photoshop太大了,而且使...

推荐文章

CI框架页面添加全局变量的方法

CI框架是一款很小却又非常强大的PHP程序框架,非常适合用来搭建中小型网站以及扩展程序。有同学问到,在使用CI框架时,比如要对全站的标题、公司信息、电话等设置一个全局变量,不用每个页面都写死,该怎么办呢?丁老师来教你:1.打开页面的控制器文...

微信公众号如何集成对接网站网页

微信公众号可以把官网的网页集成进去吗?想通过微信公众号实现打开公司网站的页面,具体要怎么实现呢?其实这个功能,可以通过微信菜单的方式来实现...

Uniapp开发微信小程序时,微信开发者工具...

在使用uniapp开发微信小程序,微信开发者工具调试时,明明已经给了获取位置权限,但还是提示需要打开gps获取位置,具体解决办法如下:打开uniapp的manifest.json文件,切换到源码模式,找到mp-weixin节点"p...

Uniapp开发小程序内的图片扫码

在使用uniapp开发的小程序内,打开图片,长按没有弹出菜单,无法扫码,此时只需在图片上加入show-menu-by-longpress即可完整代码:<image :src="picture" mode="...

当前在线
免费咨询