flutter 使用image_picker上传图片

标签: flutter开发

第一步:封装,可以单独放在一个文件里 可以直接复制


//选择图片函数
    /*拍照*/
    HspTakePhoto() async {
     var image = await ImagePicker.pickImage(source: ImageSource.camera,maxWidth: 640,maxHeight: 480);//限制拍照图片的大小
     return image;
    }

    /*相册*/
    HspOpenGallery() async {
      var image = await ImagePicker.pickImage(source: ImageSource.gallery);
      return image;
    }

 /*选择图片底部弹框*/
showModalBottomSheet(context: context, builder: (BuildContext context){
                return HspPickerImagePanel();
              });

              */
class HspPickerImagePanel extends StatefulWidget {

  Function  hspOnchange;
  HspPickerImagePanel({
    Key key,
    this.hspOnchange
});

  @override
  _HspPickerImagePanelState createState() => _HspPickerImagePanelState();
}

class _HspPickerImagePanelState extends State<HspPickerImagePanel> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: HspSize.setRpx(750),
      height: HspSize.setRpx(300),
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: <Widget>[
          InkWell(
            child: Text("相册"),
            onTap: ()async{
              var _url= await HspOpenGallery();
              await widget.hspOnchange(_url);
            },
          ),
          InkWell(
            child: Text("拍照"),
            onTap: ()async{
              var _url= await HspTakePhoto();
              await widget.hspOnchange(_url);
            },
          ),
        ],
      ),
    );
  }
}

第二步:打开底部弹框

在这里插入图片描述
调用showModalBottomSheet打开底部弹框,return第一步的HspPickerImagePanel(),val值就是返回的本地图片的地址,然后可以处理使用dio上传,
具体可以参考这篇文章https://blog.csdn.net/codekxx/article/details/101770516

注意 上传图片的大小可能汇报dio error 413错误,原因是图片大小超过服务器的设置了,使用pickImage的maxWidth和maxHeigth可以限制图片大小

版权声明:本文为qq_42944436原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42944436/article/details/108258063

智能推荐

Flutter 图片 Image 容器组件详解

Flutter 图片 Image 容器组件 Flutter 基础组件 Image 图片容器组件详情使用介绍 Flutter Image 组件介绍 引入图片的几种方式: Image.asset: 加载资源图片,就是加载项目资源目录中的图片,加入图片后会增大打包的包体体积,用的是相对路径。 Image.network: 网络资源图片,意思就是你需要加入一段http://xxxx.xxx的这样的网络路径...

Flutter组件学习(4)图片Image

  介绍 关于Flutter图片的加载有多种形式 方法 释义 Image() 从ImageProvider中获取图片,从本质上看,下面的几个方法都是他的具体实现。 Image.asset(String name) 从AssetBundler中获取图片 Image.network(String src) 显示网络图片 Image.file(File file) 从File中获取图片 Ima...

Flutter 常用Widget-图片Image

Flutter中,加载并显示图片使用的是Image组件。我们先来看下这个构造函数: Image的构造参数有一下几种分别是: Image:从Provider获取图像 Image.asset:加载资源图片 Image.file:加载本地图片文件 Image.network:记载网络图片 Image.memory:加载Uint8List资源图片 我们接下来看一下如何使用 我们加载了一张网络图片。其他的使...

Flutter Widgets: Image

介绍 Image, 图片显示Widget, 和Android ImageView相似,但是从实际使用的方法上看,与常用的图片加载库,如Picasso,Glide等相似,支持本地图片,资源图片,网络图片等加载方式。 类结构 构造方法 方式 解释 Image() 通用方法,使用ImageProvider实现,如下方法本质上也是使用的这个方法 Image.asset 加载资源图片 Image.file ...

Flutter学习之image

这里的image组件照例是放在Container组件当中,在Container中放一个child,new一个Image,Image有四个方法,assert(),memory(),file(),network(最常用),就是存储在网络上的图片。Image里有几个重要的属性 fit: BoxFit.fitHeight() Y轴填充 其他几个方法字面意思 repeat: ImageRepeat.repe...

猜你喜欢

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...