负边际通常是不需要的,但在某些情况下它确实很有用.例如: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并描述您想要实现的模型,或者,自己实现并发送请求以供审查).然而,到目前为止,我们还没有发现它在实践中有那么大的用处,至少还不足以证明它的复杂性.

Flutter相关问答推荐

带有可滚动页面(不包括分页区)的Flutter 页面视图

Flutter -如何停止块监听程序在后台堆栈中运行

在Flutter TextField中计算子字符串位置

Ffltter:发布版本中的Path NotFoundException

如何实现Flutter 梳理机图像的小量移动

Flutter 隔离.使用多个参数运行

如何让经过Firebase身份验证的用户能够将Zip文件上载到Firebase云存储?

带有图标抖动的自定义下拉按钮

我无法找到修复此错误的位置,指出无法使用静态访问来访问实例成员

无状态和有状态小部件,我可以同时使用吗?

如何从列表中更新provider变量:Flutter列表和Provider优化指南

Flutter Firebase 升级后出现问题? ARC 语义问题 (Xcode): Select 器appleCredentialWithIDToken:rawNonce:fullName:没有已知的类方法

如何在向下滚动时隐藏顶部卡片并在向上滚动时出现?

如何根据应用程序主题(深色和浅色)更改谷歌 map 的主题?

通过点击缩略图加载全屏图像

我正在try 使用 Firebase 在 Flutter 中使用 Google 注销,但它不起作用

使用 Chaquopy 插件后 Gradle Sync 无法正常工作

我收到这个错误我无法解决

如何在Flutter 中将列表的模型类型转换为数组?

在 Flutter 中更新对象实例属性的最佳实践是什么?该实例嵌套在提供程序类的映射中,如下所示