单页面设置背景图片

使用 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中全局与单页面背景图片(动态图片)的更多相关文章

  1. Vue项目中设置每个单页面的标题

    两种实现方法,第一种方法引入插件,第二种为编程方式实现(推荐) 首先在路由文件index.js中给每个单页面路由添加title routes: [{     path: '/',     name: ...

  2. Flutter 中的表单

    一.Flutter 常用表单介绍   Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch  CheckboxLi ...

  3. flutter中的表单使用

    Flutter 中常见的表单有 TextField 单行文本框,TextField 多行文本框.CheckBox.Radio.Switch.CheckboxListTile.RadioListTile ...

  4. 详解H5中的history单页面,手动实现单页面开发,细说h5单页面原理

    就目前来看,前端的单页面开发占了很大一部分,一方面无刷新的切换增强了体验,并且浏览器记录依然存在,前进后退都没问题,在之前我们通地址栏中的hash改变来触发onhashchange方法来实现单页面应用 ...

  5. 25.Flutter中的表单 Radio RadioListTile Switch SwitchListTile 以及表单组件实现一个简单的学员登记系统(下)

    四.Radio.RadioListTile单选按钮组件 Radio常用属性: value单选的值. onChanged改变时触发. activeColor:选中的颜色.背景颜色 groupValue: ...

  6. Vue修改单页面背景颜色

  7. javaweb页面上展示动态图片

    HTML <img alt="点击设定" name="CONSTRUCTIONPLANHIS_IMAGE_curr_img_0" src="vi ...

  8. EXTJS4.0 显示图片 动态图片

    在网上找了好久没有好的解决方法 都是用 'box' 什么的组件 改写的 autoEl 好麻烦,修改 好的属性都不能用.弄了好久没弄成 最后: 用panel  显示 html 文本 追加 ‘'<i ...

  9. vue单页面引入CDN链接

    不想在index.html文件中全局引入CDN资源,那么如何在Vue单文件组件中引入?下面来瞅瞅~ 虚拟DOM创建 Vue 通过创建一个虚拟 DOM 来追踪自己要改变的真实 DOM 什么是虚拟DOM? ...

  10. [后端人员耍前端系列]KnockoutJs篇:使用WebApi+Bootstrap+KnockoutJs打造单页面程序

    一.前言 在前一个专题快速介绍了KnockoutJs相关知识点,也写了一些简单例子,希望通过这些例子大家可以快速入门KnockoutJs.为了让大家可以清楚地看到KnockoutJs在实际项目中的应用 ...

随机推荐

  1. Python基础——二分法、面向过程编程思想、有名函数、lambda、max、_min的应用、sorted排序、map的应用、filter的应用、reduce的应用

    文章目录 内容回顾 二分法 伪代码模板 面向过程编程思想 函数式 def用于定义有名函数 lambda用于定义匿名函数 调用匿名函数 匿名函数作用 匿名函数的示范 max的应用 min的应用 sort ...

  2. 研发三维GIS系统笔记/实现wgs84投影-001

    1. 工作内容,改造引擎,支持wgs84投影 改造原因:目前投影是墨卡托投影(与Google Map一致) 目前的GIS系统是二维的采用这个坐标系是没有问题的 但不支持wgs84瓦片数据以及高程数据, ...

  3. Thinking in Java 4th Edition Source Code

    Thinking in Java 4th Edition Source Code Instructions for downloading, installing and testing the so ...

  4. Istio 入门(六):版本控制

    目录 VirtualService 和 DestinationRule VirtualService 与 Service 的关系 VirtualService 和 DestinationRule 的关 ...

  5. es6(1)

    1.var let const var---变量,重复定义不报错,没有块级作用域,不能限制修改 if(12>5){ var a=12; } alert(a); //弹出12 let---变量,重 ...

  6. Unity - UIWidgets 4. 添加图标显示

    Material Icon字体下载(github) 前面的返回按钮, 以及自己试验的一些Icon都不显示, 然后回去翻UIWidgets的README public class UIWidgetsEx ...

  7. docker 安装、升级、修改数据目录

    1.查看系统要求 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本. uname -a 2.删除旧版本 yum remove docker docker-c ...

  8. PoW、PoS、DPoS和PBFT简介

    1. 概览 PoW(工作量证明).PoS(权益证明).DPoS(委托权益证明)和PBFT(拜占庭容错)是区块链和分布式系统领域中常见的共识算法.下面将详细介绍这些共识算法的原理和特点: PoW(工作量 ...

  9. Velocity之Hello World(入门实例)

    参考:http://blog.csdn.net/mengxuwq/article/details/1871161 (非常感谢这篇文章,让我初步入门) 自己调试完全能运行后,写在此,供新人参考,供自己温 ...

  10. CSP2023游击

    Day-1 上车了,玩了一路. 到酒店里,玩了一晚上. Day 1 爆O! Day 2 走了,玩了一路. AF0了, 哎不是,谁给我反对了 考完了,心情不是很好 分数就不说出来了吧,太低了怕你们笑话我 ...