最新版本的dio,UploadFileInfo被去掉了,需要换成MultipartFile.
要装的库:
dio: 3.0.8
fluttertoast: ^3.1.3
image_picker: ^0.6.3+1
代码:
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';//toast
import 'package:image_picker/image_picker.dart';//从相册里面选择图片或者拍照获取照片
class HeadImageUploadPage extends StatefulWidget {
@override
_HeadImageUploadPageState createState() => _HeadImageUploadPageState();
}
class _HeadImageUploadPageState extends State<HeadImageUploadPage> {
File _image;
Future getImage() async {
var image = await ImagePicker.pickImage(source: ImageSource.gallery);
_upLoadImage(image);//上传图片
setState(() {
_image = image;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Picker Example'),
),
body: Center(
child: _image == null
? Text('No image selected.')
: Image.file(_image),
),
floatingActionButton: FloatingActionButton(
onPressed: getImage,
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
//上传图片
_upLoadImage(File image) async {
String path = image.path;
var name = path.substring(path.lastIndexOf("/") + 1, path.length);
// FormData formData = new FormData.fromMap({
// "file": new MultipartFile.fromFile (new File(path), name)
// });
FormData formdata = FormData.fromMap({
"file": await MultipartFile.fromFile(path, filename:name)
});
Dio dio = new Dio();
var respone = await dio.post<String>("路径", data: formdata);
if (respone.statusCode == 200) {
Fluttertoast.showToast(
msg: "图片上传成功",
gravity: ToastGravity.CENTER,
textColor: Colors.grey);
}
}
}