Flutter实现点击头像更新头像的功能,本地相册选取和调用相机两种方式的实现

news2024/11/24 12:26:15

文章目录

  • 需求
  • 实现的效果如图
  • 代码实现
    • 代码分析
      • 用InkWell包住了我们的头像,这样来监听点击头像的事件
      • 用showDialog弹出提示框让用户选择是从相册里选择头像还是使用相机来拍照
      • 用image_picker实现从设备的相册或相机中选择图片或拍照

需求

Flutter实现点击头像更新头像的功能,需要实现本地相册选取和调用相机两种方式的实现。

实现的效果如图

在这里插入图片描述
在这里插入图片描述

代码实现

InkWell(
                        onTap: () {
                          showDialog(
                            context: context,
                            builder: (BuildContext context) {
                              return AlertDialog(
                                title: Text('选择头像'),
                                actions: [
                                  TextButton(
                                    child: Text('从相册选择'),
                                    onPressed: () async {
                                      Navigator.of(context).pop();
                                      final pickedImage = await ImagePicker().pickImage(source: ImageSource.gallery);
                                      if (pickedImage != null) {
                                        _updateSelectedImage(File(pickedImage.path));
                                        _saveImagePath(pickedImage.path);
                                      }
                                    },
                                  ),
                                  TextButton(
                                    child: Text('拍照'),
                                    onPressed: () async {
                                      Navigator.of(context).pop();
                                      final pickedImage = await ImagePicker().pickImage(source: ImageSource.camera);
                                      if (pickedImage != null) {
                                        _updateSelectedImage(File(pickedImage.path));
                                        _saveImagePath(pickedImage.path);
                                      }
                                    },
                                  ),
                                ],
                              );
                            },
                          );
                        },

代码分析

用InkWell包住了我们的头像,这样来监听点击头像的事件

InkWell 是一个非常常用且功能强大的小部件。InkWell 可以用于为Flutter应用添加水波纹效果,以及捕获和处理用户的点击手势。

InkWell 封装了一个矩形区域,当用户点击该区域时,它会在用户点击的位置上产生一个美观的水波纹效果,并且可以响应这次点击事件。水波纹效果为用户提供了视觉反馈,让用户感知到他们的点击操作已被捕获。

用InkWell包住了我们的头像,这样来监听点击头像的事件。

用showDialog弹出提示框让用户选择是从相册里选择头像还是使用相机来拍照

showDialog 是Flutter中用于显示对话框的一个函数。对话框是一种常见的用户界面元素,用于向用户显示重要信息、警告、确认选择或接收用户输入。

showDialog 函数的定义如下:

Future<T?> showDialog<T>({
  required BuildContext context,
  bool barrierDismissible = true,
  required WidgetBuilder builder,
})

参数解释:
context:BuildContext,通常为当前页面的上下文。
barrierDismissible:一个布尔值,表示是否允许通过点击对话框外部的半透明背景来关闭对话框。默认为 true,表示可以关闭。
builder:WidgetBuilder 回调函数,用于构建对话框的内容。

用image_picker实现从设备的相册或相机中选择图片或拍照

image_picker 是 Flutter 中的一个插件,它提供了一个简单且易于使用的方法,用于从设备的相册或相机中选择图片或拍照。

使用 image_picker 插件,您可以轻松地实现以下功能:

从相册中选择图片:允许用户从设备的相册中选择一张图片。
拍照:允许用户使用设备的相机拍摄一张照片。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生管控系统,智慧园区楼宇合集

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

【java】【基础8】入门结业-ATM系统实战

目录 一、ATM项目技术 二、能达成的能力 三、开始编码 3.1 系统架构搭建、欢迎页设计 3.1.1 Account 3.1.2 ATM 3.1.3 Test 3.2 开户功能实现 3.2.1 修改AccountgetUserName() 3.2.2 ATM 开户操作 3.2.3 ATM为新用户生成一个随机卡号​编辑 3.3 登录功能实现 3.4 操作页…

登录和注册页面 - 验证码功能的实现

目录 1. 生成验证码 2. 将本地验证码发布成 URL 3. 后端返回验证码的 URL 给前端 4. 前端将用户输入的验证码传给后端 5. 后端验证验证码 1. 生成验证码 使用hutool 工具生成验证码. 1.1 添加 hutool 验证码依赖 <!-- 验证码 --> <dependency><groupId…

Linux——信号量、环形队列

Linux——信号量和环形队列 文章目录 Linux——信号量和环形队列概念信号量的PV原语线程申请信号量失败将会被挂起 信号量函数sem_init初始化信号量sem_destroy销毁信号量sem_wait等待信号量sem_post发布信号量 基于环形队列的生产者消费者模型代码实现 概念 临界资源&#xf…

Qt - 信号和槽

文章目录 信号和槽自定义信号和槽代码实现teacher 类申明信号方法student 添加槽并处理绑定信号和槽 当自定义信号和槽出现重载设置按钮点击 信号可以连接信号断开信号 disconnectQt4版本写法Lambda 表达式函数对象参数操作符重载函数参数可修改标示符函数返回值是函数体 总结拓…

【C++修炼之路】继承

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、概念及定义二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

2023最新谷粒商城笔记之Sentinel概述篇(全文总共13万字,超详细)

Sentinel概述 服务流控、熔断和降级 什么是熔断 当扇出链路的某个微服务不可用或者响应时间太长时&#xff0c;会进行服务的降级&#xff0c;**进而熔断该节点微服务的调用&#xff0c;快速返回错误的响应信息。**检测到该节点微服务调用响应正常后恢复调用链路。A服务调用B服…

服务器被挂病毒记录(redis入侵)

前言 今天正在快乐的打着游戏&#xff0c;突然一个浙江的电话&#xff1a; 好家伙&#xff0c;我那可怜的1核2g的服务器说在跑挖矿程序&#xff0c;苍天啊&#xff0c;大地呀&#xff0c;我那1核2g的服务器有啥跑呢&#xff0c;别难为这小家伙了。 解决过程&#xff1a; 1…

【学会动态规划】地下城游戏(10)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

计算机网络复习(路由器、交换机、广域网配置~)

文章目录 子网划分路由器和交换机的配置&#xff08;基础知识&#xff09;IOS基础IOS使用技巧Cisco设备的启动Cisco设备的配置途径配置文件的备份与恢复管理网络环境配置Telnet网络测试 配置路由表路由简介路由表简介路由的分类配置静态路由动态路由协议VLAN间的路由路由信息协…

Redis追本溯源(二)数据结构:String、List、Hash、Set、Zset底层数据结构原理

文章目录 一、String底层——sds&#xff08;Simple Dynamic String&#xff09;1.sds相比C语言字符串的优点2.结构3.扩容4.缩容 二、List底层——quickList、zipList1.quickList及其优化过程&#xff08;1&#xff09;quickList大致结构&#xff08;2&#xff09;引入zipList进…

Termux——安装配置

Termux简介1.基础知识1) 基础操作2) 目录结构3) 快捷键 2.基础命令1) 软件安装2) termux保持后台运行3&#xff09;[Process completed (signal 9) - press Enter] 问题修复4&#xff09;更换国内源5&#xff09;获取手机存储权限6&#xff09;基础软件安装 2. 美化相关1) 修改…

ChatGPT vs. 之前版本:性能与表现的对比

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

vue之ReadIdcardMD(身份证读取组件-移动设备)

组件功能 移动便携读取二代身份证信息组件(一般是非接刷二代证方式),包含无效身份证验证,过期身份证验证,是否满16周岁验证 (与windows二代证读取组件的区别是不会生成二代证图片,直接返回base64数据) #界面 #<

测等保2.0——安全区域边界

一、前言 今天我们来说说安全区域边界&#xff0c;顾名思义&#xff0c;安全区域边界就是保障网络边界处&#xff0c;包括网络对外界的边界和内部划分不同区域的交界处&#xff0c;我们的重点就是查看这些边界处是否部署必要的安全设备&#xff0c;包括防火墙、网闸、网关等安…

不止工具:音视频开发「利器」的新机遇

Boxing的制胜关键是快、准、稳&#xff0c;与“音视频开发”有异曲同工之妙。 数字化浪潮席卷、视频化形态加速、终端性能挑战加剧、端侧算力遭遇瓶颈...... 是否存在一种可能性&#xff0c;让所有企业从复杂的音视频开发工程中抽身&#xff0c;重新回归业务本身&#xff1f; …

vue项目启动npm run serve常见报错及解决办法

报错1&#xff1a; 如图&#xff1a; 解决方法&#xff1a;重新安装core-js , npm i core-js 报错2&#xff1a; Syntax Error: EslintPluginImportResolveError: unable to load resolver “alias”. 解决方法&#xff1a;npm install eslint-import-resolver-alias -D 报…

Raft 思想在架构中实践

Raft 诞生背景&#xff1a; 分布式存储系统通常通过维护多个副本来进行容错&#xff0c;提高系统的可用性。要实现此目标&#xff0c;就必须要解决分布式存储系统的最核心问题&#xff1a;维护多个副本的一致性。 首先需要解释一下什么是一致性&#xff08;consensus&#xf…

ABAP 为N的一个数,在原来基础上浮动在-30~30

需求&#xff1a;为N的一个数&#xff0c;在原来基础上浮动在-30~30 *&---------------------------------------------------------------------* *& Report ZZZZ111 *&---------------------------------------------------------------------* *& 需求&…

揉捻Map-疯狂Java

理论概述 定义 图&#xff08;Graph&#xff09;是由节点&#xff08;Vertex&#xff09;和连接节点的边&#xff08;Edge&#xff09;组成的一种非线性数 据结构。它用于描述事物之间的关系、连接或依赖。图是一种非线性的数据结构&#xff0c; 它广泛应用于计算机科学、数学…