Flutter - flutter_gen 资源管理

请添加图片描述

引言:

在开发 Flutter 应用时,我们经常需要使用各种静态资源,如图片、字体和音频等。如何有效地管理和加载这些资源呢?本篇博客将以图片为例带你解密 Flutter 项目中是如何管理资源地。

assets 加载资源

具体文件名引入

  1. 在工程根目录下创建一个images目录,并将图片 avatar.png 拷贝到该目录。
    在这里插入图片描述
  2. 在pubspec.yaml中的flutter部分添加如下内容:
   assets:
    - images/avatar.png

注意: 由于 yaml 文件对缩进严格,所以必须严格按照每一层两个空格的方式进行
缩进,此处 assets 前面应有两个空格。
快捷方式: 在pubspec.yaml 中将assets的注释打开,编辑添加avatar.png 资源。
在这里插入图片描述

如果图片很多,每张图片都依次引入,会很繁琐,还会导致这个文件臃肿,怎么办呢?

目录批量引入

通过目录批量引入资源

   flutter:
     assets:
       - images/

在这里插入图片描述

使用

Image控件

Image(
  image: AssetImage("images/avatar.png"),
  width: 100.0
);

在这里插入图片描述
能够使用本地资源了,但我觉得这种使用方式有点古老,感觉不优雅。那么有没有更优雅的加载资源的方式呢?下面将介绍更优雅的资源管理插件 flutter_gen。

flutter_gen 管理资源

flutter_gen是一个Flutter插件,可以用于自动生成资源文件(如图片、字体等)的Dart类,从而避免在手动编写资源路径时出现错误。使用flutter_gen后,你可以通过代码提示直接访问资源,而不是用字符串指定路径,这样可以在编译期间就检测出资源路径的错误。

下面是如何在Flutter项目中启用和使用flutter_gen的步骤:

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加以下开发依赖:
查看pub.dev以获得最新版本

dev_dependencies:
  flutter_gen_runner: ^5.4.0 
  build_runner: ^2.4.9

在这里插入图片描述

2. 安装 flutter_gen

运行以下命令来安装flutter_gen:

flutter pub get

在这里插入图片描述

3. 检查 flutter_gen是否安装成功

在 pubspec.lock搜索flutter_gen_runner和build_runner,如果它们存在于该文件中,那么它们已经被安装在项目中。
在这里插入图片描述

4. 配置flutter_gen

你需要添加flutter_gen的配置块在pubspec.yaml中,这将指定生成代码的位置和哪些资源类型需要生成。例如:

flutter_gen:
  output: lib/gen/ # Optional (default: lib/gen/)
  line_length: 80 # Optional (default: 80)

  # Optional
  integrations:
    flutter_svg: true
    flare_flutter: true
    rive: true
    lottie: true
    

配置中的output指定了生成的Dart代码文件存放的目录。
在这里插入图片描述

5. 运行代码生成

每次你想生成代码时,都可以运行以下命令:

flutter pub run build_runner build

在这里插入图片描述
如果生成的代码有冲突或者如果你想覆盖之前生成的文件,可以使用–delete-conflicting-outputs标志:

flutter pub run build_runner build --delete-conflicting-outputs

生成的文件
在这里插入图片描述

6. 使用生成的代码

在Dart文件中导入自动生成的文件:

import 'gen/assets.gen.dart';

然后,你可以使用生成的资源常量,而无需手动输入资源的路径:

Image.asset(Assets.images.avatar.path,
            width: 100.0
            ),

总结

推荐使用flutter_gen 管理使用资源,这种方式避免了直接使用字符串路径,有助于减少拼写错误,并且资源的任何更改都将在编译时检测到。


感谢您的阅读和参与,HH思无邪愿与您一起在技术的道路上不断探索。如果您喜欢这篇文章,不妨留下您宝贵的赞!如果您对文章有任何疑问或建议,欢迎在评论区留言,我会第一时间处理,您的支持是我前行的动力,愿我们都能成为更好的自己!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/534442.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【1500字干货】6大实用技巧,轻松在1688找到优质货源厂家!

1688平台提供了海量的选品机会,并且汇聚了大量的优质源头厂家。对于想要寻找高质量、有竞争力的产品的商家来说,1688平台是一个非常好的选择。然而,在选择源头厂家时,商家也需要注意一些问题。好的货源很重要,可是如何…

Linux/Lame

Lame 今天随便乱逛发现这台机器貌似是 HackTheBox 平台的第一台机器,而且我还没做过,从简介上来看的话是一台很简单的机器,快快的玩一下 Enumeration nmap 首先用 nmap 扫描一下常见的端口,发现系统对外开放了 21,22,139,445 端…

《剑指 Offer》专项突破版 - 面试题 105 和 106 : 最大的岛屿和二分图(C++ 实现)

目录 面试题 105 : 最大的岛屿 面试题 106 : 二分图 面试题 105 : 最大的岛屿 题目: 海洋岛屿地图可以用由 0、1 组成的二维数组表示,水平或竖直方向相连的一组 1 表示一个岛屿,请计算最大的岛屿的面积(即岛屿中 1 的数目&…

如何使用Jellyfin+cpolar低成本部署私人影音平台并实现无公网IP远程访问

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及,各种各样的使用需求也被开发出来&…

事务的隔离性

参考: 小林coding MySQL服务器同时处理多个事务时,会出现脏读,不可重复读,幻读问题。 脏读 一个事务读到另一个未提交事务修改过的数据。 举例:事务A先读取数据,并对其进行修改,此时事务B进行读取获取到…

【python】实时获取当前屏幕图像

一、代码 import pyautogui import cv2 import numpy as np import time # 获取屏幕尺寸 screen_width, screen_height pyautogui.size() screen_size (1920, 1080) cv2.namedWindow("Screen Capture", cv2.WINDOW_NORMAL) # cv2.resizeWindow("Screen Captu…

大话设计模式——21.中介者模式(Mediator Pattern)

简介 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互 UML图 应用场景 大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的…

视频压缩软件有哪些?教你免费压缩视频的方法。

视频文件通常占据较大的存储空间,压缩视频可以有效节省存储成本,并使得视频文件更容易在网络上分享和传输。在网络带宽有限的情况下,压缩视频可以减少视频流量,提高视频在低带宽环境下的流畅性和观看体验。哪款视频压缩软件最好用…

海外云手机提供的当地IP有什么好处?

在全球化的数字时代,海外云手机成为许多企业和个人的首选,用于运营海外社媒、远程办公等活动。海外云手机的一个重要特点是可以选择不同国家的IP地址,以实现更灵活的运营策略和网络访问控制。 首先,让我们探讨海外云手机可以选不同…

element vue 日期时间组件封装

一、背景 年、月、周、日的时间范围类型&#xff0c;选择对应的日期类型&#xff0c;会传参给后端一个dateType参数&#xff0c;用于后端判断&#xff0c;进行数据抽稀。 二、实现效果 三、代码 完整代码&#xff1a; //年月周日&#xff0c;组件封装 //vue3 setup <scrip…

10. 学生成绩管理系统

内容概要 认识了解数组 可重复添加数组的命令 认识并了解数组 1.什么是数组 数组用来存储一组同类型的数据 2.数组的使用 创建数组 使用数组&#xff1a;加入成员、获取数组中成员的内容&#xff08;值&#xff09;、删除成员、取数组成员数、清除数组 3.需要注意的问…

通信指挥类装备(多链路聚合设备)

随着信息技术的迅猛发展&#xff0c;通信指挥类装备在应急管理等领域中发挥着越来越重要的作用。多链路聚合设备具有4G/5G、专网、卫星网、宽带自组网、WiFi等多种网络接入和融合能力&#xff0c;同时使用用户≥200&#xff0c;防护等级≥IP66&#xff0c;单电池可连续工作≥4h…

Prometheus接入AlterManager配置邮件告警(基于K8S环境部署)

目录 一.配置Alertmanager告警发送至邮箱二.Prometheus接入AlertManager三.部署PrometheusAlterManager(放到一个Pod中)四. 测试告警 基于 此环境做实验 一.配置Alertmanager告警发送至邮箱 1.创建AlertManager ConfigMap资源清单 vim alertmanager-cm.yaml --- kind: Confi…

C++ 中的默认成员函数详解

在 C 中&#xff0c;有六种默认成员函数会在创建类时由编译器自动生成。但需要注意的是&#xff0c;如果我们手动在类中定义了其中一种成员函数&#xff0c;编译器便不会自动生成该成员函数。 构造函数 作用&#xff1a;构造函数在实例化对象时自动被调用&#xff0c;用于初始化…

Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境

Ubuntu 持续集成 安装OpenJdk 查看所有可安装的 JDK 版本 apt list OpenJDK\*使用 apt 安装 JDK&#xff08;以 11为例&#xff09;,最好是用11&#xff0c;java8对应的jenkins会有兼容问题。 sudo apt install openjdk-11-jdk openjdk-11-jre安装成功后&#xff0c;可以使用以…

IP地址定位技术在各领域的作用

IP地址定位是通过确定IP地址的物理位置来定位一个设备的技术&#xff0c;它在现代社会的多个领域中都有着广泛的应用。以下将详细探讨IP地址定位的应用场景&#xff0c;以期对读者有所启发。 首先&#xff0c;在网络安全领域&#xff0c;IP地址定位发挥着至关重要的作用。网络…

6、Qt-button设置

前言&#xff1a;记录Button使用的一些技巧 一、无边框前端设置 二、无边框后台设置 ui->PushButton->setStyleSheet("border:none;") 四、参考文献 4.1 Qt按钮实现无边框效果的方法之一_qt设置按钮无边框-CSDN博客

Linux 秋招必知必会(一、文件I/O、文件和目录)

一、基本概念 1. shell shell&#xff1a;命令解释器&#xff0c;根据输入的命令执行相应命令 bash&#xff08;Bourne-Again-SHell&#xff09;是一个为 GNU 计划编写的 Unix shellLinux 默认的 shell&#xff1a;/bin/bash 2. 类 Unix 系统目录结构 Ubuntu 没有盘符这个…

XT-50冲击试样缺口夏比投影仪

概述&#xff1a; 冲击试样投影仪是我们根据目前国内广大用户的实际需求和GB/T229—2020《金属夏比缺口冲击试验方法》中对冲击试样缺口的要求而设计、开发的一种专用于检查夏比V型和U型冲击试样缺口加工质量的专用光学仪器&#xff0c;该仪器是利用光学投影方法将被测的冲击试…

天诚智慧校园管理系统,变革高校物联网锁数智化通行新模式

三月草长莺飞&#xff0c;四月柳绿莺啼&#xff0c;在万物复苏的美好时节&#xff0c;历经半年的精心酝酿与匠心打磨&#xff0c;全场景AIoT解决方案服务商——江苏新巢天诚智能技术有限公司&#xff08;以下简称“天诚”&#xff09;正式推出新一代高校数智化通行管理平台——…