MainAxisAlignment 是一个枚举类,用于控制主轴(Main Axis) 方向上子组件的排列和对齐方式。

MainAxisAlignment 的常用取值及效果:

  1. MainAxisAlignment.start
    子组件沿主轴的起点对齐(Row 左对齐,Column 顶部对齐)

  2. MainAxisAlignment.end
    子组件沿主轴的终点对齐(Row 右对齐,Column 底部对齐)

  3. MainAxisAlignment.center
    子组件在主轴方向上居中对齐

  4. MainAxisAlignment.spaceBetween
    子组件之间均匀分配剩余空间,首尾组件贴近边缘(无额外间距)

  5. MainAxisAlignment.spaceAround
    子组件两侧分配相等空间,首尾组件到边缘的距离是组件间距的一半

  6. MainAxisAlignment.spaceEvenly
    子组件之间及与边缘的距离完全相等

Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, // 水平方向均匀分布children: [Container(width: 50, height: 50, color: Colors.red),Container(width: 50, height: 50, color: Colors.green),Container(width: 50, height: 50, color: Colors.blue),],
)
属性功能描述取值示例
mainAxisSize决定容器在主轴方向上的空间大小:
max:尽可能占满父容器的空间
min:仅包裹子组件,不额外占空间
MainAxisSize.max(默认)、MainAxisSize.min
mainAxisAlignment决定子组件在容器的主轴空间内如何排列(如对齐方式、间距分配)startcenterspaceBetween 等
情况 1:mainAxisSize: max(容器占满空间)
Row(mainAxisSize: MainAxisSize.max, // 容器宽度=屏幕宽度mainAxisAlignment: MainAxisAlignment.spaceBetween, // 子组件分散在整个宽度上children: [Container(width: 50, height: 50, color: Colors.red),Container(width: 50, height: 50, color: Colors.green),],
)

效果:两个色块分别靠向屏幕左右边缘,中间有大量空隙(利用了容器的全部宽度)。

情况 2:mainAxisSize: min(容器仅包裹子组件)
Row(mainAxisSize: MainAxisSize.min, // 容器宽度=两个色块宽度之和(100)mainAxisAlignment: MainAxisAlignment.spaceBetween, // 无效果(没有额外空间)children: [Container(width: 50, height: 50, color: Colors.red),Container(width: 50, height: 50, color: Colors.green),],
)

效果:两个色块紧挨着(总宽度 100),spaceBetween 无法产生间距(因为容器没有多余空间)。

CrossAxisAlignment

Warp

在 Flutter 中,Wrap 是一个布局组件,用于在子组件超出父容器边界时自动换行(或换列),类似于文本换行的效果。它解决了 Row/Column 中子组件超出界溢出的问题,是处理动态数量子组件布局的常用选择。

常用属性:

  1. direction:指定主轴方向(默认水平)

    • Axis.horizontal:水平方向排列,空间不足时换行(默认)
    • Axis.vertical:垂直方向排列,空间不足时换列
  2. spacing:主轴方向上子组件之间的间距

  3. runSpacing:行与行(或列与列)之间的间距

  4. alignment:主轴方向上的对齐方式(类似 mainAxisAlignment

  5. crossAxisAlignment:交叉轴方向上的对齐方式(类似 CrossAxisAlignment

示例代码:

下面是一个水平方向的 Wrap 示例,包含多个按钮,当屏幕宽度不足时会自动换行:

Wrap(direction: Axis.horizontal, // 水平方向排列(默认)spacing: 8.0, // 按钮之间的水平间距runSpacing: 8.0, // 行之间的垂直间距alignment: WrapAlignment.start, // 每行左对齐children: [ElevatedButton(onPressed: () {}, child: Text("按钮1")),ElevatedButton(onPressed: () {}, child: Text("按钮2")),ElevatedButton(onPressed: () {}, child: Text("按钮3")),ElevatedButton(onPressed: () {}, child: Text("按钮4")),ElevatedButton(onPressed: () {}, child: Text("按钮5")),ElevatedButton(onPressed: () {}, child: Text("按钮6")),],
)

1. Stack(堆叠容器)

Stack 是一个容器组件,用于将子组件按顺序堆叠在一起,后面的子组件会覆盖在前面的子组件之上(类似 CSS 中的 position: absolute 堆叠效果)。

核心特点:
  • 子组件默认左上角对齐(可以通过 alignment 属性修改默认对齐方式)。
  • 本身不限制大小,默认会根据子组件中最大的尺寸来调整自身大小(也可通过 fit 属性控制)。

2. Positioned(定位组件)

Positioned 只能作为 Stack 的直接子组件,用于精确控制子组件在 Stack 中的位置,通过设置与 Stack 边缘的距离来定位。

常用属性(用于定位):
  • left:距离 Stack 左边缘的距离
  • right:距离 Stack 右边缘的距离
  • top:距离 Stack 上边缘的距离
  • bottom:距离 Stack 下边缘的距离
  • width/height:固定子组件的宽高(可选,不设置则由子组件自身大小决定)

示例:图片上叠加文字和图标

下面的代码实现了 “背景图 + 顶部标题 + 右下角图标” 的层叠效果:

Stack(// 未使用 Positioned 的子组件会默认左上角对齐(可通过 alignment 修改)alignment: Alignment.center, // 未定位子组件的默认对齐方式(这里无效,因为所有子组件都用了 Positioned)children: [// 底层:背景图片(占满 Stack)Positioned.fill( // 快捷方式:让子组件填满整个 Stackchild: Image.network('https://picsum.photos/400/300',fit: BoxFit.cover, // 图片铺满容器alt: "示例背景图",),),// 中层:顶部标题(距离顶部 16 像素,水平居中)Positioned(top: 16,left: 0,right: 0, // left 和 right 都设为 0 可让组件水平占满,配合 textAlign 居中child: Text("风景照片",style: TextStyle(color: Colors.white, fontSize: 20, fontWeight: FontWeight.bold),textAlign: TextAlign.center,),),// 上层:右下角图标(距离右和下各 16 像素)Positioned(right: 16,bottom: 16,child: Icon(Icons.favorite, color: Colors.red, size: 30),),],
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915840.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915840.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915840.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究

1️⃣ 行业背景与技术需求🚈 轨道交通行业对视频监控的深度依赖在现代城市轨道交通系统中,视频监控已不仅仅是安防的一部分,更是贯穿于运营管理、车辆调度、应急指挥和安全保障的核心技术手段。列车车载监控 ——列车上普遍部署多路高清摄像头…

【Android Studio 2025 汉化教程】

废话不多说,直接上干货。 前提:JeBrains系列2025版已经集成中文插件,用户不需下载,只要设置下即可,但Android Studio并不内置也不提供汉化插件。需要工具: 1.IDEA(其他JeBrains系列也可以&#…

网络安全初级(前端页面的编写分析)

源代码index.html<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>登录页面</title><!--…

RAG项目实战:LangChain 0.3集成 Milvus 2.5向量数据库,构建大模型智能应用

项目背景 最近&#xff0c;有时间&#xff0c;想着动手实战一下&#xff0c;从0到1搭建一个 RAG 系统&#xff0c;也是想通过实战的方式来更进一步学习 RAG。因此&#xff0c;就定下了以项目实战为主&#xff0c;书籍为辅的执行方式。&#xff08;书籍是黄佳老师著的《RAG 实战…

docker build 和compose 学习笔记

目录 docker build 笔记 1. 路径解析 2. 关键注意事项 2. docker compose up -d 核心区别对比 常见工作流 补充说明 1. 功能区别 2. 协作关系 场景 1&#xff1a;Compose 自动调用 Build 场景 2&#xff1a;先 Build 后 Compose 3. 关键区别 4. 为什么需要协作&…

Java学习第六十六部分——分布式系统架构

目录 一、前言提要 二、核心目标 三、核心组件与技术 1. 服务拆分与通信 2. 服务注册与发现 3. 配置中心 4. 负载均衡 5. 熔断、降级与限流 6. API 网关 7. 分布式数据管理 8. 分布式追踪与监控 9. 容器化与编排 四、典型Java分布式技术栈组合 五、关键…

Pycharm的Terminal打开后默认是python环境

Pycharm的Terminal打开后默认是python环境解决方案Pycharm的Terminal打开后默认是python环境&#xff0c;无法执行pip等命令&#xff0c;也没办法退出 解决方案 点击Settings -> Tools -> Terminal 可以看到当前默认打开的是torch19py38环境中的python.exe&#xff08;…

LVS——nat模式

一、搭建nat模式下LVS的实验环境1.创建四台虚拟机client——客户端&#xff1a;192.168.134.111/24&#xff08;nat模式&#xff09;LVS——调度器【双网卡】&#xff1a;192.168.134.112/24&#xff08;nat模式&#xff09;、172.25.254.111/24&#xff08;仅主机模式&#xf…

ElasticSearch是什么

ElasticSearch是什么 ElasticSearch 是一个基于 Apache Lucene 的开源分布式搜索引擎&#xff0c;用于全文搜索、日志分析、实时数据分析等场景。它以高性能、分布式架构和易用性著称&#xff0c;支持 JSON 格式的数据存储和查询&#xff0c;广泛应用于日志监控、搜索服务、企业…

linxu CentOS 配置nginx

1、准备要发布的文件夹sudo mkdir -p /var/www/myfiles # 创建文件夹&#xff08;如果不存在&#xff09; sudo chmod -R 755 /var/www/myfiles # 设置权限&#xff08;确保 Nginx 可以读取&#xff09; sudo chown -R nginx:nginx /var/www/myfiles # 修改所有者&#xff0…

内网穿透利器:基于HTTPHTTPS隧道的代理工具深度解析

内网穿透利器&#xff1a;基于HTTP/HTTPS隧道的代理工具深度解析 一、引言 在渗透测试和内网渗透中&#xff0c;HTTP/HTTPS隧道技术是突破网络边界的关键手段。它通过将TCP流量封装在HTTP协议中&#xff0c;穿透防火墙/NACL策略&#xff0c;实现内网横向移动。本文以reGeorg为…

容器编排K8S

k8s概述 容器部署优势:部署方便,不依赖底层环境,升级镜像 本质是一个容器编排工具,golang语言开发 master master管理节点:kube-api-server请求接口,kube-scheduler调度器,kube-controller-manager控制器/管理器,etcd分布式存储数据库 work node服务节点:kubelet代理保…

C语言:深入理解指针(1)

1. 内存和地址在了解指针前&#xff0c;我们需要知道内存和地址是什么。1.1 内存首先来看内存。举个例子&#xff1a;当你在酒店找房间时&#xff0c;你并不是一层一层一间一间找&#xff0c;而是通过酒店为每间房子设置的门牌号直接找到你的房间&#xff0c;这样的效率就会快很…

完整的 SquareStudio 注册登录功能实现方案:已经烧录到开发板正常使用

根据你的需求&#xff0c;我将提供完整的实现方案&#xff0c;解决按钮同时执行多个动作的问题&#xff0c;并确保注册登录功能正常工作。所需文件结构需要创建和修改的文件如下&#xff1a;ui_events.h - 事件处理函数声明events.c - 实际的事件处理逻辑ui.c - UI 初始化和事件…

OkHttp 与 Chuck 结合使用:优雅的 Android 网络请求调试方案

前言在 Android 应用开发过程中&#xff0c;网络请求调试是日常工作中不可或缺的一部分。Chuck 是一个轻量级的 OkHttp 拦截器&#xff0c;能够在应用内直接显示网络请求和响应的详细信息&#xff0c;无需连接电脑或使用额外工具。本文将详细介绍如何将 OkHttp 与 Chuck 结合使…

AI学习--本地部署ollama

AI小白&#xff0c;记录下本地部署ollama1.下载安装ollama下载地址ollama官方地址https://ollama.com/download根据系统下载即可下面是我下载的地址 https://release-assets.githubusercontent.com/github-production-release-asset/658928958/e8384a9d-8b1e-4742-9400-7a0ce2a…

docker 设置镜像仓库代理

1. 创建 Docker 服务的代理配置文件sudo mkdir -p /etc/systemd/system/docker.service.d2.创建文件 /etc/systemd/system/docker.service.d/http-proxy.conf&#xff0c;内容如下&#xff1a;[Service] Environment"HTTP_PROXYhttp://192.168.0.111:7890" Environme…

ffmpeg rtsp 丢包处理

直接用 demux 在有些网络中&#xff0c;丢包画屏&#xff1b; 再ffmpeg和ffplay中&#xff0c;可以指定 tcp 方式&#xff0c;所以代码直接设置陶瓷坯方式&#xff1b; // 设置RTSP选项优化接收数据流防止数据包丢失 av_dict_set(&options, "rtsp_transport", …

aosp15实现SurfaceFlinger的dump输出带上Layer详细信息踩坑笔记

背景&#xff1a; 针对上一篇文章 aosp15上SurfaceFlinger的dump部分新特性-无Layer信息输出如何解决&#xff1f; 给大家布置了一个小作业&#xff0c;那就是需要实现dumpsys SurfaceFlinger相关输出中可以携带上所有的Layer的详细信息需求&#xff0c;今天来带大家详细实现一…

Linux 网络调优指南:废弃的 tcp_tw_recycle 与安全替代方案

一、问题起源:消失的内核参数 当你在 Debian 10 系统执行 sysctl 命令时,若看到报错: sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: 没有那个文件或目录 这并非配置错误,而是Linux 内核演进的结果。自 4.12 版本起,内核正式移除了 tcp_tw_recycle 参数——…