flutter中全局与单页面背景图片(动态图片)
单页面设置背景图片
使用 Container 组件和 decoration 属性:
优点:简单易用,适用于大多数情况下的页面背景设置。
缺点:无法控制背景图片的位置和层级。
class MyBook extends StatelessWidget {
const MyBook({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: MediaQuery.of(context).size.width, // 指定图片的宽度
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
image: DecorationImage(
// image: AssetImage('images/backbode/back1.png'), //静态
image: AssetImage('images/backbode/gif/game_back3.webp'), //动态
fit: BoxFit.cover,
),
),
child: const Text("我的书籍"),
);
}
}
使用 Stack 组件将背景图片放在页面最底层:
优点:可以将背景图片置于页面最底层,不会被其他组件遮挡。
缺点:需要使用 Positioned.fill 或自定义位置来调整背景图片的尺寸和位置。
class MyBook extends StatelessWidget {
const MyBook({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
Positioned.fill(
child: Image.asset(
'images/backbode/gif/game_back3.webp',
fit: BoxFit.cover,
),
),
const Align(//必须加背景才全屏
// alignment: Alignment.center,
child: Text("我的书籍")),
],
),
);
}
}
自定义页面的 Scaffold 组件的 body 属性,并设置 Container 组件作为背景:
优点:直接在页面的 Scaffold 中设置背景图片,方便管理页面布局。
缺点:在较复杂的页面布局中可能需要调整 Stack 的层级。
class MyBook extends StatelessWidget {
const MyBook({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: double.infinity,
height: double.infinity,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('images/backbode/gif/game_back3.webp'),
fit: BoxFit.cover,
),
),
child: const Text("我的书籍"),
),
);
}
}
全局设置背景图片
使用Flutter中的Stack小部件实现了全局背景图片的效果:
优点:灵活性高:通过使用Stack小部件,您可以将背景图片放置在整个屏幕下面,并在其上方叠加其他小部件。这样,您可以更自由地控制页面的布局和结构。可扩展性强:由于背景图片是作为Stack的一部分添加的,所以您可以随时添加更多的小部件到Stack中,来增强页面的功能和交互。
缺点:性能影响:由于背景图片会覆盖整个屏幕,所以对于较大分辨率的屏幕或包含大量小部件的页面,图片加载和布局可能会影响性能。在这种情况下,建议对图片进行优化,避免使用过大的图片以及尽可能减少布局计算等操作。需要额外的布局层级:由于需要使用Stack来放置背景图片和其他小部件,这意味着页面会增加一个额外的布局层级。对于简单页面来说,这可能不是一个问题,但对于复杂的页面结构,可能需要更多的布局层级来实现所需的效果。
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
// 禁用状态栏和导航栏
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
// 强制横屏
SystemChrome.setPreferredOrientations(
[DeviceOrientation.landscapeLeft, DeviceOrientation.landscapeRight]);
return MaterialApp(
debugShowCheckedModeBanner: false, //去除debug图标
home: Scaffold(
body: Stack(
children: [
Container(
decoration: const BoxDecoration(
image: DecorationImage(
// image: AssetImage('images/backbode/back1.png'), // 全局设置背景图片
image: AssetImage(
'images/backbode/gif/game_back3.webp'), // 全局设置动态背景图片
fit: BoxFit.cover,
),
),
),
// 在这里添加其他小部件
MyHome()
],
),
));
}
}
return MaterialApp(
debugShowCheckedModeBanner: false, //去除debug图标
onGenerateRoute: onGenerateRoute,
home: Scaffold(
body: Stack(
children: [
Positioned.fill(
child: Image.asset(
'images/backbode/gif/game_back3.webp',
fit: BoxFit.cover,
),
),
MyHome() // 在这里添加其他小部件
],
),
)
);
使用 MaterialApp 组件的 builder 属性和 Navigator 的 Observer 在路由跳转时统一设置背景图片:
优点:可以实现在路由跳转时统一设置背景图片,适用于需要动态更改背景图片的场景。
缺点:需要实现自定义的路由管理器,相对复杂。
BoxFit的不同值以及它们的用法说明
BoxFit.contain: 图像将等比例缩放以适应容器的尺寸,同时保持图像的完整性。这意味着图像可能会在容器内留有空白区域,图像的某些部分可能不会完全显示。BoxFit.cover: 图像将等比例缩放以填充整个容器的尺寸,然后将超出部分裁剪掉。这意味着图像可能会在容器中进行裁剪,以适应容器的尺寸。BoxFit.fill: 图像将拉伸和变形以填充整个容器的尺寸。这意味着图像可能会拉伸或压缩,以适应容器的尺寸,导致图像可能失真。BoxFit.fitHeight: 图像将等比例缩放以在垂直方向上填充整个容器的高度,然后根据原始图像的宽高比来调整宽度。这意味着图像可能会在容器中进行裁剪,以适应容器的尺寸。BoxFit.fitWidth: 图像将等比例缩放以在水平方向上填充整个容器的宽度,然后根据原始图像的宽高比来调整高度。这意味着图像可能会在容器中进行裁剪,以适应容器的尺寸。BoxFit.none: 图像将不进行缩放,而是根据容器的尺寸进行定位显示。如果图像的尺寸大于容器的尺寸,图像可能会被裁剪掉。BoxFit.scaleDown: 图像将等比例缩放以适应容器的尺寸,但只有在图像的大小大于容器的尺寸时才会缩放。如果图像的大小小于或等于容器的大小,图像将被原样显示。
flutter中全局与单页面背景图片(动态图片)的更多相关文章
- Vue项目中设置每个单页面的标题
两种实现方法,第一种方法引入插件,第二种为编程方式实现(推荐) 首先在路由文件index.js中给每个单页面路由添加title routes: [{ path: '/', name: ...
- Flutter 中的表单
一.Flutter 常用表单介绍 Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch CheckboxLi ...
- flutter中的表单使用
Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch.CheckboxListTile.RadioListTile ...
- 详解H5中的history单页面,手动实现单页面开发,细说h5单页面原理
就目前来看,前端的单页面开发占了很大一部分,一方面无刷新的切换增强了体验,并且浏览器记录依然存在,前进后退都没问题,在之前我们通地址栏中的hash改变来触发onhashchange方法来实现单页面应用 ...
- 25.Flutter中的表单 Radio RadioListTile Switch SwitchListTile 以及表单组件实现一个简单的学员登记系统(下)
四.Radio.RadioListTile单选按钮组件 Radio常用属性: value单选的值. onChanged改变时触发. activeColor:选中的颜色.背景颜色 groupValue: ...
- Vue修改单页面背景颜色
- javaweb页面上展示动态图片
HTML <img alt="点击设定" name="CONSTRUCTIONPLANHIS_IMAGE_curr_img_0" src="vi ...
- EXTJS4.0 显示图片 动态图片
在网上找了好久没有好的解决方法 都是用 'box' 什么的组件 改写的 autoEl 好麻烦,修改 好的属性都不能用.弄了好久没弄成 最后: 用panel 显示 html 文本 追加 ‘'<i ...
- vue单页面引入CDN链接
不想在index.html文件中全局引入CDN资源,那么如何在Vue单文件组件中引入?下面来瞅瞅~ 虚拟DOM创建 Vue 通过创建一个虚拟 DOM 来追踪自己要改变的真实 DOM 什么是虚拟DOM? ...
- [后端人员耍前端系列]KnockoutJs篇:使用WebApi+Bootstrap+KnockoutJs打造单页面程序
一.前言 在前一个专题快速介绍了KnockoutJs相关知识点,也写了一些简单例子,希望通过这些例子大家可以快速入门KnockoutJs.为了让大家可以清楚地看到KnockoutJs在实际项目中的应用 ...
随机推荐
- How to Install Python on Linux
Summary Hostmonster uses the preinstalled version of Python that ships with CentOS. Because of this ...
- Rockchip rk3588 U-Boot详解 (三)
Rockchip rk3588 U-Boot详解 (三) 专栏总目录 1.1 Environment-Variables ENV(Environment-Variables)是U-Boot支持的一种全 ...
- 基于ZXing.NET实现的二维码生成和识别客户端
一.前言 ZXing.Net的一个可移植软件包,是一个开源的.多格式的1D/2D条形码图像处理库,最初是用Java实现的.已经过大量优化和改进,它已经被手动移植.它与.Net 2.0..Net 3.5 ...
- SP3377
题目简化和分析: 前言:这题目背景真奇怪. 我们可以将每种关系,看成一条边,如果出现奇数边环就不满足. 例如:\(a,b\) 异性 \(a,c\) 异性 \(b,c\)异性 这种情况是不满足的. 相当 ...
- Tinyalsa PCM API 实现深度剖析
高级 Linux 音频架构 (ALSA) 用于为 Linux 操作系统提供音频和 MIDI 功能.它可以高效地支持所有类型的音频接口,从消费者声卡到专业的多通道音频接口.它支持全模块化的音频驱动.它是 ...
- sql删除进程
使用一下语句杀掉进程 USE master go DECLARE @dbname VARCHAR(200) SET @dbname = 'xxxx' --要关闭进程的数据库名 DECLARE @sql ...
- openwrt ping: sendto: Network unreachable解决办法
root@OpenWrt:/# ping zhihu.com PING zhihu.com (103.41.167.234): 56 data bytes ping: sendto: Network ...
- JVM-JVM是如何执行方法调用的
重载.重写 void invoke(Object obj, Object... args) { ... } void invoke(String s, Object obj, Object... ar ...
- OpenGL 纹理详解
1. 纹理 在OpenGL中,纹理是一种常用的技术,用于将图像或图案映射到3D模型的表面上,以增加图形的细节和真实感 2. 纹理坐标 纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图 ...
- JS toFixed()方法精度丢失解决方法
JS toFixed()方法精度丢失 toFixed()方法可把Number四舍五入为指定小数位数的数字.但这个方法并不完全遵从四舍五入的规则,如 2.485.toFixed(2) //=>2. ...