Flutter——头像上传功能,实现照片选择及裁剪
使用两个开发库,image_picker和image_crop。
前者用来拍照或者从相册选择照片,后者用来裁剪,结果均为File类型,裁剪完成后可以直接上传文件。
先写到这儿,有时间上代码。
更新:
实现的功能是点击头像图片,弹出选择框,选择拍照或者从相册中选取:
拍照或选取一张图片后,裁剪到想要大小。进行保存或者上传。
实现:
首先的首先,在Android的manifest文件中,加入网络、相机、文件读写的权限,并在application中加入一个activity声明。
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
首先在yaml文件中添加依赖:上https://pub.dartlang.org/packages/ flutter第三方插件官网,找最新版即可。添加之后 package get。
在调用的文件导入包,
import 'package:image_picker/image_picker.dart';
点击按钮,进行拍照:
///拍摄照片 Future getImage() async {await ImagePicker.pickImage(source: ImageSource.camera).then((image) => cropImage(image)); }
通过相册选取:
///从相册选取 Future chooseImage() async {await ImagePicker.pickImage(source: ImageSource.gallery).then((image) => cropImage(image)); }
.then拿到的是拍好的照片,之后进行跳转到剪裁页面CropImageRoute 进行剪裁。
void cropImage(File originalImage) async {String result = await Navigator.push(context,MaterialPageRoute(builder: (context) => CropImageRoute(originalImage)));if (result.isEmpty) {print('上传失败');} else {//result是图片上传后拿到的urlsetState(() {iconUrl = result;print('上传成功:$iconUrl');_upgradeRemoteInfo();//后续数据处理,这里是更新头像信息});} }
剪裁页面CropImageRoute 代码:
import 'dart:io';import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:flutter_productapp/home/moudel/upload_result.dart'; import 'package:flutter_productapp/home/util/screen.dart'; import 'package:flutter_productapp/base_ui/themes.dart'; import 'package:image_crop/image_crop.dart';class CropImageRoute extends StatefulWidget {CropImageRoute(this.image);File image; //原始图片路径@override_CropImageRouteState createState() => new _CropImageRouteState(); }class _CropImageRouteState extends State<CropImageRoute> {double baseLeft; //图片左上角的x坐标double baseTop; //图片左上角的y坐标double imageWidth; //图片宽度,缩放后会变化double imageScale = 1; //图片缩放比例Image imageView;final cropKey = GlobalKey<CropState>();@overrideWidget build(BuildContext context) {return Scaffold(body: Container(height: Screen.height,width: Screen.width,color: ThemeColors.color333333,child: Column(children: <Widget>[Container(height: Screen.height * 0.8,child: Crop.file(widget.image,key: cropKey,aspectRatio: 1.0,alwaysShowGrid: true,),),RaisedButton(onPressed: () {_crop(widget.image);},child: Text('ok'),),],),));}Future<void> _crop(File originalFile) async {final crop = cropKey.currentState;final area = crop.area;if (area == null) {//裁剪结果为空print('裁剪不成功');}await ImageCrop.requestPermissions().then((value) {if (value) {ImageCrop.cropImage(file: originalFile,area: crop.area,).then((value) {upload(value);}).catchError(() {print('裁剪不成功');});} else {upload(originalFile);}});}///上传头像void upload(File file) {print(file.path);Dio dio = Dio();dio.post("http://your ip:port/",data: FormData.from({'file': file})).then((response) {if (!mounted) {return;}//处理上传结果UploadIconResult bean = UploadIconResult(response.data);print('上传头像结果 $bean');if (bean.code == '1') {Navigator.pop(context, bean.data.url);//这里的url在上一页调用的result可以拿到} else {Navigator.pop(context, '');}});} }
至此,就可以基本实现了。
有啥问题欢迎指出。
Flutter——头像上传功能,实现照片选择及裁剪相关推荐
- 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
作者:Dreawer 链接:https://zhuanlan.zhihu.com/p/24465742 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙 ...
- [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能
很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...
- php的注册头像上传,用Ajax实现注册与头像上传功能
这次给大家带来用Ajax实现注册与头像上传功能,Ajax实现注册与头像上传功能的注意事项有哪些,下面就是实战案例,一起来看一下. 在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册 ...
- qt实现头像上传功能
文章目录 一.概要 二.详情 想必大家都使用过qt的自定义头像功能吧,那么图1应该不会陌生,本片文章我就是要模拟一个这样的功能,虽然没有这么强大的效果,但是能够满足一定的需求. 首先在讲解功能之前,我 ...
- java 上传头像_javaWeb头像上传功能
[实例简介] 一个实现可抓取编辑,头像上传功能.只要下载就可以运行,附有源码 [实例截图] [核心代码] 头像上传 └── 头像上传 └── ZoomImageDemo ├── src │ └── ...
- php上传头像的代码,针对多用户实现头像上传功能PHP代码 适用于登陆页面制作...
一个网站,其实说白了就是某几个特定功能的组合,而更换用户头像就在这些功能之中.今天就来做个测试,针对不同的用户,实现头像上传功能. ---------------------------------- ...
- android开发实现头像上传功能
刚进公司领导要求做个app头像上传功能,要求从相册或者相机拍照上传头像.网上参考了一些demo,整理了一下. 效果如图: 流程其实挺简单:对按钮进行监听,点击后弹出AlertDialo ...
- vue-admin-template开发(头像上传功能)
vue-admin-template开发(头像上传功能) vue-admin-template是一个后台管理系统的前端框架,提供了登录.导航栏.路由等功能,是一个强大简洁的后台管理系统的前端框架.本文 ...
- uniapp头像上传功能
问题:第一次做头像上传,使用普通的uni.request方法请求接口会报跨域 解决:实际上uni-app官方有头像上传的API,我也翻看了很多博主的文章,最后自己按照人家的思路敲出来了,方法如下: ...
最新文章
- winform下通过webclient使用非流方式上传(post)数据和文件
- 秀秀的森林(forest)
- RobHess的SIFT源码分析:综述
- 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)
- ORM SQLAlchemy 简介
- Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
- python matplotlib相关 dateutil
- C++学习笔记————WINAPI宏定义
- 计算机word图表布布局在哪,word中的页面布局在哪里
- java nginx 502_Nginx 中 502 和 504 错误详解
- 计算机bios所以的英文翻译,bios界面翻译对照 主板BIOS界面全英文翻译介绍
- 2021软科中国计算机专业排名
- 第二天 04-虚拟无法获取IP如何解决
- HSSFCellStyle相关属性报错
- 《Java Web程序设计基础教程》简介
- 【前端笔记】SCSS学习篇之一:基础入门
- C#设计模式(4)-Simple Factory Pattern
- L9110S电机驱动——让小车动起来
- 基尔霍夫定律 和支路电流法
- 最美春天,人间四月天
热门文章
- 行情走势波动在各个时间段会有什么规律或变化?
- 照片误删了怎么恢复?照片删了回收站也删了怎么找回来
- jmeter定时器的使用_jmeter定时器
- 【报告分享】2021Q1服饰行业季度洞察报告-巨量算数(附下载)
- 【走出自律误区】—这一刻的松懈,能否决定我的一生?
- cannot add foreign key constraint mysql_解决1215 - cannot add foreign key constraint
- 美妆行业全网声量统计与传播趋势分析,完美日记位居品牌声量榜一
- 编译安装gcc-4.8.2(编译出错后修改源码 编译成功)
- CTF-Sanba共享
- 收集vcftools所有用法