第二十一回:布局约束类Widget

这篇具有很好参考价值的文章主要介绍了第二十一回:布局约束类Widget。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


我们在上一章回中介绍了进度条Widget相关的内容,,本章回中将介绍 布局约束类Widget。闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在这里说的布局约束表示可以控制其它Widget大小,Flutter中提供了一些Widget,它们专门用来控制其它Widget的大小,我将它们称作约束布局类Widget.

之所以要介绍它们是因为上一章回中介绍进度条时发现无法调整进度条的大小,只有在进度条组件外层嵌套一个约束类Widget时才可以控制进度条的大小。

使用方法

常用的布局约束类Widget有Container(第四回介绍过),Expanded,ConstrainedBox,SizedBoxFractionallySizedBox。除了Expanded外,它们都提供长度和宽度类属性,并且带有一个child属性,给长度和宽度属性赋值后可以约束child属性中widget的长度和宽度。

Expanded组件比较特殊,它表示尽可能地占满父类布局的剩余空间,所以它没有提供长度和宽度相关的属性,不过它提供了一个flex属性,用来控制长度和宽度的比例,它可以和Containter组件配合使用。注意该组件只能用在Column和Rom这种布局类组件中,我们在介绍Column和Rom组件时提到过该组件。

示例代码

 return Scaffold(
    appBar: AppBar(
      title: const Text("Example of All kinds of Constrained box"),
      backgroundColor: Colors.purpleAccent,
    ),
    body: Column(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        //最小和最大约束,最大不指定默认为无限大,不过不能大过父约束
        ConstrainedBox(
          constraints: const BoxConstraints(
            minHeight: 30,
            minWidth: 30,
          ),
          child: const Text("This is the column 1"),
        ),
        //固定大小约束
        const SizedBox(
          width: 300,
          height: 50,
          child: Text("This is the column 2"),
        ),
        //按照比例约束,需要在外面套一个约束才可以运行,不然报运行时错误
        Container(
          color: Colors.blue,
          width: double.infinity,
          height: 100,
          child: const FractionallySizedBox(
            widthFactor: 0.5,
            heightFactor: 0.2,
            child: Text("This is the column 3"),
          ),
        ),
        const SizedBox(
          width: 300,
          height: 20,
          child: Text("This is the column 4"),
        ),
        Expanded(
          flex: 1,
          child: Container(
            color: Colors.blue,
            child: const Text("This is the column 5"),
          ),
        ),
        Expanded(
          flex: 2,
          child: Container(
            color: Colors.deepPurple,
            alignment: Alignment.centerRight,
            child: const Text("This is the column 6"),
          ),
        ),
        Expanded(
          flex: 3,
          child: Container(
            color: Colors.blue,
            alignment: Alignment.center,
            child: const Text("This is the column 7"),
          ),
        ),
      ],
    ),
  );

我们在这里只列出了核心代码,完整的代码可以查看Github上ex012文件中的代码。我们不演示程序运行结果了,建议大家自动动手运行并且体会一下约束布局的功能。

经验总结

最后我们对这些组件的功能和用法做一个总结,详细如下;

  • Container组件通过它的width和height属性用来控制被约束组件的宽度和高度,而且可以设定背景颜色,它的使用范围最广;
  • Expanded组件需要和Column和Row配合使用,通过它的flex属性来控制被约束组件在父组件中宽度和高度占用的比例,类似Android中的weight;
  • ConstrainedBox组件需要配合BoxConstraints组件使用,用来控制被约束组件的最小/大宽度和高度;
  • SizedBox组件通过它的width和height属性用来控制被约束组件的宽度和高度,相当于指定被约束组件的大小。它类似Container组件,只是不能设置背景色;
  • FractionallySizedBox组件通过它的widthFactor和heightFactor属性用来控制被约束组件的宽度和高度在父布局中的占比,它类似Expanded中的Flex,不过不能直接在Column和Row中使用,需要在它的外层添加一个有长度和宽度的容器,比如Container.不然编译正常但是在运行时就会发生错误。

我的经验是使用Column和Row来控制整个布局的垂直和水平方向,然后通过Expanded组件及其flex属性来约束子组件的大小,这种方法类似于Android中的约束布局,并且布局中的子组件都是按照指定的比例排列,这样做的好处是可以适配各种大小不同的屏幕。

看官们,关于布局约束类Widget相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!文章来源地址https://www.toymoban.com/news/detail-431988.html

到了这里,关于第二十一回:布局约束类Widget的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第二十一章网络通信

    网络程序设计基础 局域网与互联网 为了实现两台计算机的通信,必须用一个网络线路连接两台计算机。如下图所示  网络协议 1.IP协议 IP是Internet Protocol的简称,是一种网络协议。Internet 网络采用的协议是TCP/IP协议,其全称是Transmission Control Protocol/Internet Protocol。Internet 依靠

    2024年02月05日
    浏览(24)
  • UCB Data100:数据科学的原理和技巧:第二十一章到第二十六章

    原文:SQL II 译者:飞龙 协议:CC BY-NC-SA 4.0 学习成果 介绍过滤组的能力 在 SQL 中执行数据清理和文本操作 跨表连接数据 在本讲座中,我们将继续上次的工作,介绍一些高级的 SQL 语法。 首先,让我们加载上一堂课的数据库。 HAVING 通过在每个组的所有行上应用一些条件来过

    2024年01月21日
    浏览(110)
  • Java多线程&并发篇----第二十一篇

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 ArrayB

    2024年01月18日
    浏览(33)
  • 研一第二十一周论文阅读情况

    一、《Benchmarking PathCLIP for Pathology Image Analysis》 1、Abstract:         准确的图像分类和检索对于临床诊断和治疗决策具有重要意义。最近的对比语言图像预训练(CLIP)模型在理解自然图像方面表现出了显着的能力。从CLIP中汲取灵感,PathCLIP专为病理学图像分析而设计,在

    2024年02月19日
    浏览(26)
  • Vue3学习(二十一)- 文档管理页面布局修改

    按照国际惯例,要先聊下生活,吐槽一番,今天是2月14日,也是下午听老妈说,我才知道! 现在真的是对日期节日已经毫无概念可言,只知道星期几。 现在已经觉得写博客也好,学习文章也罢,和写日记一样,已经融入到我的生活中,或者更确切的说,变成生活的一部分了

    2024年03月09日
    浏览(43)
  • 【Three.js】第二十一章 Physics 物理

    物理是WebGL可以添加到项目体验中最酷的功能之一。人们喜欢真实物理感的物体,看到它们碰撞、倒塌、坠落和弹跳,就像我的作品集一样: https: //bruno-simon.com/ 有很多方法可以将物理功能添加到您的项目中,这取决于您想要实现的目标。您可以使用一些数学和解决方案(例

    2024年02月09日
    浏览(23)
  • 第二十一章 : Spring Boot 集成RabbitMQ(五)

    第二十一章 : Spring Boot 集成RabbitMQ(五) 前言 本章知识点: 如何保证消息100%可靠性发送的技术解决方案。 一、 应用场景 在使用消息队列时,因为生产者和消费者不直接交互,所以面临下面几个问题: 1)要把消息添加到队列中,怎么保证消息成功添加? 2)如何保证消息

    2024年02月03日
    浏览(33)
  • 网络安全进阶学习第二十一课——XXE

    XXE(XML External Entity,XML) 外部实体 注入攻击。 — — 攻击者通过构造 恶意的外部实体 ,当解析器解析了包含“恶意”外部实体的XML类型文件时,便会导致被XXE攻击。XXE漏洞主要由于危险的外部实体引用并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目录遍

    2024年02月06日
    浏览(40)
  • 盖子的c++小课堂——第二十一讲:map

    时隔一周,我又来更新了^_^,今天都第二十一讲了,前三个板块马上就结束了,也就是小课堂(1)马上结束了, 敬请期待“盖子的c++小课堂(2)” ,嘿嘿~~ 数据容器——一对一映射 每个人都有对应一个身高 每个string对应一个double 每个阿拉伯数字都有对应一个拼写 每个i

    2024年02月15日
    浏览(26)
  • vue3第二十一节(新增编译宏defineExpose)

    引言 :在 vue2 中我们可以使用 this.$refs.xxx 调用组件内部的属性或者方法,同时子组件也可以使用 this.$parent.xxx 调用父组件的属性和方法; 但是 当我们在 setup 语法糖中,因为此时的组件 默认是关闭即组件是私有的 ,故使用 $parent.xxx 或者 $children.xxx 是 无法获取到对应的实例

    2024年04月24日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包