Flutter 学习之旅 之 flutter 全屏背景图设置功能的简单实现

Flutter 学习之旅 之 flutter 全屏背景图设置功能的简单实现

目录

Flutter 学习之旅 之 flutter 全屏背景图设置功能的简单实现

一、简单介绍

二、Flutter 背景图全屏显示

三、简单案例实现

四、关键代码


一、简单介绍

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。

Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。Flutter 提供了一个丰富的预置小部件库,开发者可以根据自己的需求灵活地控制每个像素,从而创建自定义的、适应性强的设计,这些设计在任何屏幕上都能呈现出色的外观和感觉。

二、Flutter 背景图全屏显示

Flutter 背景图全屏显示是指在 Flutter 应用中,通过设置 Containerdecoration 属性,使用 DecorationImage 将一张图片作为背景,并通过 BoxFit.cover 使图片覆盖整个屏幕。同时,设置 ScaffoldbackgroundColor 为透明,确保背景图显示完整。

在Flutter中实现背景图全屏显示时,需要注意以下几点:

  1. 图片链接有效性:确保使用的图片链接是可访问的,否则图片无法加载。

  2. 图片填充方式:使用BoxFit.cover时,图片可能会被裁剪以适应屏幕,可能会影响图片的显示效果。

  3. 透明度设置ScaffoldbackgroundColor需设置为透明,否则背景图会被遮挡。

  4. 系统UI设置:如果需要全屏显示,需使用SystemChrome隐藏状态栏和导航栏。

  5. 性能优化:加载大图片可能影响性能,建议使用合适的图片尺寸和格式。

  6. 适配不同设备:不同设备屏幕比例不同,背景图显示效果可能有所差异,需测试适配。

三、简单案例实现

1、这里使用 Android Studio 进行创建 Flutter 项目

2、创建一个 application 的 Flutter 项目

3、创建的工程结构如下

4、编写代码,先简单 实现一个背景图添加

5、连接设备,运行效果如下

6、其中发现标题栏和底部没有,还是没有全屏显示,继续编写代码,标题和底部进行处理

7、连接设备,运行代码,效果如下

四、关键代码

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(MyApp());
  // 设置系统UI的样式,将状态栏颜色设置为透明
  SystemUiOverlayStyle systemUiOverlayStyle = SystemUiOverlayStyle(statusBarColor: Colors.transparent);
  SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
  // 设置全屏模式,隐藏状态栏和导航栏
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
}

/// 主应用程序类,继承自 [StatelessWidget],用于初始化应用。
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo', // 应用的标题
      theme: ThemeData(
        primarySwatch: Colors.blue, // 主题颜色,使用蓝色作为主色调
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'), // 应用的首页
    );
  }
}

/// 首页类,继承自 [StatefulWidget],用于创建有状态的首页。
class MyHomePage extends StatefulWidget {
  MyHomePage({super.key, required this.title}); // 构造函数,接收标题参数
  final String title; // 页面标题

  @override
  _MyHomePageState createState() => _MyHomePageState(); // 创建状态对象
}

/// 首页的状态类,继承自 [State],用于管理首页的状态。
class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        image: DecorationImage(
          image: NetworkImage(
              'https://pic.88tph.com/production/20180914/13103514-0.jpg'), // 图片链接
          fit: BoxFit.cover, // 图片填充方式,覆盖整个容器
        ),
      ),
      child: Scaffold(
        backgroundColor: Colors.transparent, // 把 Scaffold 的背景色改成透明
        appBar: AppBar(
          backgroundColor: Colors.transparent, // 把 AppBar 的背景色改成透明
          title: Text(widget.title, style: TextStyle(color: Colors.white)), // 使用传入的标题,设置文字颜色为白色
          elevation: 0, // 去掉 AppBar 的阴影
        ),
        body: Center(
          child: Text('Hello World'), // 页面中心显示文本
        ),
      ),
    );
  }
}

代码说明:

  • _MyHomePageState 是首页的状态类,继承自 State

  • 使用 Container 设置背景图,图片通过 NetworkImage 加载,并设置为覆盖整个容器。

  • 使用 Scaffold 创建页面结构,将背景色设置为透明,使背景图显示出来。

  • AppBar 也设置为透明,去掉阴影,并将标题文字颜色设置为白色。

  • 页面中心显示文本 "Hello World"。

在代码中,我将图片链接中的HTML标签移除,直接使用纯链接 https://pic.88tph.com/production/20180914/13103514-0.jpg。然而,由于网络原因,该链接可能无法正常加载图片。如果图片无法加载,可能是以下原因之一:

  • 链接无效:请检查图片链接是否正确,确保链接指向的图片是可访问的。

  • 网络问题:如果链接正确但图片仍无法加载,可能是网络连接问题。建议重试或检查网络设置。

### 如何在 Flutter设置背景图片 在 Flutter 中,可以通过 `Container` 或者 `DecoratedBox` 来设置背景图片。通常情况下,会使用 `DecorationImage` 配合 `BoxDecoration` 实现这一需求。下面提供一个完整的示例代码来展示如何在 Flutter设置背景图片。 #### 示例代码 以下是通过 `Container` 设置背景图片的一个简单例子: ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Background Image Example')), body: Center( child: MyBackgroundWidget(), ), ), ); } } class MyBackgroundWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('images/background_image.jpg'), // 背景图片路径 fit: BoxFit.cover, // 图片填充方式 ), ), child: Center( child: Text( "This is a background image example.", style: TextStyle(fontSize: 20, color: Colors.white), ), ), ); } } ``` 在这个示例中,我们使用了 `AssetImage` 加载本地图片作为背景[^1]。需要注意的是,图片路径 `'images/background_image.jpg'` 必须存在于项目目录下的 `assets/images/` 文件夹中,并且需要在 `pubspec.yaml` 文件中声明该资源文件的位置。 #### 关键点解析 - **图片加载**:上述代码中的 `image: AssetImage('images/background_image.jpg')` 表明了如何加载本地图片资源。这与引用中提到的 `Image.asset` 类似,都需要确保图片已正确定义并放置于指定位置。 - **图片适配模式**:`fit: BoxFit.cover` 定义了图片如何适应容器尺寸。常见的选项有 `cover`, `contain`, 和 `fill` 等。 - **样式调整**:为了使文字更清晰可见,可以在文本样式中定义颜色为白色或其他对比明显的颜色。 #### 注意事项 如果希望动态加载网络图片,则可以替换 `AssetImage` 为 `NetworkImage`,如下所示: ```dart decoration: BoxDecoration( image: DecorationImage( image: NetworkImage('https://example.com/image.jpg'), fit: BoxFit.cover, ), ), ``` 这种做法适用于从远程服务器获取图片的情况。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值