Flutter 布局

2025年3月17日 | 阅读 8 分钟

布局机制的主要概念是小部件。我们知道 Flutter 将所有东西都视为一个小部件。因此,图像、图标、文本,甚至您的应用程序的布局都是小部件。在这里,您在应用程序 UI 上看不到的一些内容,例如排列、约束和对齐可见小部件的行、列和网格,也是小部件。

Flutter 允许我们通过组合多个小部件来构建更复杂的小部件以创建布局。 例如,我们可以看到下图显示了带有每个标签下的三个图标。

Flutter Layouts

在第二张图中,我们可以看到上图的视觉布局。 该图显示了三列的行,这些列包含一个图标和一个标签。

Flutter Layouts

在上图中,container 是一个小部件类,允许我们自定义子小部件。 它主要用于添加边框、填充、边距、背景颜色等等。 在这里,文本小部件位于容器下方以添加边距。 整个行也放在一个容器中,用于在行周围添加边距和填充。 此外,其余 UI 由 color、text.style 等属性控制。

布局一个小部件

让我们学习如何创建和显示一个小部件。 以下步骤显示了如何布局一个小部件

第 1 步: 首先,您需要选择一个布局小部件。

第 2 步: 接下来,创建一个可见的小部件。

第 3 步: 然后,将可见小部件添加到布局小部件。

第 4 步: 最后,将布局小部件添加到您要显示它的页面。

布局小部件的类型

我们可以将布局小部件分为两种类型

  1. 单子小部件
  2. 多子小部件

单子小部件

单子布局小部件是一种小部件,它只能在其父布局小部件内包含 一个子小部件。 这些小部件还可以包含特殊的布局功能。 Flutter 为我们提供了许多单子小部件,使应用程序 UI 具有吸引力。 如果我们适当地使用这些小部件,它可以节省我们的时间并使应用程序代码更具可读性。 不同类型的单子小部件的列表是

Container: 这是一个最受欢迎的布局小部件,它为小部件的绘制、定位和大小调整提供了可自定义的选项。

Padding: 这是一个小部件,用于通过给定的填充来排列其子小部件。 它包含 EdgeInsetsEdgeInsets.fromLTRB,用于您要提供填充的所需侧。

Center: 此小部件允许您在其自身内居中子小部件。

Align: 这是一个小部件,它在其自身内对齐其子小部件,并根据子小部件的大小调整其大小。 它提供了更多控制权,可以将子小部件放置在您需要的确切位置。

SizedBox: 此小部件允许您通过所有屏幕为子小部件提供指定的大小。

AspectRatio: 此小部件允许您将子小部件的大小保持为指定的长宽比。

Baseline: 此小部件根据子小部件的基线移动子小部件。

ConstrainedBox: 这是一个小部件,它允许您在其子小部件上强制添加约束。 这意味着您可以强制子小部件具有特定的约束,而无需更改子小部件的属性。

CustomSingleChildLayout: 这是一个小部件,它将单子的布局委托给一个委托人。 委托人决定定位子小部件,也用于确定父小部件的大小。

FittedBox: 它根据指定的 fit 缩放和定位子小部件。

输出

Flutter Layouts

FractionallySizedBox: 这是一个小部件,它允许根据可用空间的比例调整其子小部件的大小。

IntrinsicHeight 和 IntrinsicWidth: 它们是一个小部件,允许我们将子小部件的大小调整为其子小部件的固有高度和宽度。

LimitedBox: 此小部件允许我们仅在未受约束时限制其大小。

Offstage: 它用于测量小部件的尺寸,而无需将其带到屏幕上。

OverflowBox: 这是一个小部件,它允许对其子小部件施加与从父级获得的不同约束。 换句话说,它允许子级溢出父级小部件。

示例

输出

Flutter Layouts

多子小部件

多子小部件是一种小部件,它包含 多个子小部件,并且这些小部件的布局是 唯一的。 例如,Row 小部件以水平方向布局其子小部件,而 Column 小部件以垂直方向布局其子小部件。 如果我们组合 Row 和 Column 小部件,那么它可以构建任何级别的复杂小部件。

在这里,我们将学习不同类型的多子小部件

Row: 它允许以水平方向排列其子小部件。

示例

输出

Flutter Layouts

Column: 它允许以垂直方向排列其子小部件。

ListView: 这是最流行的滚动小部件,它允许我们在滚动方向上一个接一个地排列其子小部件。

GridView: 它允许我们将子小部件排列为小部件的可滚动、2D 数组。 它由以水平和垂直布局排列的重复单元格模式组成。

Expanded: 它允许 Row 和 Column 小部件的子级占据尽可能大的区域。

Table: 这是一个小部件,它允许我们以基于表格的小部件排列其子级。

Flow: 它允许我们实现基于流的小部件。

Stack: 这是一个基本的小部件,主要用于重叠多个子小部件。 它允许您将多个图层放置到屏幕上。 以下示例有助于理解它。

输出

Flutter Layouts

构建复杂的布局

在本节中,我们将学习如何使用单子和多子布局小部件创建复杂的用户界面。 布局框架允许您通过在行和列中嵌套行和列来创建复杂的用户界面布局。

让我们通过创建 产品列表 来了解一个复杂的用户界面示例。 为此,您首先需要使用以下代码段替换 main.dart 文件的代码。

在上面的代码中,我们创建了一个小部件 ProductBox,其中包含产品的详细信息,例如图像、名称、价格和描述。 在 ProductBox 小部件中,我们使用以下子小部件:Container、Row、Column、Expanded、Card、Text、Image 等。此小部件包含以下布局

Flutter Layouts

输出

现在,当我们在 android 模拟器中运行 dart 文件时,它将给出以下输出。

Flutter Layouts
下一主题Flutter 手势