负边际通常是不需要的,但在某些情况下它确实很有用.例如: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.
负边际通常是不需要的,但在某些情况下它确实很有用.例如: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中,边距在不同的布局模型中有不同的含义,最常见的是,它们是有助于计算块布局模型用于放置后续子对象的偏移量的几个值之一;在这种情况下,负的总边距仅仅意味着下一个子项位于前一个子项的底部之上,而不是之后.
在Ffltter中,和在css中一样,有几种布局模型;但是,目前还没有与css挡路布局模型等效的小部件(它支持边距折叠、负边距、 skip 浮动等).这样的布局模型当然可以实现,只是还没有实现,至少在框架本身还没有实现.
要实现这样的布局模型,您需要创建一个类似于RenderFlex或RenderListBody的RenderBox子代,可能会提供一种使用ParentDataWidget设置每个子代的边距的方法,就像Flex子代可以使用展开的小工具配置其flex
一样.
在设计这样的新布局模型时,可能最复杂的部分是决定当子对象太大或太小而无法满足传递给新布局渲染对象的约束时,如何处理溢出或下溢.RenderFlex呈现对象有一种方法可以在子项下溢时分配空间,如果它们溢出则将其视为错误(在调试模式下,这由黄黑相间的条纹警告区域和记录到控制台的消息显示);而RenderListBody呈现对象则认为约束must在主轴上是无界的,这意味着您基本上只能在列表中使用此布局模型(由此得名).
如果编写新的布局模型不吸引人,您可以使用允许重叠子对象的现有布局小部件之一.堆栈是显而易见的 Select ,您可以设置每个子级的显式位置,它们可以任意重叠(这与CSS绝对位置布局模型有些相似).另一个选项是CustomMultiChildLayout小部件,它允许您依次布局和定位每个子级.这样,您可以一个接一个地定位每个子项,通过将后续子项的位置设置为从前一个子项的大小和位置派生的值来模拟负边距,但使后续子项的顶部高于前一个子项的底部.
如果对类似块的布局模型感兴趣,我们当然可以实现它(请提交一个bug并描述您想要实现的模型,或者,自己实现并发送请求以供审查).然而,到目前为止,我们还没有发现它在实践中有那么大的用处,至少还不足以证明它的复杂性.