12、 Flutter Widgets 之 Stack,Positioned叠加组件

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

Stack/Positioned是用来做页面布局定位的组件,需要结合使用

 

Stack

children:一个数组,里面可放多个Widget
alignment:Alignment.topCenter//对齐方式,会对所有的子组件统一设置对齐,不灵活,一般不用

Positioned

child:一个子组件
left,top,right,bottom,width,heigh://设置这些值会改变子组件的大小,位置(相对于最外层组件)

Stack


Stack组件可以将子组件叠加显示,根据子组件的顺利依次向上叠加,用法如下:

Stack(children: <Widget>[Container(height: 200,width: 200,color: Colors.red,),Container(height: 170,width: 170,color: Colors.blue,),Container(height: 140,width: 140,color: Colors.yellow,),ElevatedButton(onPressed: (){}, child: Text('这个视图按钮好'))],)

 从效果可以看出视图一次从左上方开始堆叠,子视图最下方的视图展示再最外层。

Stack未定位的子组件大小由fit参数决定,默认值是StackFit.loose,表示子组件自己决定,StackFit.expand表示尽可能的大,用法如下:

Stack(fit: StackFit.expand,...
)

Stack未定位的子组件的默认左上角对齐,通过alignment参数控制,用法如下:

Stack(alignment: Alignment.center,...
)

 有没有注意到fitalignment参数控制的都是未定位的子组件,那什么样的组件叫做定位的子组件?使用Positioned包裹的子组件就是定位的子组件,用法如下:

Stack(fit: StackFit.loose,alignment: Alignment.center,children: <Widget>[Container(height: 200,width: 200,color: Colors.red,),Container(height: 170,width: 170,color: Colors.blue,),Container(height: 140,width: 140,color: Colors.yellow,),Positioned(bottom: 0,right: 0,child:  ElevatedButton(onPressed: (){}, child: Text('这个视图按钮好')))],)

 如果子组件超过Stack边界由clipBehavior控制,默认是裁剪,下面设置总是显示的用法:

Stack(clipBehavior: Clip.none,children: <Widget>[Container(height: 200,width: 200,color: Colors.red,),Positioned(left: 100,top: 100,height: 150,width: 150,child: Container(color: Colors.green,),)],)

 IndexedStack


IndexedStack是Stack的子类,Stack是将所有的子组件叠加显示,而IndexedStack只显示指定的子组件,用法如下:

Column(children: [_buildView3(),Row(children: [ElevatedButton(onPressed: (){setState(() {_index=0;});}, child: Icon(Icons.fastfood)),ElevatedButton(onPressed: (){setState(() {_index=1;});}, child: Icon(Icons.cake)),ElevatedButton(onPressed: (){setState(() {_index=2;});}, child: Icon(Icons.local_cafe))],)],)_buildView3(){return IndexedStack(index: _index,children: [Center(child: Container(height: 300,width: 300,color: Colors.yellow,child: Icon(Icons.fastfood,color: Colors.blue,),),),Center(child: Container(height: 300,width: 300,color: Colors.red,child: Icon(Icons.cake,color: Colors.blue,),),),Center(child: Container(height: 300,width: 300,color: Colors.blueGrey,child: Icon(Icons.local_cafe,color: Colors.blue,),),),],);}

效果(点击切换_inex,只显示第index层视图):

 Positioned


Positioned用于定位Stack子组件,Positioned必须是Stack的子组件,基本用法如下: 

Container(height: 300,width: 300,color: Colors.amberAccent,child: Stack(children: <Widget>[Positioned(left: 10,right: 10,top: 10,bottom: 10,child: Container(color: Colors.red),),],),)

 

 

相关说明:

  • 提供topbottomleftright四种定位属性,分别表示距离上下左右的距离。

  • 只能用于Stack组件中。

  • leftrightwidth3个参数只能设置其中2个,因为设置了其中2个,第三个已经确定了,同理topbottomheight也只能设置其中2个。

Positioned提供便捷的构建方式,比如Positioned.fromRectPositioned.fill等,这些便捷的构建方式万变不离其宗,只不过换了一种方式设置topbottomleftright四种定位属性。


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

相关文章

Flutter层叠布局 Stack、Positioned

Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。Stack允许子组件堆叠&#xff0c;而Positioned用于根据Stack的四个角来确定子组件的位置。 Stack alignment&#xff1a; 此参数决定如何去对齐没有定位&#xff08;没有使用Positioned&#xff09;或部分定位…

Flutter之层叠布局Stack、Positioned

Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。Stack允许子组件堆叠&#xff0c;而Positioned用于根据Stack的四个角来确定子组件的位置。 一.属性列表 Stack Stack({this.alignment AlignmentDirectional.topStart, this.textDirection,this.fit StackFi…

Flutter组件--重叠布局/相对布局(Stack,Positioned组件)

1.Flutter Stack组件 Stack表示堆的意思&#xff0c;我们可以用Stack或者Stack结合Align或者Stack结合 Positiond来实现页面的定位布局 属性 说明 alignment 配置所有子元素的显示位置 children 子组件 只使用Stack组件的情况下,所有的组件都是重叠在一起的,具体见下: …

Flutter——最详细(Positioned)使用教程

Positioned简介 创建一个小组件&#xff0c;用于控制 [Stack] 的子项的位置。 使用场景&#xff1a; 可以通过坐标的形式来摆放控件的位置&#xff0c;堆叠布局时可以使用&#xff1b; 属性作用width宽度height高度top顶bottom底left左right右 注意事项&#xff1a; 1.如果设置…

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

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

【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:…