Flutter调用原生相机和相册选择并使用Dio3上传到服务器

用到的组件

  dio: ^3.0.2
  image_picker: ^0.6.0+9

ios需要在info.list加入

	<key>NSPhotoLibraryUsageDescription</key>
	<string>要用相册</string>
	<key>NSCameraUsageDescription</key>
	<string>要用相机</string>
	<key>NSMicrophoneUsageDescription</key>
	<string>要用录像</string>

 

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:dio/dio.dart';

class ImagePickerPage extends StatefulWidget {
  ImagePickerPage({Key key}) : super(key: key);

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

class _ImagePickerPageState extends State<ImagePickerPage> {
  String _imageUrl;

  //拍照
  _takePhotos() async {
    var image = await ImagePicker.pickImage(source: ImageSource.camera);
    _uploadImage(image);
  }

  //获取相册照片
  _getPhotos() async {
    var image = await ImagePicker.pickImage(
        source: ImageSource.gallery);
    _uploadImage(image);
  }

  Future<Map<String, dynamic>> _uploadImage(File _imageDir) async {
    var fileDir = _imageDir.path;
    print(fileDir);
    FormData formData = FormData.fromMap({
      "file": await MultipartFile.fromFile(_imageDir.path, filename: "aa.jpg"),
    });
    Dio dio = new Dio();
    var response = await dio.post(
        "http://192.168.9.234:8020/fileUpload",
        data: formData);
    print(response);
    setState(() {
      var path = "http://192.168.10.14:8888/" + response.data["data"]["path"];
      _imageUrl = path;
    });
    return response.data;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("拍照"),
      ),
      body: Column(
        children: <Widget>[
          RaisedButton(
            child: Text("拍照"),
            onPressed: _takePhotos,
          ),
          RaisedButton(
            child: Text("相册"),
            onPressed: _getPhotos,
          ),
          Center(
            child:
                _imageUrl == null ? Text("No image ") : Image.network(_imageUrl),
          )
        ],
      ),
    );
  }
}

注意:本地服务器不可写localhost和127.0.0.1 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值