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/headers.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 { //图片多选 List images = []; String error = 'No error Dectected'; List resultList; //选择照片并上传 Future 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 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, // ), ); } }