在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错误(显示溢出的具体像素值)。
现在微信支付已经超越支付宝,成为中国最广泛的在线支付方式。作为互联网电子商务服务商,如何开通对接微信支付?如何使用微信支付呢?丁老师整理一篇微信支付常见的问题解答。一、如何开通微信支付?微信支付可以在微信支付官网(https://pay...
flex-space-betweendisplay:flex;justify-content:space-between;flex-columndisplay:flex;flex-flow:column;flex居中display:fl...
有个客户提出了一个需求,他的稿件经常包含有中英文混合内容,现在需要把中文和英文分离开来,即把中文单独取出来,把英文取出来,该怎么实现呢?下边,丁老师用php的方法,来帮你实现。$str="Hello 丁老师软件开发 How a...
有同学提问,在使用PHPExcel时,使用自带的setAutoSize方法无效,代码如下:$PHPExcel- getActiveSheet()- getColumnDimension(PHPExcel_Cell::stringFrom...
在php代码中,遇到复杂的sql语句,需要拼装sql语句,如:$sql='id 10;' $sql=' and( status in(1,2,3,4,5) and id not in (select id from ...
用phpmyadmin导入大数据库文件时,容易502 bad gateway,可以直接在linux上用mysql原生命令导入。1.上传sql文件到目录用Xshell登录服务器,将迁移过来的 sql 文件移到 home 目录下,方便下一步的...
CI框架是一款很小却又非常强大的PHP程序框架,非常适合用来搭建中小型网站以及扩展程序。有同学问到,在使用CI框架时,比如要对全站的标题、公司信息、电话等设置一个全局变量,不用每个页面都写死,该怎么办呢?丁老师来教你:1.打开页面的控制器文...
mui的toast默认是在底部的,并且没有参数设置位置,经过研究发现可以通过修改css的方式设置位置,具体方法如下:1.mui toast设置type为divmui.toast('hello', { type: 'd...