在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错误(显示溢出的具体像素值)。
在使用uniapp开发app和小程序时,经常会用到打开app/小程序时,根据登录状态判断是显示首页还是跳转登录页的功能。此功能在app.vue的onlaunch方法中定义,方法如下:onLaunch: function() {const...
在使用PHP框架CI时,有个很恶心的地方就是他的URL需要带上index.php,比如我要建一个user模块,想要实现www.xxx.com/user/的效果,但是在CI框架下必须要www.xxx.com/index.php/user这...
1.composer版本更新文档版本号:https://getcomposer.org/download中文网:https://docs.phpcomposer.com/03-cli.html#self-update英文网:https:...
在使用JetBrains旗下的IDE产品,如Intellijidea、Webstorm、Phpstorm时,有个很讨厌的行为,就是在写代码时,如果换行输入闭合大括号}的时候,编辑器会自动对整个文档的代码进行重新格式化操作,这让一些有代码...
在使用androidstudio打包app时,需要制作JKS证书,具体的命令如下:D:\Program Files\Java\jre1.8.0_301\bin keytool -genkey -v -keystore dlq6.jks -a...
宝塔面板的phpmyadmin,默认数据库表导航树是每30个一页,非常的不直观,可以通过修改宝塔phpmyadmin配置文件的方式来禁止他分页。修改方法:1.进入服务器/www/server/phpmyadmin/phpmyadmin_随机...
正确的USB连线,其次打开开发者选项、USB调试,这些都是老生常谈,就不说了。在确保以上操作无误后,如果还找不到真机,关闭IDE,然后去adb的目录下,即HBuilderX\plugins\launcher\tools\adbs,把adb....
内网穿透,是指外网可以访问内网,没有固定IP的服务器,所以需要中间件来进行通讯,目前稳定成熟的中间件软件,要么价格太贵,要么就是只能使用标准服务,不能完全的定制化。那么,到底有没有一个性价比最优的方案呢?回答是肯定的,答案就是使用云服务器+...