当前位置: 首页 > article >正文

Flutter 小技巧之 Row/Column 即将支持 Flex.spacing

事实上这是一个相当久远的话题,如果对于前因后果不管兴趣,直接看最后就行。

这个需求最早提及应该是 2018 年初在 #16957 被人提起,因为在 Flutter 上 WraprunSpacingspacing 用于配置垂直和水平间距,而为什么 ColumRow 这样更通用的控件居然没有 spacing 支持?

而后在 2020 年,Flutter 在 #55378 用户希望再一次推进 Row/Column 内置 spacing 的实现,但后续从 PM 的角度却认为,这并不是一个很急需的功能,并且正常情况下通过额外的实现也可以做到类似需求,而通过增加 Flex 的复杂度来内置这种“非必需”的 spacing 完全没必要。

事实上 ColumRow 一开始缺乏 spacing 相关配置并非 Flutter 特例,早期 Jetpack Compose 同样缺少 itemSpacing ,只是四年前 Jetpack Compose 通过了用户的提议,后续才有了 Arrangement.spacedBy 的相关支持,而这也成为了 Flutter 在 Row/Column 同样需要内置 spacing 的有力佐证。

另外后续用户的指出,目前众多 UI 框架上只有极少数的 Row/Column 没有内置 spacing , 甚至曾经没有的 Jetpack Compose 都提供了,这时候 Flutter 拒绝内置这样一个「实现并不困难」的功能并不理智,所以官方开始松口。

而在 TahaTesser 的坚持努力下,最后这个需求终于被合并了,而事实上在 Flex 上直接支持 spacing 确实侵入性很强,因为它确确实实要侵入性到底层的通用代码。

相信作为程序员大多应该都能衡量,如果因为这样一个 spacing 修改,导致一个大量使用的业务代码可能出现问题,那后果绝对是难以接受的,不得不说 TahaTesser 很头铁,正常人应该都不愿意接这个锅。

而从调整的结果看,核心就是根据主轴布局增加了 spacing 的支持,最终体现在 childMainPosition 上,落地后的改动量其实并不大,所以最终也被成功合并,风险评估不高。

最后,前面扯了那么多,对于大多数开发者,其实就是通过 main 分支,现在可以通过 spacing 属性配置 Row/Column 的 child 间距,另外 #78200 对于 PageView 增加参数指定页面之间的边距的 issue 也被提了出来。

从目前来看,这对于 Flutter 开发者来说是好事,大概下一个 stable 版本应该就可以在 Row/Column 用上了 spacing 了,同时可以看到,只要能提出有力的证据,还是可以推动一些「必要的功能」,当然可能还需要有一个头铁的「哥们」。

		const Column(
          spacing: 20.0,
          children: <Widget>[
            Row(
              spacing: 50.0,
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                ColoredBox(
                  color: Color(0xffff0000),
                  child: SizedBox(
                    width: 50.0,
                    height: 75.0,
                    child: Center(
                      child: Text(
                        'RED',
                        style: TextStyle(color: Colors.white),
                      ),
                    ),
                  ),
                ),
                ColoredBox(
                  color: Color(0xff00ff00),
                  child: SizedBox(
                    width: 50.0,
                    height: 75.0,
                    child: Center(
                      child: Text(
                        'GREEN',
                        style: TextStyle(color: Colors.black),
                      ),
                    ),
                  ),
                ),
              ],
            ),
            Row(
              spacing: 100.0,
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                ColoredBox(
                  color: Color(0xffff0000),
                  child: SizedBox(
                    width: 50.0,
                    height: 75.0,
                    child: Center(
                      child: Text(
                        'RED',
                        style: TextStyle(color: Colors.white),
                      ),
                    ),
                  ),
                ),
                ColoredBox(
                  color: Color(0xff00ff00),
                  child: SizedBox(
                    width: 50.0,
                    height: 75.0,
                    child: Center(
                      child: Text(
                        'GREEN',
                        style: TextStyle(color: Colors.black),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ],
        )


http://www.kler.cn/a/289789.html

相关文章:

  • Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南
  • QQ 小程序已发布,但无法被搜索的解决方案
  • Vector 深度复制记录
  • UVC 输出视频格式修改和windows下数据分析
  • Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件
  • 类别变量分析——卡方独立性检验卡方拟合优度检验
  • Tiktok测评防关联秘籍:矩阵自养号策略全面解析
  • R语言 | 文件读取
  • 如何构建Java SpringBoot在线培训平台?集成Vue,实现课程管理,打造互动学习环境
  • 【nnUNet】环境安装
  • Ubuntu22.04服务器重启后没网络IP丢失
  • 24最新『ComfyUI』入门到入坟全套教程!!看到就是赚到!赶紧收藏!
  • 基于树莓派的儿童音频播发器—Yoto
  • [嵌入式] 设备没有联网的情况下如何安装库
  • Unity中保存数据的方法
  • 【3.8】贪心算法-解无重叠区间
  • vscode和edge浏览器等鼠标输入光标变透明
  • github中action作用和讲解
  • [物理专题]经典浮力题目的Fh图像绘制
  • Profinet 从站转 EtherNet/IP 从站网关
  • Django+Vue二手交易平台的设计与实现
  • 使用Redis如何实现集群会话同步?
  • 【RabbitMQ】核心概念
  • 【Go - vendor, 本地, 独立依赖包】
  • 【杭州】目前就业情况-自述
  • JDBC |封装JDBCUtils|PreparedStatement|事务|批处理|数据库连接池| Blob类型数据的读写|Apache—DBUtils简介