【Flutter组件】层叠布局 Stack、Positioned

article/2025/9/28 19:49:20

层叠布局(Stack)和 Web 中的绝对定位、Android 中的 FrameLayout 布局是相似的,子组件可以根据距父容器四个角的位置来确定自身的位置。层叠布局允许子组件按照代码中声明的顺序堆叠起来。Flutter中使用StackPositioned这两个组件来配合实现绝对定位。Stack允许子组件堆叠,而Positioned用于根据Stack的四个角来确定子组件的位置。

Stack

Stack({this.alignment = AlignmentDirectional.topStart,this.textDirection,this.fit = StackFit.loose,this.clipBehavior = Clip.hardEdge,List<Widget> children = const <Widget>[],
})
  • alignment:此参数决定如何去对齐没有定位(没有使用Positioned)或部分定位的子组件。所谓部分定位,在这里特指没有在某一个轴上定位:leftright为横轴,topbottom为纵轴,只要包含某个轴上的一个定位属性就算在该轴上有定位。
  • textDirection:和RowWraptextDirection功能一样,都用于确定alignment对齐的参考系,即:textDirection的值为TextDirection.ltr,则alignmentstart代表左,end代表右,即从左往右的顺序;textDirection的值为TextDirection.rtl,则alignmentstart代表右,end代表左,即从右往左的顺序。
  • fit:此参数用于确定没有定位的子组件如何去适应Stack的大小。StackFit.loose表示使用子组件的大小,StackFit.expand表示扩伸到Stack的大小。
  • clipBehavior:此属性决定对超出Stack显示空间的部分如何剪裁,Clip枚举类中定义了剪裁的方式,Clip.hardEdge 表示直接剪裁,不应用抗锯齿,更多信息可以查看源码注释。

Positioned

const Positioned({Key? key,this.left, this.top,this.right,this.bottom,this.width,this.height,required Widget child,
})

lefttoprightbottom分别代表离Stack左、上、右、底四边的距离。widthheight用于指定需要定位元素的宽度和高度。注意,Positionedwidthheight 和其它地方的意义稍微有点区别,此处用于配合lefttoprightbottom来定位组件,举个例子,在水平方向时,你只能指定leftrightwidth三个属性中的两个,如指定leftwidth后,right会自动算出(left+width),如果同时指定三个属性则会报错,垂直方向同理。

示例

在下面的例子中,我们通过对几个Text组件的定位来演示StackPositioned的特性:

//通过ConstrainedBox来确保Stack占满屏幕
ConstrainedBox(constraints: BoxConstraints.expand(),child: Stack(alignment:Alignment.center , //指定未定位或部分定位widget的对齐方式children: <Widget>[Container(child: Text("Hello world",style: TextStyle(color: Colors.white)),color: Colors.red,),Positioned(left: 18.0,child: Text("I am Jack"),),Positioned(top: 18.0,child: Text("Your friend"),)        ],),
);

运行效果见图4-17:
在这里插入图片描述
由于第一个子文本组件Text("Hello world")没有指定定位,并且alignment值为Alignment.center,所以它会居中显示。第二个子文本组件Text("I am Jack")只指定了水平方向的定位(left),所以属于部分定位,即垂直方向上没有定位,那么它在垂直方向的对齐方式则会按照alignment指定的对齐方式对齐,即垂直方向居中。对于第三个子文本组件Text("Your friend"),和第二个Text原理一样,只不过是水平方向没有定位,则水平方向居中。
我们给上例中的Stack指定一个fit属性,然后将三个子文本组件的顺序调整一下:

Stack(alignment:Alignment.center ,fit: StackFit.expand, //未定位widget占满Stack整个空间children: <Widget>[Positioned(left: 18.0,child: Text("I am Jack"),),Container(child: Text("Hello world",style: TextStyle(color: Colors.white)),color: Colors.red,),Positioned(top: 18.0,child: Text("Your friend"),)],
),

显示效果如图4-18所示:
在这里插入图片描述
可以看到,由于第二个子文本组件没有定位,所以fit属性会对它起作用,就会占满Stack。由于Stack子元素是堆叠的,所以第一个子文本组件被第二个遮住了,而第三个在最上层,所以可以正常显示。


http://chatgpt.dhexx.cn/article/VFqyDTjg.shtml

相关文章

【Flutter】Flutter 布局组件 ( FractionallySizedBox 组件 | Stack 布局组件 | Positioned 组件 )

文章目录 一、FractionallySizedBox 组件二、Stack 布局组件三、Positioned 组件四、 完整代码示例五、 相关资源 一、FractionallySizedBox 组件 FractionallySizedBox 组件 : 可控制组件在水平/垂直方向上填充满父容器 ; class FractionallySizedBox extends SingleChildRen…

Flutter实战Stack与Positioned使用详解

目录 Stack Positioned 小案例 Stack Stack({Key key,this.alignment AlignmentDirectional.topStart,//未指定区域的排布方式this.textDirection,this.fit StackFit.loose,//没有定位的子组件如何去适应Stack的大小this.overflow Overflow.clip,this.clipBehavior Clip…

Flutter基础学习 13-19 Stack的Positioned属性

前边已经介绍了Stack组件&#xff0c;并且进行了两个组件的层叠布局&#xff0c;但是如果是超过两个组件的层叠该如何进行定位那?这就是我们加今天要学的主角Positioned组件了&#xff0c;这个组件也叫做层叠定位组件。 知识点&#xff1a; Positioned组件的属性&#xff1a…

《Flutter 控件大全》第六十八个:Positioned

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。Positioned用于定位Stack子组件,…

Flutter- Positioned

Positioned widget 用于定位 Stack 的子 widget。 Flutter Stack Positioned 仅用作 Stack 的直接(或后代)子部件。在 Positioned 到 Stack 的路径上&#xff0c;它只包含 StatelessWidget 或 StatefulWidget 小部件&#xff0c;不允许使用其他小部件(例如 RenderObjectWidge…

jclasslib插件使用

1、安装 File->setting->plugins->Brower Repositories 安装好后如下图 2、查看二进制码即指令

JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用

文章目录 前言一、JVM基础1、cross platform 跨平台2、cross language 跨语言3、什么是JVM呢&#xff1f;一张图告诉你4、java从编码到执行*****5. 从跨平台的语言到跨语言的平台6. jvm与class文件格式7. JVM8. javac的过程9. 常见的JVM实现10. JDK JRE JVM 二、Class File For…

如何在IDEA中使用 Jclasslib

在插件中安装jclasslib&#xff0c;然后重启IDEA 选中你的java文件&#xff0c;然后View->Show ByteCode With Jclasslib即可

android studio 字节码查看工具jclasslib bytecode viewer

jclasslib bytecode viewer 是一款非常好用的.class文件查看工具&#xff1b; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addit…

Jclasslib 试用

简述&#xff1a; jclasslib 是一个查看class文件的工具 TestJclasslib.java package com.anialy.test;public class TestJclasslib {private String str "Im TestJclasslib";private void print(){System.out.println(str);}public static void main(String[] arg…

jclasslib修改class文件

今天看到别人写的用工具jclasslib直接修改别人jar包里面的class文件,我自己也学着写了一下&#xff0c;发现果然很强大&#xff0c;但是也遇到一些坑 public class JVMTest {public static void main(String[] args) {long maxMemory Runtime.getRuntime().maxMemory(); //返…

通过jclasslib修改class文件

问题描述&#xff1a;在开发中遇到使用第三方jar时想要修改里边某个class文件的情况 解决方法&#xff1a; 通过jclasslib直接修改class文件 安装jclasslib 可以通过下载jclasslib软件来安装&#xff08;不推荐&#xff09; 在IEDA插件中搜索安装jclasslib Bytecode Viewer&a…

IDEA利用jclasslib 修改class文件

IDEA利用jclasslib 修改class文件 idea安装jclasslib-bytecode-viewer插件准备好class文件使用jclasslib使用下列代码更改内容。其他 idea安装jclasslib-bytecode-viewer插件 file–>settings–>plugis &#xff0c;搜索安装jclasslib-bytecode-viewer&#xff0c;重启i…

jclasslib

JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码。 https://github.com/ingokegel/jclasslib jclasslib bytecode viewer Purpose jclasslib bytecode viewer is a tool that visualizes all aspects of compiled Java cl…

利用jclasslib工具直接修改第三方jar包里面的class文件(亲测可用)

如果出于某些原因&#xff0c;需要修改第三方jar包里的class文件&#xff0c;我们能有什么办法呢&#xff1f; 直接修改肯定是运行不了的&#xff0c;这里我给大家介绍一个小工具jclasslib,因为我的电脑是64位的&#xff0c;所以这里就安装64位版 下载地址&#xff1a;https:…

jclasslib的使用

作用&#xff1a; JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码 jclasslib下载&#xff1a;https://bintray.com/ingokegel/generic/jclasslib/view 我们在这里使用jclasslib查看局部变量表&#xff08;保存java中方法…

【jvm系列-02】jvm的类加载子系统以及jclasslib的基本使用

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

如何利用JClassLib修改.class文件

最近在学习逆向分析和反编译&#xff0c;无意之中了解到了JClassLib。JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码。其他的用途我就不说了&#xff0c;先看一下效果。 第一步、准备下载工具&#xff0c;一个是jd-gui&am…

直接修改别人jar包里面的class文件 工具:jclasslib

出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天&#xff0c;没有找到合适的方法 开始我是先用jd-gui反编译 把我需要修改的那个A.class文件反编译出来把代码保…

Idea中jclasslib的安装与使用

我们学习JVM的时候常常需要查看字节码指令&#xff0c;而idea中就可以下载jclasslib插件&#xff0c;进行字节码指令的查看。下面我来带大家jclasslib的安装。 安装 安装之后重启即可 使用 使用的时候只需要点开view选中下图的选项即可&#xff0c;但是要注意是编译后再使用…