使用两个开发库,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——头像上传功能,实现照片选择及裁剪相关推荐

  1. 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能

    作者:Dreawer 链接:https://zhuanlan.zhihu.com/p/24465742 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙 ...

  2. [Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能

    很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化&l ...

  3. php的注册头像上传,用Ajax实现注册与头像上传功能

    这次给大家带来用Ajax实现注册与头像上传功能,Ajax实现注册与头像上传功能的注意事项有哪些,下面就是实战案例,一起来看一下. 在初次接触ajax后,我们做了一个crm训练的项目,大多数小组都有注册 ...

  4. qt实现头像上传功能

    文章目录 一.概要 二.详情 想必大家都使用过qt的自定义头像功能吧,那么图1应该不会陌生,本片文章我就是要模拟一个这样的功能,虽然没有这么强大的效果,但是能够满足一定的需求. 首先在讲解功能之前,我 ...

  5. java 上传头像_javaWeb头像上传功能

    [实例简介] 一个实现可抓取编辑,头像上传功能.只要下载就可以运行,附有源码 [实例截图] [核心代码] 头像上传 └── 头像上传 └── ZoomImageDemo ├── src │   └── ...

  6. php上传头像的代码,针对多用户实现头像上传功能PHP代码 适用于登陆页面制作...

    一个网站,其实说白了就是某几个特定功能的组合,而更换用户头像就在这些功能之中.今天就来做个测试,针对不同的用户,实现头像上传功能. ---------------------------------- ...

  7. android开发实现头像上传功能

    刚进公司领导要求做个app头像上传功能,要求从相册或者相机拍照上传头像.网上参考了一些demo,整理了一下. 效果如图:         流程其实挺简单:对按钮进行监听,点击后弹出AlertDialo ...

  8. vue-admin-template开发(头像上传功能)

    vue-admin-template开发(头像上传功能) vue-admin-template是一个后台管理系统的前端框架,提供了登录.导航栏.路由等功能,是一个强大简洁的后台管理系统的前端框架.本文 ...

  9. uniapp头像上传功能

    问题:第一次做头像上传,使用普通的uni.request方法请求接口会报跨域 解决:实际上uni-app官方有头像上传的API,我也翻看了很多博主的文章,最后自己按照人家的思路敲出来了,方法如下: ​ ...

最新文章

  1. winform下通过webclient使用非流方式上传(post)数据和文件
  2. 秀秀的森林(forest)
  3. RobHess的SIFT源码分析:综述
  4. 1_MVC+EF+Autofac(dbfirst)轻型项目框架_core层(以登陆为例)
  5. ORM SQLAlchemy 简介
  6. Linux工作笔记-查看tcp与udp端口并对比Windows简单分析
  7. python matplotlib相关 dateutil
  8. C++学习笔记————WINAPI宏定义
  9. 计算机word图表布布局在哪,word中的页面布局在哪里
  10. java nginx 502_Nginx 中 502 和 504 错误详解
  11. 计算机bios所以的英文翻译,bios界面翻译对照 主板BIOS界面全英文翻译介绍
  12. 2021软科中国计算机专业排名
  13. 第二天 04-虚拟无法获取IP如何解决
  14. HSSFCellStyle相关属性报错
  15. 《Java Web程序设计基础教程》简介
  16. 【前端笔记】SCSS学习篇之一:基础入门
  17. C#设计模式(4)-Simple Factory Pattern
  18. L9110S电机驱动——让小车动起来
  19. 基尔霍夫定律 和支路电流法
  20. 最美春天,人间四月天

热门文章

  1. 行情走势波动在各个时间段会有什么规律或变化?
  2. 照片误删了怎么恢复?照片删了回收站也删了怎么找回来
  3. jmeter定时器的使用_jmeter定时器
  4. 【报告分享】2021Q1服饰行业季度洞察报告-巨量算数(附下载)
  5. 【走出自律误区】—这一刻的松懈,能否决定我的一生?
  6. cannot add foreign key constraint mysql_解决1215 - cannot add foreign key constraint
  7. 美妆行业全网声量统计与传播趋势分析,完美日记位居品牌声量榜一
  8. 编译安装gcc-4.8.2(编译出错后修改源码 编译成功)
  9. CTF-Sanba共享
  10. 收集vcftools所有用法