第二百七十九回

2024-01-21 10:52
文章标签 九回 二百七十

本文主要是介绍第二百七十九回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 概念介绍
  • 2. 思路与方法
    • 2.1 实现思路
    • 2.2 实现方法
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"如何播放视频"相关的内容,本章回中将介绍如何选择单个图片文件.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在前面章回中介绍了加载本地图片和播放视频相关的内容,它们需要获取文件在本地存储的绝对路径,我们在很早的章回中介绍过path_provider包,它可以协助开
发者获取到本地存储的路径,不过没有可以视化的界面操作,本章回中将介绍一种通过可视化操作获取文件路径的方法,并且在此基础上获取图片文件。

2. 思路与方法

2.1 实现思路

我们通过三方包image_picker来获取文件路径,而且是通过可视化操作的方式来获取文件,我们只需要发出一个指令就可以打开手机上的文件系统,接下来就可以在该
文件系统中以可视化的方式选择文件,选择文件后可以获取到该文件在文件系统中的绝对路径。这个包是Flutter官方提供的包,我们可以放心使用,而且在Android系
统中不需要获取文件读写权限(早期版本需要,最新版本不需要,具体的版本号可以参考官方文档).我们在接下来的章回中将详细介绍该包的使用方法,包含获取图片文件
和视频文件,以及通过相机来获取图片和视频文件。

2.2 实现方法

介绍完具体的实现思路后,我们介绍详细的实现方法。

  • 在yaml配置文件中添加包,并且获取包到项目中;
  • 创建文件选择器对象,也就是包中提供的ImagePicker类的实例;
  • 使用文件选择器的pickImage()方法获取图片文件,该方法将返回图片文件在本地存储中的相对路径;
  • 获取到文件路径后就可以使用Image组件的file()方法加载图片文件。
    上面的步骤中使用了ImagePicker的pickImage()方法,该方法返回的是Future<XFile?>类型的对象,因此我们需要在Future的then方法来获取文件路径。此
    外,该方法需要异步运行,因为获取文件路径是比较耗时的操作。

3. 示例代码

ImagePicker imagePicker = ImagePicker();XFile? _mediaFile;double imgWidth = 200;
double imgHeight = 400;///注意获取图片需要异步操作
Future<XFile?> getImageFile() async {var imgFile = await imagePicker.pickImage(source: ImageSource.gallery,maxWidth: imgWidth,maxHeight: imgHeight,imageQuality: 10,);return imgFile;
}///通过按钮来发出指令
ElevatedButton(onPressed: () {getImageFile().then((value) {///因为是异步,所以需要通过setState更新数据源setState(() {///返回的路径是app下的缓冲目录:data/user/0/packagename/cache/scaled_1000000010.jpg// debugPrint("path: v${value[0].path}");_mediaFile = value;});});},child: const Text("Load Image"),
),///显示图片文件
_mediaFile == null? const Icon(Icons.image): (_mediaFile!.path.isEmpty? const Text("do not select image"): Image.file(File(_mediaFile!.path),width: imgWidth,height: imgHeight,errorBuilder: (context, error, trace) {return Text("load image error: $error");},))

上面的示例代码中演示了如何获取图片文件,代码把pickImage()方法封装成了异步方法,并且将它绑定到按钮上,这样就可以在点击按钮时发出获取文件的指令,此时
会打开一个文件选择器的窗口,我们可以在该窗口中以可视化操作的方式选择图片文件。代码中加载图片前需要检查文件路径,文件路径在程序最开始运行时为null,在
程序运行后,但是没有选择任何图片文件,此时的文件路径不为空,而是为empty,这点需要特别注意,不然无法正确显示图片文件。此外,我们获取到的图片文件路径是
一个相对路径,它并不是图片文件的绝对路径。

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • Flutter官方提供了image_picker包,该包以可视化操作的方式获取文件路径;
  • 使用包中的pickImage()方法可以获取到当前手机文件系统中图片文件的相对路径;
  • 加载图片文件前需要检查文件路径的可靠性,不然可能导致Image组件无法加载图片文件;
    看官们,与"如何选择单个图片文件"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论

这篇关于第二百七十九回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629294

相关文章

C++之容器:双端队列queue用法实例(二百七十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行

每天一个数据分析题(二百七十八)

假定学生信息表是S(SNo, SName, Sex, Age),课程信息表是C(CNo, CName, Teacher),学生选课信息表是SC(SNo, CNo, Grade),一个学生可以选修多门课程,一门课程可以有多个学生选修,有的学生没有选课,有的课程没有学生选课,要查找所有学生的学号以及选修的课程号,正确的SQL语句是( ) A. SELECT SNO,CNO FROM GRADE;

每天一个数据分析题(二百七十一)

()是用来管理数据库的软件,对数据库进行统一的管理和控制,以保证数据库的安全性。 A. DBMS B. DB C. DBS D. DBA 题目来源于CDA模拟题库 点击此处获取答案

一起talk C栗子吧(第一百二十九回:C语言实例--C程序内存布局一)

各位看官们,大家好,上一回中咱们说的是查看当前进程信息的例子,这一回咱们说的例子是:C程序内存布局。闲话休提,言归正转。让我们一起talk C栗子吧! 看官们,我们编写的每一个C程序都会被加载到内存中运行,那么C程序在内存中是如何存放的呢?我们今天一起来看看C程序在内存中的布局。 C程序在内存中主要有四个分区,它们分别是代码区,数据区,堆区和栈区。这些区域从低地址向高地址依次排列。为了大

一起Talk Android吧(第一百二十九回:Android自定义View六)

各位看官们,大家好,上一回中咱们说的是Android中自定义View的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中查看了LinearLayout类中的onMeasure方法,这一回中我们查看该类的onLayout方法,源代码如下: protected void onLayout(boolean changed, int l,

一起Talk Android吧(第二百三十九回:Android中Activity之间的数据传递一)

各位看官们大家好,上一回中咱们说的是Android中Activity之间跳转的例子,这一回咱们说的例子是Activity之间的数据传递。闲话休提,言归正转。让我们一起Talk Android吧! 看官们,我们在上一回中介绍了Activity之间的跳转,其实在跳转的同时我们可以借助intent来传递一些简单的数值,具体的操作如下: 1.复用上一回中的两个Activity:A和B;以及跳转时使用的

第三百五十九回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的wheelChooser是一个三方包,它

第二百八十九回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容,本章回中将介绍如何通过相机获取视频文件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在前面章回中介绍的选择图片或者视频文件的方式都是通过文件窗口进行的,本章回中将介绍如何通过相机获

第二百五十九回

文章目录 知识回顾示例代码经验总结 我们在上一章回中介绍了MethodChannel的使用方法,本章回中将介绍EventChannel的使用方法.闲话休提,让我们一起Talk Flutter吧。 知识回顾 我们在前面章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通道:EventChannel.该通道主要通过Stream实现通信功能,该通道 主要

第一百十九回 如何Text组件中的文字自动换行

文章目录 1. 概念介绍2. 实现方法2.1 基本用法2.2 特殊用法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"相关的内容,本章回中将 介绍如何让Text组件中的文字自动换行.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的Text组件就是用来显示文本的组件,关于该组件的用法可以点击这