开发中最让人感到惬意的还得是它—常用组件详解(填充系列)

简介: 普通的基础组件自然不能满足我们的日常开发需求,所以小T带大家了解Flutter开发中的常用组件。

前言
普通的基础组件自然不能满足我们的日常开发需求,所以小T带大家了解Flutter开发中的常用组件

本篇将介绍常用的组件。分为上中下三篇在这里插入图片描述
在这里插入图片描述
结构图:
在这里插入图片描述

本小结内容:

1.SizedBox

  • SizedBox.expand
  • SizedBox.shrink
  • SizedBox.fromSize

2.Expanded

这两个组件都是在屏幕适配时常用或者必用的,因为啥呢,它省事啊!
在这里插入图片描述

1.SizedBox

这是一个特定大小的盒子。这个widget给予子控件宽度和高度。如果宽度或高度为null,则此widget将调整自身大小以匹配子控件的大小。

让我们来看看他的源码:

SizedBox({ 
    Key? key, 
    this.width, 
    this.height, 
    Widget? child 
})

确实是很简单,但是丝毫不影响它的强大功能呢~

SizedBox尺寸调节:

  • SizedBox没有宽高约束,子控件有宽高约束,那么SizedBox会调节自己匹配子控件大小。
  • SizedBox有宽高约束,SizedBox子控件没有宽高约束,SizedBox父控件无约束,那么SizedBox会将自己的约束条件给予SizedBox子控件。
  • SizedBox父控件有约束,那么约束会传递给SizedBox。

举个小栗子:

         SizedBox(
            child: Container(
              width: 20,
              height: 20,
              child: Text("普通的填充"),
            ),
          ),
          Container(
            margin: EdgeInsets.only(top: 10),
            child: SizedBox(
              width: 20,
              height: 20,
              child: Text("包含填充"),
            ),
          ),
          Container(
            width: 20,
            height: 20,
            margin: EdgeInsets.only(top: 10),
            child: SizedBox(
              child:Text("没啥用哈哈"),
            ),
          ),

SizedBox.expand属性

尽可能大的在父控件的约束内显示

 Container(
            margin: EdgeInsets.only(top: 20),
            color: Colors.red,
            width: 50,
            height: 50,
            child: SizedBox.expand(
              child: Text("尽可能大的在父控件的约束内显示"),
            ),
          ),

SizedBox.shrink属性

尽可能小的在父控件的约束内显示

 Container(
            margin: EdgeInsets.only(top: 20),
            color: Colors.red,
            width: 50,
            height: 50,
            child: SizedBox.expand(
              child: Text("尽可能小的在父控件的约束内显示"),
            ),
          ),

SizedBox.fromSize

以Size尺寸约束

Container(
            margin: EdgeInsets.only(top: 10),
            child: SizedBox.fromSize(
              size: Size(20,20),
              child:  Text("以Size尺寸约束"),
            ),
          ),

这里解释一下Size:

  • Size(width, height):指定宽高
  • Size.copy(size) :从另一个Size复制尺寸
  • Size.square(dimension):正方形,dimension:边长
  • Size.fromWidth(width):指定宽度
  • Size.fromHeight(height):指定高度
  • Size.fromRadius(radius):指定半径,结果一样是正方形,Size.fromRadius(radius) = Size.square(2* radius)

这是一个用于标明组件尺寸的,开发中不常用,大家听听图一乐~
在这里插入图片描述

2.Expanded

Expanded组件是flutter中使用率很高的一个组件,它可以动态调整child组件沿主轴的尺寸,比如填充剩余空间,比如设置尺寸比例。它常常和Row或Column组合起来使用。

让我们来看看源码:

Expanded(
{Key key,
int flex: 1,
@required Widget child}
)

它除了child之外,有一个flex属性比较常用。flex表示弹性系数,默认是1。

它最最最常用在Row和Column中

基础组件详解请看这篇文章

举个栗子:
当Row中的组件不使用Expanded的时候

Scaffold(
      body: Column(
        children: [
          SizedBox(
            height: 20,
          ),
          Container(
              color: Colors.red,
              child: Row(children: <Widget>[
                Image.asset(
                  "images/myself.jpg",
                  width: 100,
                  height: 100,
                  fit: BoxFit.cover,
                ),
                Image.asset(
                  "images/myself.jpg",
                  width: 100,
                  height: 100,
                  fit: BoxFit.cover,
                ),
                Image.asset(
                  "images/myself.jpg",
                  width: 100,
                  height: 100,
                  fit: BoxFit.cover,
                )
              ]))
        ],
      ),
    );

在这里插入图片描述
使用Expanded时:

Scaffold(
      body: Column(
        children: [
          SizedBox(
            height: 20,
          ),
          Container(
              color: Colors.red,
              child: Row(children: <Widget>[
                Expanded( //使用ta去包裹组件
                  child: Image.asset(
                    "images/myself.jpg",
                    width: 100,
                    height: 100,
                    fit: BoxFit.cover,
                  ),
                ),
                Image.asset(
                  "images/myself.jpg",
                  width: 100,
                  height: 100,
                  fit: BoxFit.cover,
                ),
                Image.asset(
                  "images/myself.jpg",
                  width: 100,
                  height: 100,
                  fit: BoxFit.cover,
                )
              ]))
        ],
      ),
    );

在这里插入图片描述
这些组件就是这么简单~

至此我们的Flutter的基本组件和常用组件在这里就结束了。
我们将会开启对于网络请求,路由管理,屏幕适配,性能优化等进阶~,希望大家持续关注阿T。
在这里插入图片描述
欢迎留言纠正 ~ 不妨给个点赞哈哈

相关文章
|
1天前
|
前端开发 搜索推荐 JavaScript
探析单页应用(SPA)与多页应用(MPA):从技术角度选择合适的应用形式
随着Web应用的快速发展,单页应用(SPA)和多页应用(MPA)成为了开发者们在构建Web应用时常遇到的两种选择。本文将从技术角度出发,深入比较单页应用和多页应用的特点和优势,帮助读者更好地选择适合自己项目的应用形式。
23 0
|
1天前
|
前端开发
前端知识笔记(十三)———单全选框控制方法,炒鸡无敌方便!!!
前端知识笔记(十三)———单全选框控制方法,炒鸡无敌方便!!!
16 0
|
8月前
|
C语言
C项目(贪吃蛇BUG解决及功能扩展)
C项目(贪吃蛇BUG解决及功能扩展)
74 0
|
Web App开发 前端开发 JavaScript
前端必须熟悉的几种布局方式
本章主要是回顾Flex使用 和 一些常用布局的写法。
128 0
|
数据库
小六六平时的开发小技巧一(公共属性填充设计)
前言 文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…
102 0
|
JavaScript 调度 数据安全/隐私保护
Flask框架flash消息闪现学习与优化符合闪现之名
第一次知道Flask有flash这个功能时,听着名字就觉得高端,==消息闪现==...是跳刀闪烁躲技能的top10操作吗?可结果让我好失望,那里有什么闪现的效果,不过是平常的消息传输与展示罢了。那么今天我就带着大家在学习flash功能的基础上,增加闪现效果!
248 0
|
JSON JavaScript 数据可视化
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)
|
JSON 数据可视化 JavaScript
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(一)
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(一)
|
前端开发 JavaScript 小程序
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
这几天一直在做混合开发,使用的是uni-app开发的,一套代码,多端使用,适用于各个平台。听起来很完美,使用过程不可多说,不知道是因为我们的需求变态还是我们团队两端技术水平太差。总之,开发联调过程十分痛苦,加上uniapp的调试十分困难,一度让我们两端互怼。这其中我印象最深的一个bug就是在对接联调总出现的
1664942 33
印象最深的一个bug——使用uinapp做混合开发静态图片在安卓端不显示
|
数据处理
【氚云】关于数据隐藏的3个实用技巧,用过的都说好!
今天分享的是如何批量去除空白行和列,也是个简单好用的小技巧,能在不经意间节省时间,提升效率,早点下班!
654 0
【氚云】关于数据隐藏的3个实用技巧,用过的都说好!
http://www.vxiaotou.com