|
|
import 'dart:async';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
import 'package:flutter_icons/flutter_icons.dart';
|
|
|
import 'package:multi_image_picker/multi_image_picker.dart';
|
|
|
import 'package:akuCommunity/utils/screenutil.dart';
|
|
|
import 'package:akuCommunity/base/base_style.dart';
|
|
|
|
|
|
class SingleImageUp extends StatefulWidget {
|
|
|
final String title, imagePath;
|
|
|
SingleImageUp({Key key, this.title, this.imagePath}) : super(key: key);
|
|
|
|
|
|
@override
|
|
|
_SingleImageUpState createState() => _SingleImageUpState();
|
|
|
}
|
|
|
|
|
|
class _SingleImageUpState extends State<SingleImageUp> {
|
|
|
//图片多选
|
|
|
List images = [];
|
|
|
String error = 'No error Dectected';
|
|
|
List resultList;
|
|
|
|
|
|
//选择照片并上传
|
|
|
Future<void> uploadImages() async {
|
|
|
try {
|
|
|
resultList = await MultiImagePicker.pickImages(
|
|
|
//选择图片的最大数量
|
|
|
maxImages: 1,
|
|
|
//是否支持拍照
|
|
|
enableCamera: true,
|
|
|
materialOptions: MaterialOptions(
|
|
|
//显示所有图片,值为false时显示相册
|
|
|
// actionBarColor: '#fff',
|
|
|
// statusBarColor: '#fff',
|
|
|
// actionBarTitleColor: '#333',
|
|
|
startInAllView: true,
|
|
|
allViewTitle: "相册",
|
|
|
useDetailsView: false,
|
|
|
textOnNothingSelected: "没有选择照片",
|
|
|
),
|
|
|
);
|
|
|
} on Exception catch (e) {
|
|
|
error = e.toString();
|
|
|
print(error);
|
|
|
}
|
|
|
|
|
|
if (!mounted) return;
|
|
|
setState(() {
|
|
|
// images = (resultList == null) ? [] : resultList;
|
|
|
if (resultList != null) {
|
|
|
images.addAll(resultList);
|
|
|
}
|
|
|
});
|
|
|
//一张张上传照片
|
|
|
for (int i = 0; i < images.length; i++) {
|
|
|
//获取byteData
|
|
|
|
|
|
//MultipartFile multipartFile = MultipartFile.fromBytes(
|
|
|
//imageData,
|
|
|
//文件名
|
|
|
//filename: "some-file-name.jpg",
|
|
|
//文件类型
|
|
|
//contentType:MediaType("image","jpg")
|
|
|
//);
|
|
|
//FormData formData = FormData.fromMap({
|
|
|
// 后端接口的参数名称
|
|
|
//"files": multipartFile
|
|
|
//});
|
|
|
// 后端接口 url
|
|
|
//String url = '';
|
|
|
// 后端接口的其他参数
|
|
|
//Map<String, dynamic> params = Map();
|
|
|
// 使用 dio 上传图片
|
|
|
//var response = await dio.post(url, data: formData, queryParameters: params);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
return Container(
|
|
|
child: InkWell(
|
|
|
onTap: images.length == 0
|
|
|
? () {
|
|
|
uploadImages();
|
|
|
}
|
|
|
: null,
|
|
|
child: Column(
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
children: [
|
|
|
Stack(
|
|
|
children: [
|
|
|
Container(
|
|
|
width: 328.w,
|
|
|
height: 180.w,
|
|
|
decoration: BoxDecoration(
|
|
|
border: Border.all(
|
|
|
color: Color(0xffe8e8e8),
|
|
|
width: images.length == 0 ? 0 : 4.w),
|
|
|
borderRadius:
|
|
|
BorderRadius.all(Radius.circular(6.w)),
|
|
|
),
|
|
|
child: ClipRRect(
|
|
|
borderRadius:
|
|
|
BorderRadius.all(Radius.circular(6.w)),
|
|
|
child: images.length == 0
|
|
|
? Image.asset(
|
|
|
widget.imagePath,
|
|
|
width: 328.w,
|
|
|
height: 180.w,
|
|
|
)
|
|
|
: AssetThumb(asset: images[0], width: 328, height: 180),
|
|
|
),
|
|
|
),
|
|
|
images.length == 0
|
|
|
? SizedBox()
|
|
|
: Positioned(
|
|
|
top: 0,
|
|
|
right: 0,
|
|
|
child: InkWell(
|
|
|
onTap: () {
|
|
|
setState(() {
|
|
|
images.removeAt(0);
|
|
|
});
|
|
|
},
|
|
|
child: Icon(
|
|
|
AntDesign.closecircle,
|
|
|
color: BaseStyle.colorffc40c,
|
|
|
size: 36.sp,
|
|
|
),
|
|
|
),
|
|
|
),
|
|
|
],
|
|
|
),
|
|
|
SizedBox(height: 16.w),
|
|
|
Text(
|
|
|
widget.title,
|
|
|
style: TextStyle(
|
|
|
fontSize: BaseStyle.fontSize24, color: BaseStyle.color999999),
|
|
|
),
|
|
|
],
|
|
|
),
|
|
|
),
|
|
|
|
|
|
// GridView.builder(
|
|
|
// shrinkWrap: true,
|
|
|
// physics: NeverScrollableScrollPhysics(),
|
|
|
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
|
// crossAxisCount: 2,
|
|
|
// mainAxisSpacing: 30.w,
|
|
|
// crossAxisSpacing: 32.w,
|
|
|
// childAspectRatio: 328.w / 230.w,
|
|
|
// ),
|
|
|
// itemBuilder: (BuildContext context, int index) {
|
|
|
// return index == images.length
|
|
|
// ? InkWell(
|
|
|
// onTap: () {
|
|
|
// uploadImages();
|
|
|
// },
|
|
|
// child: Column(
|
|
|
// mainAxisAlignment: MainAxisAlignment.center,
|
|
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
// children: [
|
|
|
// ClipRRect(
|
|
|
// borderRadius: BorderRadius.all(
|
|
|
// Radius.circular(6.w)),
|
|
|
// child: Image.asset(
|
|
|
// widget.imagePath,
|
|
|
// width: 328.w,
|
|
|
// height: 180.w,
|
|
|
// ),
|
|
|
// ),
|
|
|
// SizedBox(height: 16.w),
|
|
|
// Text(
|
|
|
// widget.title,
|
|
|
// style: TextStyle(
|
|
|
// fontSize: BaseStyle.fontSize24,
|
|
|
// color: BaseStyle.color999999),
|
|
|
// ),
|
|
|
// ],
|
|
|
// ),
|
|
|
// )
|
|
|
// : Stack(
|
|
|
// children: [
|
|
|
// Column(
|
|
|
// mainAxisAlignment: MainAxisAlignment.center,
|
|
|
// crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
// children: [
|
|
|
// ClipRRect(
|
|
|
// borderRadius: BorderRadius.all(
|
|
|
// Radius.circular(6.w)),
|
|
|
// child: AssetThumb(
|
|
|
// asset: images[index],
|
|
|
// width: 328,
|
|
|
// height: 180,
|
|
|
// ),
|
|
|
|
|
|
// // Image.asset(
|
|
|
// // widget.imagePath,
|
|
|
// // width: 328.w,
|
|
|
// // height: 180.w,
|
|
|
// // ),
|
|
|
// ),
|
|
|
// SizedBox(height: 16.w),
|
|
|
// Text(
|
|
|
// widget.title,
|
|
|
// style: TextStyle(
|
|
|
// fontSize: BaseStyle.fontSize24,
|
|
|
// color: BaseStyle.color999999),
|
|
|
// ),
|
|
|
// ],
|
|
|
// ),
|
|
|
// Positioned(
|
|
|
// top: 0,
|
|
|
// right: 0,
|
|
|
// child: InkWell(
|
|
|
// onTap: () {
|
|
|
// setState(() {
|
|
|
// images.removeAt(index);
|
|
|
// });
|
|
|
// },
|
|
|
// child: Icon(
|
|
|
// AntDesign.closecircle,
|
|
|
// color: BaseStyle.colorffc40c,
|
|
|
// size: 36.sp,
|
|
|
// ),
|
|
|
// ),
|
|
|
// ),
|
|
|
// ],
|
|
|
// );
|
|
|
// },
|
|
|
// itemCount: 1,
|
|
|
// ),
|
|
|
);
|
|
|
}
|
|
|
}
|