第八回:如何使用Stack Widget

news/2024/7/20 20:36:12 标签: flutter, android, ios, Stack, Positioned

文章目录

  • 概念介绍
  • 使用方法
  • 示例代码

我们在上一章回中介绍了GirdView Widget,本章回中将介绍 Stack这种Widget,闲话休提,让我们一起Talk Flutter吧。

概念介绍

在Flutter中Stack主要用来叠加显示其它的Widget,类似我们日常生活中的楼层或者说PS中的图层,因此它也是一种布局类widget.

使用方法

在Flutter中通过Stack类表示Stack Widget,它和其它的Widget一样使用类的属性(或者叫成员变量)来控制界面显示,我们只需要给构造方法中的命名参数赋值就可以。常用的属性如下:

  • children属性用来包含每一层的widget;
  • aliment属性用来控制某个没有定位的widget在Satck中的位置;

如果觉得aliment属性不方便,也可以Position Widget来控制位置,它和Container Widget属性类似,可以包含其它Widget,并且对被包含的Widget进行位置调整。

示例代码

    Widget stackEx = Stack(
      //这个偏移只对没有设置位置的widget起作用
      //(0,0)是中央位置
      // alignment: const Alignment(0.0,0.0),
      alignment: Alignment.center,
      children: [
        const CircleAvatar(
          backgroundColor: Colors.blueAccent,
          //找不到图片使用颜色填充
          backgroundImage: AssetImage("images/ax.png"),
          radius: 80,
          //不添加时有边框,添加后没有边框
          foregroundColor: Colors.black87,
        ),
       Container(
         decoration: const BoxDecoration(
           color: Colors.grey,
         ),

         child: const Text(
           'This text',
           style: TextStyle(
             fontSize: 26,
             fontWeight: FontWeight.bold,
             color: Colors.white,
           ),
         ),
       ),
       const Positioned(
          left: 5,
          top: 1,
          child: Icon(Icons.book)
        ),
      ],
    );

在上面的代码中,我们创建了Stack对象来表示叠加的Widget,通过它的children属性包含了三个Widget:圆形的容器(CircleAvatar),文本(Text)和图标(Icon)。

这三个Widget的代码顺序决定了它们的叠加顺序:

代码添加顺序越靠前的Widget,越位于叠加后的最底层。

这三个Widget只有文本没有位置限制,因此它受StackAliment的控制位于中间。把上面的代码添加到我们创建的MaterialApp中就可以运行,运行程序时会显示一个圆形,中间是文本,图标位于左上角(不明显)。下面是MaterialApp的代码:

//build方法省略不写
  return MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(primaryColor: Colors.blue),

        home: Scaffold(
            appBar: AppBar(
              title: const Text("Title of Hello App"),
            ),
            body: Column(
              children: [
                wechatBottom,
                imageEx,
                stackEx,
              ],
            )
        )
    );

注意:Stack只是用来控制Widget叠加的,因此它可以嵌套在Column Widget中。下面是程序的运行效果图:
在这里插入图片描述

看官们,关于Stack Widget的内容就介绍到这里,欢迎大家在评论区交流与讨论!


http://www.niftyadmin.cn/n/229084.html

相关文章

1 Go语言开发环境搭建详细教程【Go语言教程】

Go语言开发环境搭建【Win、Linux、Mac】 1 SDK下载 官网地址:golang.org,因为一些原因国内可能无法访问。可以使用下面第二个链接。国内地址访问:https://golang.google.cn/dl或者https://www.golangtc.com/download 根据自己操作系统版本,下…

数据结构刷题笔记 | 数组、字符串、链表、栈、队列、数、图

本篇为笔者学习数据结构时,在牛客网站的刷题笔记。 数据结构分为: 逻辑结构【面向问题的】 集合结构线性结构(一对一)树形结构(一对多的层次关系)图形结构(多对多) 物理结构&#x…

银行数字化转型导师坚鹏:银行数字化转型痛点、路径与对策

银行数字化转型痛点、路径与对策课程背景: 很多银行存在以下问题: 不知道银行数字化转型? 不清楚数字化转型对银行发展有什么影响? 不知道数字化转型对银行有什么机遇? 学员收获: 学习银行数字化转型的发展现状与成…

python os模块获取文件路径

1、# 获取当前工作目录的上一级目录 dir_path os.path.dirname(os.path.abspath(.)) 2、获取当前路径: # 获取当前脚本文件的绝对路径 script_path os.path.abspath(__file__)# 获取程序所在目录 dir_path os.path.dirname(script_path)3、获取当前路径的文件名…

可以顺畅使用不输Chatgpt的AI

一前言 虽然chatgpt不错,但是如果在咱们国家,想使用起来还是有一定的门槛的,又要科学上网,又要申请账号,申请账号还要申请虚拟手机号接收验证码,难道就没有适合普通人使用的AI了吗,直到我发现了…

Unity Game FrameWork—模块使用—对象池使用

使用对象池,需继承ObjectBase。首先创建一个OPGame的类,继承于ObjectBase,我们暂且把它叫做OP对象,如下图 OP对象有两个地方可以存储成员对象或变量,一个是在OP对象内部如模型ID:m_ModelID。另一个则是对…

从入门到精通:带你掌握Python Requests库的全部技能

目录 引言 安装 启动用户管理项目 requests响应 Session请求 为什么Session类可以保持会话 封装requests 引言 Python Requests库是Python语言中最为流行的HTTP客户端库之一。它提供了简单易用的API,让发送HTTP/1.1请求变得异常容易,支持常见的H…

【C++】关于多线程,你应该知道这些

​🌠 作者:阿亮joy. 🎆专栏:《吃透西嘎嘎》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉多线程相…