在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错误(显示溢出的具体像素值)。
开发抖音小程序是一个涉及多个步骤的过程,需要准备相应的资料和工具。以下是开发抖音小程序需要准备的资料和步骤:1.入驻抖音开发平台:首先,你需要在抖音开放平台注册一个开发者账号,并完成主体认证和对公认证。如果未完成认证,你可以在沙盒工具中...
这个时候可以用到live方法
在开发微信小程序的过程中,生成的是带有logo的小程序二维码,并且这个二维码不是通用的二维码,而是只能用微信打开的专属二维码,如图:遇到这样一个需求,生成的二维码要方形的通用二维码,并且不能带有小程序的logo。这种该怎么实现呢?经过查...
最近有同学提问,在开发的软件项目中,用户上传的文件名中包含空格,导致用户点击下载时,提示找不到该文件,404的错误,这种问题怎么解决呢?首先,引起这种问题的原因就是文件名中有空格,导致了下载的url无法形成完成的链接。我分别做了两个下载...
用phpmyadmin导入大数据库文件时,容易502badgateway,可以直接在linux上用mysql原生命令导入。1.上传sql文件到目录用Xshell登录服务器,将迁移过来的sql文件移到home目录下,方便下一步的操作,站长之前...
mui的toast默认是在底部的,并且没有参数设置位置,经过研究发现可以通过修改css的方式设置位置,具体方法如下:1.muitoast设置type为divmui.toast('hello', {type: 'div...
fastadmin里自定义按钮的btn-dialog,弹出窗口时默认大小,设置了data-area无效,经过研究后,发现了可用的方法,直接上代码不废话:table.on('post-body.bs.table',functi...
在用photoshop设计时,有的同学会发现,在网页中设置的宽度1000px,截屏后,再用photoshop打开后测量同样图像的宽度时,这个宽度就不是1000像素,而是1200多甚至1300多,是个很奇怪的问题,丁老师检查了photosho...