Flutter是否支持负保证金?
通常不需要负边距,但有些情况下它确实很有用.例如:
why use negative margins?
现在,当我将容器的边距设置为负值时,我收到以下错误: I/flutter ( 3173): 'package:flutter/src/widgets/container.dart': Failed assertion: line 251: 'margin == null || I/flutter ( 3173): margin.isNonNegative': is not true. 解决方法
要回答这个问题,首先要确定一般的“负边际”或真正的“边际”.在CSS中,边距在各种布局模型中具有不同的含义,最常见的是,它们是有助于计算块布局模型用于放置后续子节点的偏移的若干值之一;在这种情况下,负的总保证金仅仅意味着下一个孩子被放置在前一个孩子的底部之上而不是之后.
在Flutter中,与CSS一样,有几种布局模型;但是,目前没有相当于CSS块布局模型的小部件(它支持边缘折叠,负边距,跳过浮动等).这样的布局模型当然可以实现,它还没有实现,至少不在框架本身. 要实现这样的布局模型,您可以创建一个类似于RenderFlex或RenderListBody的RenderBox后代,可能提供了一种使用ParentDataWidget设置每个子节点边距的方法,就像Flex子节点可以使用Expanded小部件配置其flex一样. 设计这样的新布局模型时,最复杂的部分可能是决定如何处理溢出或下溢,当子项太大或太小而不适合传递给这个新布局渲染对象的约束时.如果子代下溢,RenderFlex渲染对象有一种分配空间的方法,并且如果它们溢出则认为它是错误的(在调试模式下,这由黄黑条纹警告区域和记录到控制台的消息显示) ;另一方面,RenderListBody渲染对象认为约束必须在主轴上无界限,这意味着您基本上只能在列表中使用此布局模型(因此名称). 如果编写新的布局模型不具吸引力,则可以使用允许重叠子项的现有布局小部件之一. Stack是显而易见的选择,您可以在其中设置每个子项的显式位置,并且它们可以任意重叠(这与CSS绝对位置布局模型模糊地相似).另一个选项是CustomMultiChildLayout小部件,它允许您依次布局和定位每个子节点.有了这个,你可以一个接一个地定位每个孩子,通过将后续孩子的位置设置为从前一个孩子的大小和位置得到的值来模拟负边距,但是这样后续孩子的顶部高于前一个孩子的孩子的底部. 如果对类似块的布局模型感兴趣,我们当然可以实现它(请提交错误并描述您想要实现的模型,或者自己实现并发送拉取请求以进行审核).但到目前为止,我们还没有发现它在实践中有用,至少没有足够的用来证明复杂性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |