Flutter 中 Gap 和 SizedBox 的比较与区别

在 Flutter 中,两个小部件在控制应用设计布局尺寸和空间方面起着至关重要的作用,它们是 SizedBox 和 Gap 小部件。

在 Flutter 中构建响应式布局时,间距和大小很重要。框架提供了一些简单但功能强大的小部件来控制间距和大小,SizedBox 和 Gap。让我们来了解一下 SizedBox 和 Gap。

SizedBox

Flutter 中的 SizedBox 小部件是一个简单而多功能的小部件,它允许你显式地设置小部件的宽度和高度,从而精确控制其尺寸。

它是 Flutter SDK 中的内置小部件,类似于 Container 小部件,但属性较少。例如,以下代码将在两个小部件之间添加 10 像素高的间隙:

dart 复制代码
Column(
  children: [
    Text("Widget 1"),
    SizedBox(height: 10),
    Text("Widget 2"),
  ],
)

SizedBox 小部件还可用于约束子小部件的大小。例如,以下代码将使文本小部件的宽度为 100 像素:

dart 复制代码
SizedBox(
    width: 100,
    height: 100,
    child: Text(
        "Widget 1",
        style: TextStyle(fontSize: 16),
        maxLines: 2,
        overflow: TextOverflow.ellipsis,
    ),
);

Gap

Gap 小部件是 Flutter 中相对较新的补充,在 2.3.0 版本中引入。它简化了在 Flutter 的 widget 树中的 widget 之间添加空间的过程。

与需要明确指定高度或宽度的 SizedBox 和 Container 小部件不同,Gap 小部件会自动调整其大小以匹配父小部件的方向,使其使用起来更加直观和简洁。

Flutter 中 Gap 小部件的类型有哪些?

1. MaxGap 小部件

MaxGap 小部件是一个 Flutter 小部件,用于在列或行中的小部件之间添加间距。它会尝试用指定大小填充可用空间,但如果可用空间小于指定大小,则只会占用可用空间。当您希望缩小间隙以避免溢出时,这非常有用。

例如,你可以使用 MaxGap 小部件在 Row 中的两个按钮之间添加 20 像素的间距,如果 Row 不够宽,无法同时容纳两个按钮和间距,那么间距就会缩小,以便让按钮能够容纳。

dart 复制代码
Row(
  children: [	
    Text('Button 1'),
    MaxGap(20),
    Text('Button 2'),
  ],
)

2. SilverGap 小部件

SliverGap 是 Flutter 中的一个小部件,它在 Sliver 之间提供空间。Sliver 是一种用于创建自定义滚动效果的小部件。SliverGap 可以用于在 Sliver 之间添加垂直或水平间距,或者在 CustomScrollView 的开始或结束处创建固定数量的空间。

下面是一个示例,展示如何使用 SliverGap 在条纹之间添加垂直间距:

dart 复制代码
CustomScrollView(
  slivers: [
    SliverList(
      delegate: SliverChildBuilderDelegate(
        (context, index) {
          return Text('Item $index');
        },
        childCount: 10,
      ),
    ),
    SliverGap(height: 32.0),
    SliverList(
      delegate: SliverChildBuilderDelegate(
        (context, index) {
          return Text('Item ${index + 10}');
        },
        childCount: 10,
      ),
    ),
  ],
)

上面的代码创建了一个 CustomScrollView ,它有两个列表,两个列表之间有 32 像素的垂直间隔。

Gap 和 SizedBox 的关键比较和区别

Gap 和 SizedBox 都是 Flutter 中用于在小部件之间添加间距的小部件。然而,SizedBox 和 Gap 之间有一些关键的区别:

Flutter 中的 Gap 包提供了一系列小部件,可以简化在列和行等 Flex 容器以及可滚动视图中的小部件之间添加间距的过程。

SizedBox 是 Flutter SDK 中的一个内置小部件,它充当一个具有预定义大小的简单盒子,它为子小部件设置大小约束提供了灵活性,虽然其功能类似于 Container 小部件,但 SizedBox 提供了更简洁的方法,减少了属性集。

特性 Gap SizedBox
尺寸规格 在小部件之间添加间距 添加间距并约束其子元素的大小
性能 轻巧高效 功能丰富,但稍重
使用案例 简单的固定尺寸间隙 固定大小的间隙,大小约束
灵活性 小部件间的简单间距 父容器中的布局操作
依赖性 没有 需要 Gap 包

结束

在 Flutter 中,SizedBox 和 Gap 之间的选择取决于你 UI 设计的具体要求,SizedBox 提供精度和固定尺寸,适合某些场景,而 Gap 简化了创建自适应和响应式布局的过程。

通过理解这两个小部件的优势和用例,Flutter 开发人员可以优化他们的代码,以实现无缝和视觉上吸引人的用户体验。


原文:https://medium.com/@codetrade/comparison-and-differences-between-gap-and-sizedbox-2b8c6bac032c

相关推荐
sunly_3 小时前
Flutter:父组件,向子组件传值,子组件向二级页面传值
flutter
爱学习的绿叶7 小时前
flutter TabBarView 动态添加删除页面
flutter
趴菜小玩家9 小时前
使用 Gradle 插件优化 Flutter Android 插件开发中的 Flutter 依赖缺失问题
android·flutter·gradle
jhonjson1 天前
Flutter开发之flutter_local_notifications
flutter·macos·cocoa
iFlyCai1 天前
23种设计模式的Flutter实现第一篇创建型模式(一)
flutter·设计模式·dart
恋猫de小郭1 天前
Flutter 小技巧之 OverlayPortal 实现自限性和可共享的页面图层
flutter
A_cot2 天前
Vue.js:构建现代 Web 应用的强大框架
前端·javascript·vue.js·flutter·html·web·js
B.-2 天前
在 Flutter 应用中调用后端接口的方法
android·flutter·http·ios·https
️ 邪神2 天前
【Android、IOS、Flutter、鸿蒙、ReactNative 】约束布局
android·flutter·ios·鸿蒙·reactnative
pinkrecall20122 天前
flutter调试
flutter