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在实际项目中的应用 ...
随机推荐
- LGPL协议原文及中文翻译
LGPL协议原文及中文翻译 参考链接 原文: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 ...
- 关于CAS等原子操作,说点别人没说的
Java中提供了原子操作,可以简单看一下AtomicInteger类中的一个典型的原子操作incrementAndGet(),表示对原子整数变量进行加操作,并返回新的值.实现如下: public cl ...
- Docker磁盘&内存&CPU资源实战
Docker 资源实战:cpu/内存配置: #查看帮助 docker run --help docker update --help #配置容器使用cpu /内存大小--privileged 给与容器 ...
- macbook通过虚拟机连接远程linux
之前操作远程虚拟机,都是用window系统,现第一次用linux命令操作一下linux系统. 苹果启动term 输入ssh root@192.168.3.154连接linux,ssh 用户名@服务器i ...
- Chromium VIZ工作流
在 Chromium 中 viz 的核心逻辑运行在 GPU 进程中,负责接收其他进程产生的 viz::CompositorFrame(简称 CF),然后把这些 CF 进行合成,并将合成的结果最终渲染在 ...
- 小景的Dba之路--压力测试和Oracle数据库缓存
小景最近在做系统查询接口的压测相关的工作,其中涉及到了查询接口的数据库缓存相关的内容,在这里做一个汇总和思维发散,顺便简单说下自己的心得: 针对系统的查询接口,首次压测执行的时候TPS较低,平均响应时 ...
- 文心一言 VS 讯飞星火 VS chatgpt (134)-- 算法导论11.2 6题
六.用go语言,假设将n 个关键字存储到一个大小为 m 且通过链接法解决冲突的散列表中,同时已知每条链的长度,包括其中最长链的长度 L,请描述从散列表的所有关键字中均匀随机地选择某一元素并在 O(L· ...
- Mysql数据库查询之模糊查询
一.什么是模糊查询模糊查询是根据一定的模式匹配规则,查找与指定条件相似或相符的数据.二.模糊查询实操通配符查询1.% 表示任意0个或多个字符形式一: select 查询字段 from 表名 where ...
- Excel 使用 VLOOKUP 函数匹配特定列
前言 工作有一项内容,是根据新的表格的某一列的内容一对一匹配,生成一列新的表格.这就用到了 Excel 的 VLOOKUP 函数. 函数使用 函数体: =VLOOKUP(lookup_value,ta ...
- ABAP 自定义附件
SWO1 关键字 *------------------------------------------------------------* REPORT ZTEST_CSW1. *TABLES ...