【Flutter Widget】布局-用Stack+Positioned做书籍封面

2023-10-30 18:59

本文主要是介绍【Flutter Widget】布局-用Stack+Positioned做书籍封面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Stack是Flutter布局中的堆叠组件,用于将多个组件按顺序从底到上依次叠放,配合Positioned还可以实现将每个子组件放在不同位置。例如在图片上加水印、在用户头像上加图案等都可以用Stack实现[1]。
在学习完Stack布局后我就想找个例子来实战一下,看到手头的书,感觉封面还挺适合用Stack布局,就又找了一个相对简单的书的图片实现一下。下面是微信读书《爱欲之死》(向大家推荐此书)的封面。
在这里插入图片描述

我用Stack布局实现的效果如下:
在这里插入图片描述

布局代码

这本书封面布局简单,用一个浅一点儿的紫色做底色,然后用一块较深的紫色作为主色,内容上德语书名、中文书名、作译者和出版社都靠右竖向居中排列,布局上全部使用 Stack+Positioned。
话不多说,直接上代码:

import 'package:flutter/material.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);Widget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const MyHomePage(),);}
}class MyHomePage extends StatelessWidget {const MyHomePage({Key? key}) : super(key: key);Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('用Stack布局做书籍封面'),),body: Container(width: 450,height: 600,color: Colors.purple[300],child: Stack(children: [Positioned(top: 50,child: Container(width: 450,height: 400,color: Colors.purple,),),Positioned(right: 50,width: 200,height: 600,child: Stack(alignment: Alignment.topCenter,children: [const Positioned(top: 80,child: Text('Agonie des Eros',style: TextStyle(fontSize: 16, color: Colors.white),),),const Positioned(top: 110,child: Text('Bytung-Chul Han',style: TextStyle(fontSize: 12, color: Colors.white),),),Positioned(top: 280,child: Container(width: 200,height: 200,color: Colors.white,child: Stack(alignment: Alignment.topCenter,children: const [Positioned(top: 30,child: Text('爱欲\n之死',style: TextStyle(fontSize: 32, fontFamily: '宋体', fontWeight: FontWeight.bold),),),Positioned(bottom: 30,child: Text('[德]韩炳哲 著  宋娀 译',style: TextStyle(fontSize: 12, fontFamily: '黑体'),),),],),),),const Positioned(bottom: 30,child: Text('中信出版集团',style: TextStyle(color: Colors.white),),),],),),],),),);}
}

参考

[1]《Flutter 组件详解实战》[加] 王浩然(Bradley Wang) 编著

这篇关于【Flutter Widget】布局-用Stack+Positioned做书籍封面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309954

相关文章

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现