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

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

所属分类:软件开发 来源: 丁老师原创 更新时间:2025-05-25 10:38 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错误(显示溢出的具体像素值)。


相关文章

C++为什么不能在未命名的结构上调用成员函数...

int main() {auto hello= struct {int test() {return 1;}}().test();}有初学C++的小伙伴提问,在运行C++代码时报错,错误提示如下:<source :2:18: er...

IntelliJ/phpstorm/webs...

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

织梦dedecms防止木马漏洞的方法

织梦dedecms,很多站长起初建设网站都是织梦dedecms。因为程序非常符合seo优化,但是随着用的人越来越多,特别是一些精通织梦的人就想着搞一搞别人用织梦做的站,所以织梦出现了很多安全漏洞问题,该如何设置网站安全防护呢?

javascript中的字符串取第一个词的方...

有一个需求,要求在Javascript的字符串中,取出第一个词,注意,是字符串中的第一个单词,不是字符。研究了下,给出具体代码:var str="News media should foster peace and disar...

推荐文章

uniapp开发小程序和app时,根据登录状...

在使用uniapp开发app和小程序时,经常会用到打开app/小程序时,根据登录状态判断是显示首页还是跳转登录页的功能。此功能在app.vue的onlaunch方法中定义,方法如下:onLaunch: function() {const _...

Android Studio 打包APP制作...

在使用androidstudio打包app时,需要制作JKS证书,具体的命令如下:D:\Program Files\Java\jre1.8.0_301\bin keytool -genkey -v -keystore dlq6.jks -a...

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

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

tortoise svn出现no path ...

在日常开发过程中,突然发现svn无法提交和更新,出现“nopathorpathfilespecifiedonthecommandline”的错误,网上搜了一圈百度google以及stackoverflow都没找到真正能解决问题的办法,本着不...

QQ咨询 微信咨询