Commit bbd09e59e5c12b4d54f688d65800f44fb0ae5e95

Authored by wdn127929
1 parent df52693b

邀请函配置增加视频

Too many changes to show.

To preserve performance only 9 of 9+ files are displayed.

... ... @@ -18,19 +18,19 @@ if (flutterRoot == null) {
def flutterVersionCode = "534"
def flutterVersionCode = "542"
if (flutterVersionCode == null) {
flutterVersionCode = '534'
flutterVersionCode = '542'
}
def flutterVersionName = "5.3.4"
def flutterVersionName = "5.4.2"
if (flutterVersionName == null) {
flutterVersionName = '5.3.4'
flutterVersionName = '5.4.2'
}
... ...
import 'package:flutter/material.dart';
import 'package:one_key/models/upload_img_model.dart';
class AdditionModel {
String content;
String type; // 1图片 2文本
// int order; //顺序
UploadImgModel image;
TextEditingController infoC = TextEditingController();
AdditionModel();
factory AdditionModel.fromJson(Map<String, dynamic> json) => AdditionModel()
..content = json["content"]
..type = json["type"];
// ..order = json['order'];
Map<String, dynamic> toJson() => <String, dynamic>{
"content": content, "type": type,
// 'order': order
};
}
\ No newline at end of file
... ...
import 'dart:convert' as convert;
import 'dart:convert';
import 'package:one_key/models/recharge_list_model.dart';
import 'package:one_key/models/reserve_img_text.dart';
import 'coupon_model.dart';
... ... @@ -145,6 +147,10 @@ class MarkReserveModel {
String swichSlogan; //
String swichCustomer; //
List<String> parkImages;
String isIntroduceAll;
String title;
List<ContentModel> content;
MarkReserveModel(
{this.swichPhone,
... ... @@ -171,7 +177,10 @@ class MarkReserveModel {
this.swichWelcome,
this.swichSlogan,
this.swichCustomer,
this.parkImages});
this.parkImages,
this.isIntroduceAll,
this.title,
this.content});
MarkReserveModel.fromJson(Map<String, dynamic> json) {
swichPhone = json['swich_phone'];
... ... @@ -221,6 +230,27 @@ class MarkReserveModel {
});
}
}
if (json['content'] != null) {
content = [];
if (json['content'] is List) {
List temp = json['content'];
temp.forEach((element) {
content.add(ContentModel.fromJson(element));
});
} else {
if (jsonDecode(json['content']) is List) {
List temp = jsonDecode(json['content']);
temp.forEach((element) {
content.add(ContentModel.fromJson(element));
});
}
}
}
isIntroduceAll = json['is_introduce_all'];
title = json['title'];
}
Map<String, dynamic> toJson() {
... ... @@ -250,11 +280,14 @@ class MarkReserveModel {
data['long'] = this.long;
data['lat'] = this.lat;
data['swich_welcome'] = this.swichWelcome;
data['swich_slogan'] = this.swichSlogan;
data['swich_customer'] = this.swichCustomer;
data['park_info_images'] = this.parkImages;
data['swich_welcome'] = this.swichWelcome;
data['swich_slogan'] = this.swichSlogan;
data['swich_customer'] = this.swichCustomer;
data['park_info_images'] = this.parkImages;
data['is_introduce_all'] = this.isIntroduceAll;
data['title'] = this.title;
data['content'] = this.content.map((e) => e.toJson()).toList();
return data;
}
... ... @@ -268,6 +301,10 @@ class MarkStoreModel {
String isIntroduce;
String isAbove;
String isImages;
String isIntroduceAll;
String title;
List<ContentModel> content;
MarkStoreModel(
{this.style,
... ... @@ -276,7 +313,9 @@ class MarkStoreModel {
this.images,
this.isIntroduce,
this.isAbove,
this.isImages});
this.isImages,
this.isIntroduceAll,
this.title});
MarkStoreModel.fromJson(Map<String, dynamic> json) {
style = json['style'];
... ... @@ -296,9 +335,22 @@ class MarkStoreModel {
}
}
if (json['content'] != null) {
content = [];
if (jsonDecode(json['content']) is List) {
List temp = jsonDecode(json['content']);
temp.forEach((element) {
content.add(ContentModel.fromJson(element));
});
}
}
isIntroduce = json['is_introduce'];
isAbove = json['is_above'];
isImages = json['is_images'];
isIntroduceAll = json['is_introduce_all'];
title = json['title'];
}
Map<String, dynamic> toJson() {
... ... @@ -310,6 +362,9 @@ class MarkStoreModel {
data['is_introduce'] = this.isIntroduce;
data['is_above'] = this.isAbove;
data['is_images'] = this.isImages;
data['is_introduce_all'] = this.isIntroduceAll;
data['title'] = this.title;
data['content'] = this.content;
return data;
}
... ... @@ -324,6 +379,10 @@ class MarkChefModel {
String isIntroduce;
String isAbove;
String isImages;
String isIntroduceAll;
String title;
List<ContentModel> content;
MarkChefModel(
{this.style,
... ... @@ -333,7 +392,10 @@ class MarkChefModel {
this.image,
this.isIntroduce,
this.isAbove,
this.isImages});
this.isImages,
this.isIntroduceAll,
this.title,
this.content});
MarkChefModel.fromJson(Map<String, dynamic> json) {
style = json['style'];
... ... @@ -344,6 +406,18 @@ class MarkChefModel {
isIntroduce = json['is_introduce'];
isAbove = json['is_above'];
isImages = json['is_images'];
if (json['content'] != null) {
content = [];
if (jsonDecode(json['content']) is List) {
List temp = jsonDecode(json['content']);
temp.forEach((element) {
content.add(ContentModel.fromJson(element));
});
}
}
isIntroduceAll = json['is_introduce_all'];
title = json['title'];
}
Map<String, dynamic> toJson() {
... ... @@ -356,6 +430,9 @@ class MarkChefModel {
data['is_introduce'] = this.isIntroduce;
data['is_above'] = this.isAbove;
data['is_images'] = this.isImages;
data['is_introduce_all'] = this.isIntroduceAll;
data['title'] = this.title;
data['content'] = this.content;
return data;
}
}
... ... @@ -365,10 +442,13 @@ class MarkSignboardModel {
List<String> images;
MarkSignboardModel({
this.swich,
this.images,
});
String isIntroduceAll;
String title;
List<ContentModel> content;
MarkSignboardModel(
{this.swich, this.images, this.isIntroduceAll, this.title, this.content});
MarkSignboardModel.fromJson(Map<String, dynamic> json) {
swich = json['swich'];
... ... @@ -384,6 +464,18 @@ class MarkSignboardModel {
});
}
}
if (json['content'] != null) {
content = [];
if (jsonDecode(json['content']) is List) {
List temp = jsonDecode(json['content']);
temp.forEach((element) {
content.add(ContentModel.fromJson(element));
});
}
}
isIntroduceAll = json['is_introduce_all'];
title = json['title'];
}
Map<String, dynamic> toJson() {
... ... @@ -391,6 +483,9 @@ class MarkSignboardModel {
data['swich'] = this.swich;
data['images'] = this.images;
data['is_introduce_all'] = this.isIntroduceAll;
data['title'] = this.title;
data['content'] = this.content;
return data;
}
}
... ...
... ... @@ -66,12 +66,26 @@ class ReserveImgTextSunModel {
class ContentModel{
String type;
String content;
String duration;
ContentModel({this.type, this.content});
ContentModel({this.type, this.content,
this.duration});
ContentModel.fromJson(Map<String, dynamic> json) {
type = json["type"];
content = json["content"];
duration = json["duration"];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> _data = <String, dynamic>{};
_data["type"] = type;
_data["content"] = content;
_data["duration"] = duration;
return _data;
}
}
\ No newline at end of file
... ...
... ... @@ -22,7 +22,8 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:image_picker/image_picker.dart';
// import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
import 'package:qiniu_flutter_sdk_diox/qiniu_flutter_sdk_diox.dart';
// import 'package:qiniu_flutter_sdk_diox/qiniu_flutter_sdk_diox.dart';
import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
import 'package:wechat_assets_picker/wechat_assets_picker.dart';
import '../online_check/dispose.dart';
import 'package:photo_manager/photo_manager.dart';
... ...
... ... @@ -14,6 +14,7 @@ import 'package:one_key/widgets/system_app_bar.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import '../../models/addition_model.dart';
import '../../models/reserve_img_text.dart';
import '../../models/upload_img_model.dart';
import '../../provider/marketing_center_provider.dart';
... ... @@ -30,25 +31,7 @@ import 'dart:io';
* 预订信息模块设置-自定义图文默认
*/
class AdditionModel {
String content;
String type; // 1图片 2文本
// int order; //顺序
UploadImgModel image;
TextEditingController infoC = TextEditingController();
AdditionModel();
factory AdditionModel.fromJson(Map<String, dynamic> json) => AdditionModel()
..content = json["content"]
..type = json["type"];
// ..order = json['order'];
Map<String, dynamic> toJson() => <String, dynamic>{
"content": content, "type": type,
// 'order': order
};
}
class InvicationAdditionPage extends StatefulWidget {
final String rid;
... ...
... ... @@ -31,7 +31,7 @@ import '../../../../utils/upload_image_util.dart';
import '../../../../widgets/page_exception.dart';
import '../../../../widgets/round_button.dart';
import '../../personnel_type/base_info_personnal_page.dart';
import 'dish_show_page.dart';
import 'dish_show_page_old.dart';
import 'img_picker_invitation_widget.dart';
/***
... ... @@ -39,6 +39,23 @@ import 'img_picker_invitation_widget.dart';
* 预订信息模块
*/
class ChangeModel {
int index; //顺序
UploadImgModel image;
// ChangeModel();
// factory ChangeModel.fromJson(Map<String, dynamic> json) => ChangeModel()
// ..content = json["content"]
// ..type = json["type"];
// // ..order = json['order'];
// Map<String, dynamic> toJson() => <String, dynamic>{
// "content": content, "type": type,
// // 'order': order
// };
}
class BookInfoPage extends StatefulWidget {
BookInfoPage({Key key}) : super(key: key);
... ... @@ -47,8 +64,8 @@ class BookInfoPage extends StatefulWidget {
}
class _BookInfoPageState extends State<BookInfoPage> {
TextEditingController parkingIncoC = TextEditingController();
FocusNode parkingIncoNode = FocusNode();
// TextEditingController parkingIncoC = TextEditingController();
// FocusNode parkingIncoNode = FocusNode();
TextEditingController bookingIncoC = TextEditingController();
FocusNode bookingIncoNode = FocusNode();
... ... @@ -69,7 +86,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
StoreBaseIndoProvider _storeBaseIndoProvider;
bool addManager = false;
bool addParking = false;
// bool addParking = false;
bool addPhone = true;
bool addBookingInfo = false; //预订信息致辞
bool addVoiceInfo = false; //附加语音欢迎致辞
... ... @@ -93,7 +110,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
UploadImageProvider _uploadImageProvider;
List<SmsChangeFieldSunModel> changeFieldData = []; //
List<ChangeModel> data = []; //停车信息图片
// List<ChangeModel> data = []; //停车信息图片
List<String> imgAll = [];
... ... @@ -142,7 +159,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
changeFieldData.add(smsChangeFieldSunModel8);
WidgetsBinding.instance.addPostFrameCallback((_) async {
_initData();
// _initData();
voiceIncoC.text =
'尊敬的贵宾,您好!\n感谢您选择${Provider.of<UserModel>(context, listen: false).user.sellername}!\n您的就餐安排在{预订日期},{餐段},坐席位于{桌位}。预祝您用餐愉快,期待您的光临!';
_getQiniuInfo();
... ... @@ -160,21 +177,21 @@ class _BookInfoPageState extends State<BookInfoPage> {
super.dispose();
}
_initData() {
ChangeModel changeModel = ChangeModel();
changeModel.index = 5;
changeModel.image = _uploadImageProvider.storeImage1;
changeModel.image.process = 0;
changeModel.image.isUpload = false;
data.add(changeModel);
ChangeModel changeModel6 = ChangeModel();
changeModel6.index = 6;
changeModel6.image = _uploadImageProvider.storeImage2;
changeModel6.image.process = 0;
changeModel6.image.isUpload = false;
data.add(changeModel6);
}
// _initData() {
// ChangeModel changeModel = ChangeModel();
// changeModel.index = 5;
// changeModel.image = _uploadImageProvider.storeImage1;
// changeModel.image.process = 0;
// changeModel.image.isUpload = false;
// data.add(changeModel);
// ChangeModel changeModel6 = ChangeModel();
// changeModel6.index = 6;
// changeModel6.image = _uploadImageProvider.storeImage2;
// changeModel6.image.process = 0;
// changeModel6.image.isUpload = false;
// data.add(changeModel6);
// }
///获取七牛云token
///
... ... @@ -217,12 +234,12 @@ class _BookInfoPageState extends State<BookInfoPage> {
marketingCenterProvider.markDataModel.reserve.swichManager == '1'
? true
: false;
addParking =
marketingCenterProvider.markDataModel.reserve.swichPark == '1'
? true
: false;
parkingIncoC.text =
marketingCenterProvider.markDataModel.reserve.parkInfo ?? '';
// addParking =
// marketingCenterProvider.markDataModel.reserve.swichPark == '1'
// ? true
// : false;
// parkingIncoC.text =
// marketingCenterProvider.markDataModel.reserve.parkInfo ?? '';
addBookingInfo =
marketingCenterProvider.markDataModel.reserve.swichBooking == '1'
... ... @@ -247,28 +264,28 @@ class _BookInfoPageState extends State<BookInfoPage> {
marketingCenterProvider.markDataModel.reserve.swichCustomer == '1'
? true
: false;
if (marketingCenterProvider.markDataModel.reserve.parkImages.length >
0) {
if (marketingCenterProvider.markDataModel.reserve.parkImages.length ==
1) {
_uploadImageProvider.storeImage1.qiniuUrl =
marketingCenterProvider.markDataModel.reserve.parkImages[0];
_uploadImageProvider.storeImage1.process = 1;
imgAll.add(_uploadImageProvider.storeImage1.qiniuUrl);
}
if (marketingCenterProvider.markDataModel.reserve.parkImages.length ==
2) {
_uploadImageProvider.storeImage1.qiniuUrl =
marketingCenterProvider.markDataModel.reserve.parkImages[0];
_uploadImageProvider.storeImage1.process = 1;
_uploadImageProvider.storeImage2.qiniuUrl =
marketingCenterProvider.markDataModel.reserve.parkImages[1];
_uploadImageProvider.storeImage2.process = 1;
imgAll.add(_uploadImageProvider.storeImage1.qiniuUrl);
imgAll.add(_uploadImageProvider.storeImage2.qiniuUrl);
}
}
// if (marketingCenterProvider.markDataModel.reserve.parkImages.length >
// 0) {
// if (marketingCenterProvider.markDataModel.reserve.parkImages.length ==
// 1) {
// _uploadImageProvider.storeImage1.qiniuUrl =
// marketingCenterProvider.markDataModel.reserve.parkImages[0];
// _uploadImageProvider.storeImage1.process = 1;
// imgAll.add(_uploadImageProvider.storeImage1.qiniuUrl);
// }
// if (marketingCenterProvider.markDataModel.reserve.parkImages.length ==
// 2) {
// _uploadImageProvider.storeImage1.qiniuUrl =
// marketingCenterProvider.markDataModel.reserve.parkImages[0];
// _uploadImageProvider.storeImage1.process = 1;
// _uploadImageProvider.storeImage2.qiniuUrl =
// marketingCenterProvider.markDataModel.reserve.parkImages[1];
// _uploadImageProvider.storeImage2.process = 1;
// imgAll.add(_uploadImageProvider.storeImage1.qiniuUrl);
// imgAll.add(_uploadImageProvider.storeImage2.qiniuUrl);
// }
// }
_uploadImageProvider.logo.qiniuUrl =
marketingCenterProvider.markDataModel.marketing.logo ?? null;
... ... @@ -1184,100 +1201,100 @@ class _BookInfoPageState extends State<BookInfoPage> {
});
}),
VEmptyView(24),
_item('附加停车信息', select: addParking, onTap: () {
setState(() {
addParking = !addParking;
});
}),
VEmptyView(24),
//输入框
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40)),
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(20)),
alignment: Alignment.topLeft,
decoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border.all(
color: MyColours.color_DBDBDB,
width: ScreenUtil().setWidth(2)),
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(20))),
child: TextField(
controller: parkingIncoC,
focusNode: parkingIncoNode,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
textBaseline: TextBaseline.alphabetic),
textAlignVertical: TextAlignVertical.center,
maxLines: 5,
maxLength: 100,
decoration: InputDecoration(
hintText: "点击录入停车信息,最多38个汉字。",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
contentPadding: EdgeInsets.zero,
border: OutlineInputBorder(
borderSide: BorderSide.none),
),
keyboardType: TextInputType.multiline,
onChanged: (value) {
setState(() {
// currentRemark = value ?? "";
});
}),
),
// _item('附加停车信息', select: addParking, onTap: () {
// setState(() {
// addParking = !addParking;
// });
// }),
// VEmptyView(24),
// //输入框
// Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40)),
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// vertical: ScreenUtil().setWidth(20)),
// alignment: Alignment.topLeft,
// decoration: BoxDecoration(
// color: MyColours.color_ffffff,
// border: Border.all(
// color: MyColours.color_DBDBDB,
// width: ScreenUtil().setWidth(2)),
// borderRadius: BorderRadius.circular(
// ScreenUtil().setWidth(20))),
// child: TextField(
// controller: parkingIncoC,
// focusNode: parkingIncoNode,
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// textBaseline: TextBaseline.alphabetic),
// textAlignVertical: TextAlignVertical.center,
// maxLines: 5,
// maxLength: 100,
// decoration: InputDecoration(
// hintText: "点击录入停车信息,最多38个汉字。",
// hintStyle: TextStyle(
// color: MyColours.color_999999,
// fontSize: ScreenUtil().setSp(28),
// ),
// contentPadding: EdgeInsets.zero,
// border: OutlineInputBorder(
// borderSide: BorderSide.none),
// ),
// keyboardType: TextInputType.multiline,
// onChanged: (value) {
// setState(() {
// // currentRemark = value ?? "";
// });
// }),
// ),
VEmptyView(24),
// VEmptyView(24),
Column(
children: [
for (ChangeModel item in data)
Padding(
padding: EdgeInsets.only(
bottom: w(9), left: w(20), right: w(20)),
child: ImgPickerInvitationWidget(
// scrollController: controller,
model: _uploadImageProvider,
index: item.index,
imageModel: item.image,
height: 190,
callback: () {
if (item.index == 5) {
imgAll.add(_uploadImageProvider
.storeImage1.qiniuUrl);
} else if (item.index == 6) {
imgAll.add(_uploadImageProvider
.storeImage2.qiniuUrl);
}
//完成
},
deleteCallback: () {
item.image.qiniuUrl = null;
item.image.file = null;
item.image.isUpload = false;
item.image.process = 0;
setState(() {});
})),
],
),
VEmptyView(24),
Padding(
padding: EdgeInsets.symmetric(horizontal: w(20)),
child: MyDivider(
double.infinity,
w(0.5),
color: MyColours.color_DBDBDB,
)),
// Column(
// children: [
// for (ChangeModel item in data)
// Padding(
// padding: EdgeInsets.only(
// bottom: w(9), left: w(20), right: w(20)),
// child: ImgPickerInvitationWidget(
// // scrollController: controller,
// model: _uploadImageProvider,
// index: item.index,
// imageModel: item.image,
// height: 190,
// callback: () {
// if (item.index == 5) {
// imgAll.add(_uploadImageProvider
// .storeImage1.qiniuUrl);
// } else if (item.index == 6) {
// imgAll.add(_uploadImageProvider
// .storeImage2.qiniuUrl);
// }
// //完成
// },
// deleteCallback: () {
// item.image.qiniuUrl = null;
// item.image.file = null;
// item.image.isUpload = false;
// item.image.process = 0;
// setState(() {});
// })),
// ],
// ),
// VEmptyView(24),
// Padding(
// padding: EdgeInsets.symmetric(horizontal: w(20)),
// child: MyDivider(
// double.infinity,
// w(0.5),
// color: MyColours.color_DBDBDB,
// )),
VEmptyView(24),
// VEmptyView(24),
_item('附加语音欢迎致辞', select: addVoiceInfo, onTap: () {
setState(() {
addVoiceInfo = !addVoiceInfo;
... ... @@ -1618,18 +1635,18 @@ class _BookInfoPageState extends State<BookInfoPage> {
return false;
}
if (addParking && parkingIncoC.text.trim().length == 0) {
Utils.showToast('请输入停车信息!');
return false;
}
// if (addParking && parkingIncoC.text.trim().length == 0) {
// Utils.showToast('请输入停车信息!');
// return false;
// }
if (addVoiceInfo && voiceIncoC.text.trim().length == 0) {
Utils.showToast('请输入语音欢迎致辞!');
return false;
}
if (addParking && parkingIncoC.text.trim().length == 0) {
Utils.showToast('请输入停车信息!');
return false;
}
// if (addParking && parkingIncoC.text.trim().length == 0) {
// Utils.showToast('请输入停车信息!');
// return false;
// }
if (addFirstImage &&
_uploadImageProvider.firstImage.process < 1 &&
... ... @@ -1647,38 +1664,38 @@ class _BookInfoPageState extends State<BookInfoPage> {
Utils.showToast('正在上传餐厅logo,请稍等!');
return false;
}
if ((_uploadImageProvider.storeImage1.process < 1 &&
_uploadImageProvider.storeImage1.process > 0) ||
(_uploadImageProvider.storeImage2.process < 1 &&
_uploadImageProvider.storeImage2.process > 0)) {
Utils.showToast('正在上传停车信息图片,请稍等!');
return false;
}
// if ((_uploadImageProvider.storeImage1.process < 1 &&
// _uploadImageProvider.storeImage1.process > 0) ||
// (_uploadImageProvider.storeImage2.process < 1 &&
// _uploadImageProvider.storeImage2.process > 0)) {
// Utils.showToast('正在上传停车信息图片,请稍等!');
// return false;
// }
List<String> images = [];
// List<String> images = [];
for (int i = 0; i < data.length; i++) {
ChangeModel imgModel = data[i];
if (imgModel.image.qiniuUrl != null &&
imgModel.image.qiniuUrl != '') {
images.add(imgModel.image.qiniuUrl);
}
}
// for (int i = 0; i < data.length; i++) {
// ChangeModel imgModel = data[i];
// if (imgModel.image.qiniuUrl != null &&
// imgModel.image.qiniuUrl != '') {
// images.add(imgModel.image.qiniuUrl);
// }
// }
//接口
Map reserveData = {
'swich_phone': addPhone ? '1' : '0',
'swich_manager': addManager ? '1' : '0',
'swich_park': addParking ? '1' : '0',
// 'swich_park': addParking ? '1' : '0',
'swich_booking': addBookingInfo ? '1' : '0',
'swich_voice': addVoiceInfo ? '1' : '0',
'park_info': parkingIncoC.text,
// 'park_info': parkingIncoC.text,
'book_info': bookingIncoC.text,
'voice_info': voiceIncoC.text,
'swich_welcome': addWelcome ? '1' : '0',
'swich_slogan': addSlogan ? '1' : '0',
'park_info_images':
images.length > 0 ? json.encode(images) : null,
// 'park_info_images':
// images.length > 0 ? json.encode(images) : null,
'swich_customer': addCutomer ? '1' : '0'
// 'seller_name': sellername,
// 'date': dateValue,
... ... @@ -1755,7 +1772,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
// imgAll和images 比较,挑出不一样的,删除七牛云
List<String> delImgs = [];
delImgs.addAll(images);
// delImgs.addAll(images);
delImgs.add(_uploadImageProvider.firstImage.qiniuUrl);
delImgs.add(_uploadImageProvider.logo.qiniuUrl);
Set<String> difference = Set.from(imgAll)
... ...
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_native_image/flutter_native_image.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:image_picker/image_picker.dart';
import 'package:one_key/utils/video_utils.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import 'package:video_compress/video_compress.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
import '../../../../app.dart';
import '../../../../models/addition_model.dart';
import '../../../../models/reserve_img_text.dart';
import '../../../../models/set_seller_info_model.dart';
import '../../../../models/upload_img_model.dart';
import '../../../../provider/base_info_provider.dart';
import '../../../../provider/marketing_center_provider.dart';
import '../../../../provider/store_base_info_provider.dart';
import '../../../../provider/upload_img_provider.dart';
import '../../../../provider/user_model.dart';
import '../../../../res/colors.dart';
import '../../../../utils/dialog_util.dart';
import '../../../../route/navigator_util.dart';
import '../../../../utils/screen_util.dart';
import '../../../../utils/upload_image_util.dart';
import '../../../../utils/utils.dart';
import '../../../../widgets/MyDivider.dart';
import '../../../../widgets/common_button_flat.dart';
import '../../../../widgets/h_empty_view.dart';
import '../../../../widgets/round_button.dart';
import '../../../../widgets/system_app_bar.dart';
import '../../../online_check/progress.dart';
import 'img_picker_invitation_widget.dart';
import 'package:image_picker/image_picker.dart';
/***
*
*
* 主厨介绍
* 店铺介绍
*/
// class ChangeModel {
// int index; //顺序
// UploadImgModel image;
// // ChangeModel();
// // factory ChangeModel.fromJson(Map<String, dynamic> json) => ChangeModel()
// // ..content = json["content"]
// // ..type = json["type"];
// // // ..order = json['order'];
// // Map<String, dynamic> toJson() => <String, dynamic>{
// // "content": content, "type": type,
// // // 'order': order
// // };
// }
class ChefIntroducePage extends StatefulWidget {
ChefIntroducePage({Key key}) : super(key: key);
... ... @@ -39,34 +70,43 @@ class ChefIntroducePage extends StatefulWidget {
}
class _ChefIntroducePageState extends State<ChefIntroducePage> {
// int currIndex = 0; //样式按钮默认选中第一个
int currIndex = 0; //样式按钮默认选中第一个
// String sellername; //店铺名称
String sellername; //店铺名称
TextEditingController chefIntroduceC = TextEditingController();
FocusNode chefIntroduceNode = FocusNode();
TextEditingController storeIntroduceC = TextEditingController();
FocusNode storeIntroduceNode = FocusNode();
TextEditingController chefNameC = TextEditingController();
FocusNode chefNameNode = FocusNode();
final picker = ImagePicker();
MarketingCenterProvider marketingCenterProvider;
UploadImageProvider _uploadImageProvider;
MarketingCenterProvider _marketingCenterProvider;
bool addChefIntroduce = false;
bool addChefImge = false;
bool addAbove = false;
ScrollController controller = ScrollController();
bool addStoreIntroduce = false; //预订安排通知中附加餐厅文字介绍
// bool addStoreImge = false; //预订安排通知中附加餐厅文字图片
// bool addAbove = false; //餐厅介绍文字显示在第一张图片上
// StoreBaseIndoProvider _baseIndoProvider;
List<AdditionModel> data = [];
List<String> imgAll = [];
TextEditingController titleC = TextEditingController();
FocusNode titleCNode = FocusNode();
final picker = ImagePicker();
Subscription _subscription; //展示压缩进度
bool showCompress = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
// UserModel userModel = Provider.of<UserModel>(context, listen: false);
// sellername = userModel.user.sellername;
// setState(() {});
// _initData();
UserModel userModel = Provider.of<UserModel>(context, listen: false);
sellername = userModel.user.sellername;
setState(() {});
_getQiniuInfo();
await getSellerTemplateConf();
});
... ... @@ -74,10 +114,36 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
@override
void dispose() {
_uploadImageProvider.firstImage = UploadImgModel();
// _uploadImageProvider.chefImage1 = UploadImgModel();
// _uploadImageProvider.chefImage2 = UploadImgModel();
// _uploadImageProvider.chefImage3 = UploadImgModel();
// _uploadImageProvider.chefImage4 = UploadImgModel();
super.dispose();
}
// _initData() {
// ChangeModel changeModel = ChangeModel();
// changeModel.index = 5;
// changeModel.image = _uploadImageProvider.chefImage1;
// data.add(changeModel);
// ChangeModel changeModel6 = ChangeModel();
// changeModel6.index = 6;
// changeModel6.image = _uploadImageProvider.chefImage2;
// data.add(changeModel6);
// ChangeModel changeModel7 = ChangeModel();
// changeModel7.index = 7;
// changeModel7.image = _uploadImageProvider.chefImage3;
// data.add(changeModel7);
// ChangeModel changeModel8 = ChangeModel();
// changeModel8.index = 8;
// changeModel8.image = _uploadImageProvider.chefImage4;
// data.add(changeModel8);
// }
///获取七牛云token
///
_getQiniuInfo() async {
... ... @@ -85,50 +151,1044 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
}
getSellerTemplateConf() async {
bool success =
await _marketingCenterProvider.getSellerTemplateConf(context);
if (success && _marketingCenterProvider.markDataModel.chef != null) {
// currIndex = int.parse(_marketingCenterProvider.markDataModel.chef.style);
bool success = await marketingCenterProvider.getSellerTemplateConf(context);
if (success && marketingCenterProvider.markDataModel.chef != null) {
// currIndex = int.parse(marketingCenterProvider.markDataModel.chef.style);
// _uploadImageProvider.chefImage1.qiniuUrl =
// marketingCenterProvider.markDataModel.chef.images.length > 0
// ? marketingCenterProvider.markDataModel.chef.images[0]
// : null;
// if (_uploadImageProvider.chefImage1.qiniuUrl != null) {
// imgAll.add(_uploadImageProvider.chefImage1.qiniuUrl);
// }
// _uploadImageProvider.chefImage1.process =
// _uploadImageProvider.chefImage1.qiniuUrl != null &&
// _uploadImageProvider.chefImage1.qiniuUrl != ''
// ? 1
// : null;
// _uploadImageProvider.chefImage2.qiniuUrl =
// marketingCenterProvider.markDataModel.chef.images.length > 1
// ? marketingCenterProvider.markDataModel.chef.images[1]
// : null;
// if (_uploadImageProvider.chefImage2.qiniuUrl != null) {
// imgAll.add(_uploadImageProvider.chefImage2.qiniuUrl);
// }
// _uploadImageProvider.chefImage2.process =
// _uploadImageProvider.chefImage2.qiniuUrl != null &&
// _uploadImageProvider.chefImage2.qiniuUrl != ''
// ? 1
// : null;
// _uploadImageProvider.chefImage3.qiniuUrl =
// marketingCenterProvider.markDataModel.chef.images.length > 2
// ? marketingCenterProvider.markDataModel.chef.images[2]
// : null;
// if (_uploadImageProvider.chefImage3.qiniuUrl != null) {
// imgAll.add(_uploadImageProvider.chefImage3.qiniuUrl);
// }
// _uploadImageProvider.chefImage3.process =
// _uploadImageProvider.chefImage3.qiniuUrl != null &&
// _uploadImageProvider.chefImage3.qiniuUrl != ''
// ? 1
// : null;
// _uploadImageProvider.chefImage4.qiniuUrl =
// marketingCenterProvider.markDataModel.chef.images.length > 3
// ? marketingCenterProvider.markDataModel.chef.images[3]
// : null;
// if (_uploadImageProvider.chefImage4.qiniuUrl != null) {
// imgAll.add(_uploadImageProvider.chefImage4.qiniuUrl);
// }
// _uploadImageProvider.chefImage4.process =
// _uploadImageProvider.chefImage4.qiniuUrl != null &&
// _uploadImageProvider.chefImage4.qiniuUrl != ''
// ? 1
// : null;
if (marketingCenterProvider.markDataModel.chef.content == null) {
//以前么有设置过,默认值
titleC.text = '主厨介绍';
if (marketingCenterProvider.markDataModel.chef.introduce
.trim()
.length >
0) {
//文字
AdditionModel additionModel = AdditionModel();
additionModel.content =
marketingCenterProvider.markDataModel.chef.introduce;
additionModel.infoC.text =
marketingCenterProvider.markDataModel.chef.introduce;
additionModel.type = '2';
data.add(additionModel);
}
if (marketingCenterProvider.markDataModel.chef.image != null &&marketingCenterProvider.markDataModel.chef.image.length > 0) {
//设置过图片
for (int i = 0;
i < marketingCenterProvider.markDataModel.chef.image.length;
i++) {
String imageUrl =
marketingCenterProvider.markDataModel.chef.image[i];
AdditionModel additionModel = AdditionModel();
additionModel.content = imageUrl;
additionModel.type = '1';
additionModel.image = UploadImgModel();
additionModel.image.process = 1;
additionModel.image.qiniuUrl = imageUrl;
data.add(additionModel);
imgAll.add(imageUrl);
}
}
} else {
addStoreIntroduce =
marketingCenterProvider.markDataModel.chef.isIntroduceAll == '1'
? true
: false;
titleC.text = marketingCenterProvider.markDataModel.chef.title;
for (int i = 0;
i < marketingCenterProvider.markDataModel.chef.content.length;
i++) {
ContentModel contentModel =
marketingCenterProvider.markDataModel.chef.content[i];
if (contentModel.type == '1') {
//图片
AdditionModel additionModel = AdditionModel();
additionModel.content = contentModel.content;
additionModel.type = '1';
additionModel.image = UploadImgModel();
additionModel.image.process = 1;
additionModel.image.qiniuUrl = contentModel.content;
data.add(additionModel);
imgAll.add(contentModel.content);
} else if (contentModel.type == '2') {
//文本
AdditionModel additionModel = AdditionModel();
additionModel.content = contentModel.content;
additionModel.infoC.text = contentModel.content;
additionModel.type = contentModel.type;
_uploadImageProvider.firstImage.qiniuUrl =
_marketingCenterProvider.markDataModel.chef.image ?? null;
data.add(additionModel);
} else {
//视频
AdditionModel additionModel = AdditionModel();
String thumbnailPathString =
await VideoUtils.getThumbnailFile(contentModel.content);
File thumbnailPath = File(thumbnailPathString); //封面
additionModel.content = contentModel.content;
additionModel.type = '3';
if (_uploadImageProvider.firstImage.qiniuUrl != null) {
imgAll.add(_uploadImageProvider.firstImage.qiniuUrl);
additionModel.image = UploadImgModel();
additionModel.image.process = 1;
additionModel.image.duration = contentModel.duration;
additionModel.image.thumbnailPath = thumbnailPath;
additionModel.image.qiniuUrl = contentModel.content;
data.add(additionModel);
imgAll.add(contentModel.content);
}
}
}
}
_uploadImageProvider.firstImage.process =
_uploadImageProvider.firstImage.qiniuUrl != null &&
_uploadImageProvider.firstImage.qiniuUrl != ''
? 1
: null;
chefNameC.text = _marketingCenterProvider.markDataModel.chef.chefName;
chefIntroduceC.text =
_marketingCenterProvider.markDataModel.chef.introduce;
addChefIntroduce =
_marketingCenterProvider.markDataModel.chef.isIntroduce == '1'
? true
: false;
addChefImge = _marketingCenterProvider.markDataModel.chef.isImages == '1'
? true
: false;
addAbove = _marketingCenterProvider.markDataModel.chef.isAbove == '1'
? true
: false;
// addStoreImge = marketingCenterProvider.markDataModel.chef.isImages == '1'
// ? true
// : false;
// addAbove = marketingCenterProvider.markDataModel.chef.isAbove == '1'
// ? true
// : false;
setState(() {});
setState(() {});
}
///图文合并,图文分开,无文字
// Widget _selectBtnWidget() {
// return Container(
// decoration: BoxDecoration(
// border: Border(
// bottom:
// BorderSide(color: MyColours.color_E7E7E7, width: w(0.5)))),
// margin: EdgeInsets.only(left: w(16)),
// padding: EdgeInsets.only(top: w(12), bottom: w(12), right: w(16)),
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Text(
// '附加餐厅介绍',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setWidth(32)),
// ),
// Container(
// height: ScreenUtil().setWidth(74),
// decoration: BoxDecoration(
// color: Color.fromRGBO(232, 232, 232, 1),
// borderRadius: BorderRadius.circular(
// r(11),
// ),
// // border: Border.all(
// // width: w(1), color: MyColours.color_438E93),
// ),
// child: Row(
// // mainAxisAlignment: MainAxisAlignment.spaceEvenly,
// // crossAxisAlignment: CrossAxisAlignment.center,
// children: <Widget>[
// CommonButtonFlat(
// content: "无文字",
// state: currIndex == 0 ? 1 : 0,
// fontSize: 28,
// right: false,
// width: w(52),
// onPress: () {
// if (currIndex == 0) return;
// setState(() {
// currIndex = 0;
// });
// },
// ),
// currIndex == 2
// ? MyDivider(
// ScreenUtil().setWidth(4),
// ScreenUtil().setWidth(46),
// color: MyColours.color_dfdfdf,
// )
// : SizedBox(),
// CommonButtonFlat(
// content: "图文合并",
// state: currIndex == 1 ? 1 : 0,
// fontSize: 28,
// width: w(66),
// left: false,
// right: false,
// onPress: () {
// if (currIndex == 1) return;
// setState(() {
// currIndex = 1;
// });
// },
// ),
// currIndex == 0
// ? MyDivider(
// ScreenUtil().setWidth(4),
// ScreenUtil().setWidth(46),
// color: MyColours.color_dfdfdf,
// )
// : SizedBox(),
// Container(
// child: CommonButtonFlat(
// content: "图文分开",
// left: false,
// state: currIndex == 2 ? 1 : 0,
// fontSize: 28,
// width: w(66),
// onPress: () {
// if (currIndex == 2) return;
// setState(() {
// currIndex = 2;
// });
// },
// )),
// ],
// ),
// ),
// ],
// ));
// }
// Widget _introduceWidget(EdgeInsets edgeInsets,
// {double width = double.infinity,
// Color textColor = MyColours.color_515151,
// Color hintColor = MyColours.color_999999,
// BoxDecoration boxDecoration}) {
// return Container(
// width: width,
// alignment: Alignment.centerLeft,
// padding: edgeInsets,
// decoration: boxDecoration,
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
// 'Introduce',
// style: TextStyle(color: MyColours.color_B39437, fontSize: font(14)),
// ),
// Text(
// '品牌介绍',
// style: TextStyle(color: MyColours.color_B39437, fontSize: font(14)),
// ),
// VEmptyView(16),
// Text(
// '${sellername}',
// style: TextStyle(color: textColor, fontSize: font(14)),
// ),
// VEmptyView(32),
// Container(
// width: double.infinity,
// // margin: EdgeInsets.symmetric(horizontal: w(10)),
// // padding: EdgeInsets.symmetric(horizontal: w(6)),
// decoration: BoxDecoration(
// border: Border(
// left: BorderSide(
// width: w(2), color: MyColours.color_EEAE74))),
// child: Container(
// width: double.infinity,
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(12),
// ),
// alignment: Alignment.topLeft,
// child: TextField(
// textAlign: TextAlign.left,
// controller: storeIntroduceC,
// focusNode: storeIntroduceNode,
// style: TextStyle(
// height: 2,
// color: textColor,
// fontSize: ScreenUtil().setSp(20),
// textBaseline: TextBaseline.alphabetic),
// textAlignVertical: TextAlignVertical.center,
// maxLines: 7,
// decoration: InputDecoration(
// hintText: "点这里录入餐厅介绍文字",
// hintStyle: TextStyle(
// color: hintColor,
// fontSize: ScreenUtil().setSp(20),
// ),
// contentPadding: EdgeInsets.zero,
// border: OutlineInputBorder(borderSide: BorderSide.none),
// ),
// keyboardType: TextInputType.multiline,
// textInputAction: TextInputAction.newline,
// onChanged: (value) {
// setState(() {
// // currentRemark = value ?? "";
// });
// }),
// )),
// ],
// ),
// );
// }
// ///无文字
// Widget _noTextWidget() {
// return Column(
// children: [
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 5,
// imageModel: _uploadImageProvider.chefImage1,
// deleteCallback: () {
// _uploadImageProvider.chefImage1.qiniuUrl = null;
// _uploadImageProvider.chefImage1.file = null;
// _uploadImageProvider.chefImage1.isUpload = false;
// _uploadImageProvider.chefImage1.process = 0;
// setState(() {});
// }),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 6,
// imageModel: _uploadImageProvider.chefImage2,
// deleteCallback: () {
// _uploadImageProvider.chefImage2.qiniuUrl = null;
// _uploadImageProvider.chefImage2.file = null;
// _uploadImageProvider.chefImage2.isUpload = false;
// _uploadImageProvider.chefImage2.process = 0;
// setState(() {});
// }),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 7,
// imageModel: _uploadImageProvider.chefImage3,
// deleteCallback: () {
// _uploadImageProvider.chefImage3.qiniuUrl = null;
// _uploadImageProvider.chefImage3.file = null;
// _uploadImageProvider.chefImage3.isUpload = false;
// _uploadImageProvider.chefImage3.process = 0;
// setState(() {});
// }),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// model: _uploadImageProvider,
// index: 8,
// uploadType: UploadType.InvitationStoreType,
// imageModel: _uploadImageProvider.chefImage4,
// deleteCallback: () {
// _uploadImageProvider.chefImage4.qiniuUrl = null;
// _uploadImageProvider.chefImage4.file = null;
// _uploadImageProvider.chefImage4.isUpload = false;
// _uploadImageProvider.chefImage4.process = 0;
// setState(() {});
// }),
// ],
// );
// }
///图文合并
// Widget _mergingWidget() {
// Color themColor = MyColours.color_0C0F0E;
// int colorValue = null;
// if (marketingCenterProvider.markDataModel.home != null &&
// marketingCenterProvider.markDataModel.home.themeColor != null) {
// colorValue =
// int.parse(marketingCenterProvider.markDataModel.home.themeColor);
// }
// if (colorValue != null) {
// themColor = Color(colorValue);
// }
// return Column(
// children: [
// Stack(
// children: [
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 5,
// padding: EdgeInsets.only(left: w(160)),
// imageModel: _uploadImageProvider.chefImage1),
// Positioned(
// child: _introduceWidget(
// EdgeInsets.only(
// left: w(15), top: w(23), right: w(7), bottom: w(42)),
// textColor: MyColours.color_ffffff,
// hintColor: MyColours.color_ffffff,
// boxDecoration: BoxDecoration(
// gradient: LinearGradient(
// stops: [0, 1],
// begin: Alignment.topCenter,
// end: Alignment.bottomCenter,
// colors: [
// themColor,
// MyColours.color_4D0C0F0E,
// ],
// ),
// )),
// width: w(160),
// ),
// ],
// ),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 6,
// imageModel: _uploadImageProvider.chefImage2),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 7,
// imageModel: _uploadImageProvider.chefImage3),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 8,
// imageModel: _uploadImageProvider.chefImage4),
// ],
// );
// }
/**
///图文分开
Widget _separateWidget() {
return ReorderableListView(
shrinkWrap: true,
scrollController: controller,
children: <Widget>[
// _introduceWidget(EdgeInsets.all(w(15)),
// boxDecoration: BoxDecoration(color: MyColours.color_ffffff)),
// VEmptyView(18),
for (ChangeModel item in data)
Container(
key: ValueKey(item),
child: Padding(
padding:
EdgeInsets.only(bottom: item.index != 8 ? w(9) : 0),
child: ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: item.index,
imageModel: item.image,
callback: () {
//完成
if (item.index == 5) {
imgAll
.add(_uploadImageProvider.chefImage1.qiniuUrl);
} else if (item.index == 6) {
imgAll
.add(_uploadImageProvider.chefImage2.qiniuUrl);
} else if (item.index == 7) {
imgAll
.add(_uploadImageProvider.chefImage3.qiniuUrl);
} else if (item.index == 8) {
imgAll
.add(_uploadImageProvider.chefImage4.qiniuUrl);
}
},
deleteCallback: () {
item.image.qiniuUrl = null;
item.image.file = null;
item.image.isUpload = false;
item.image.process = 0.01;
setState(() {});
}))),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 6,
// imageModel: _uploadImageProvider.chefImage2,
// deleteCallback: () {
// _uploadImageProvider.chefImage2.qiniuUrl = null;
// _uploadImageProvider.chefImage2.file = null;
// _uploadImageProvider.chefImage2.isUpload = false;
// _uploadImageProvider.chefImage2.process = 0.01;
// setState(() {});
// }),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 7,
// imageModel: _uploadImageProvider.chefImage3,
// deleteCallback: () {
// _uploadImageProvider.chefImage3.qiniuUrl = null;
// _uploadImageProvider.chefImage3.file = null;
// _uploadImageProvider.chefImage3.isUpload = false;
// _uploadImageProvider.chefImage3.process = 0.01;
// setState(() {});
// }),
// VEmptyView(18),
// ImgPickerInvitationWidget(
// scrollController: controller,
// uploadType: UploadType.InvitationStoreType,
// model: _uploadImageProvider,
// index: 8,
// imageModel: _uploadImageProvider.chefImage4,
// deleteCallback: () {
// _uploadImageProvider.chefImage4.qiniuUrl = null;
// _uploadImageProvider.chefImage4.file = null;
// _uploadImageProvider.chefImage4.isUpload = false;
// _uploadImageProvider.chefImage4.process = 0.01;
// setState(() {});
// }),
],
onReorder: (int oldIndex, int newIndex) async {
if (oldIndex < newIndex) {
newIndex -= 1;
}
// var childold = tableManagerModel.areas[oldIndex];
// Map<String, String> params = {
// 'sid': Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// 'regionid': childold.rid,
// 'order_o': tableManagerModel.areas[newIndex].orderId,
// 'sort': oldIndex < newIndex ? '2' : '1'
// };
var child = data.removeAt(oldIndex);
data.insert(newIndex, child);
setState(() {});
// await tableManagerModel.sortByRegion(context, params);
// //刷新前一页数据
// bus.emit('refresh_table_area');
});
}
*/
///输入框
Widget _textfield(String title, String hintText,
TextEditingController controller, FocusNode focusNode,
{TextInputType textInputType = TextInputType.text}) {
return Container(
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(color: MyColours.color_E7E7E7, width: w(0.5)))),
margin: EdgeInsets.only(left: w(16)),
padding: EdgeInsets.only(top: w(12), bottom: w(4), right: w(16)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
height: w(48),
alignment: Alignment.center,
child: Text(
title,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32)),
),
),
HEmptyView(80),
Expanded(
// width: ScreenUtil().setWidth(231 * 2),
child: Container(
// height: w(54),
child: TextField(
controller: controller,
textAlign: TextAlign.right,
textAlignVertical: TextAlignVertical.bottom,
maxLines: 1,
// //光标颜色
// cursorColor:
// widget.isSelect ? Colors.white : MyColours.color_199095,
//输入文本的样式
inputFormatters: title == '标题名称'
? [LengthLimitingTextInputFormatter(15)]
: [],
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
focusNode: focusNode,
decoration: InputDecoration(
isCollapsed: true, //重点,相当于高度包裹的意思,必须设置为true,不然有默认奇妙的最小高度
border: OutlineInputBorder(borderSide: BorderSide.none),
hintText: hintText,
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(32),
),
enabledBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
focusedBorder: new UnderlineInputBorder(
borderSide: BorderSide.none,
),
),
onChanged: (value) {},
onEditingComplete: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
keyboardType: textInputType),
)),
// HEmptyView(32)
],
),
);
}
Widget _item(String title, {bool select, GestureTapCallback onTap}) {
return InkWell(
onTap: onTap,
child: Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: MyColours.color_E7E7E7, width: w(0.5)))),
margin: EdgeInsets.only(left: w(16)),
padding: EdgeInsets.only(top: w(12), bottom: w(12), right: w(16)),
child: Row(
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setWidth(32)),
),
Spacer(),
Container(
padding:
EdgeInsets.symmetric(horizontal: w(7), vertical: w(4)),
child: Image.asset(
Utils.getImgPath(select ? 'swich_on' : 'swich_off'),
width: w(44),
),
)
],
)));
}
/// 修改店铺基本信息
// _setSellerInfoById(String text) async {
// Map<String, dynamic> params = {
// 'id': Provider.of<UserModel>(context, listen: false).user.sellerid,
// };
// params['sellerdesc'] = text;
// FormData formData = FormData.fromMap(params);
// SetSellerInfoSunModel sunModel =
// await _baseIndoProvider.setSellerInfoById(context, formData);
// if (sunModel != null) {
// //修改成功
// // Utils.showToast('保存店铺信息成功');
// // EventBus().emit('changeStatusColor');
// } else {
// // Utils.showToast('保存失败');
// }
// }
List<Widget> _scrolleWidget() {
List<Widget> temp = [];
for (AdditionModel item in data) {
if (item.type == '1') {
//图片
if (item.image.qiniuUrl == null && item.image.file == null) {
} else {
temp.add(Container(
key: ValueKey(item),
margin: EdgeInsets.only(bottom: w(12)),
child: InkWell(
onTap: () {
// double process;
// String qiniuUrl;
// List<String> tempList = [];
// // if (title == '头像') {
// process = item.image.process;
// qiniuUrl = item.image.qiniuUrl;
// // } else {
// // process = _uploadImageProvider.erweima.process;
// // qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// // }
// if (qiniuUrl != null &&
// qiniuUrl != '') {
// // tempList.add(qiniuUrl);
// // ///没有上传完成的不可以点击
// // _showPhotoView(context, 0, tempList);
// // _uploadImageProvider.firstImage.qiniuUrl = null;
// // _uploadImageProvider.firstImage.process = 0;
// // setState(() {});
// _openModalBottomSheet(context);
// // Utils.getPickPermission(context, () {
// // _getFromPictureOrCamera(
// // _uploadImageProvider.firstImage,
// // ImageSource.gallery);
// // },
// // Platform.isAndroid
// // ? Permission.storage
// // : Permission.photos);
// }
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Stack(clipBehavior: Clip.none, children: [
item.image.qiniuUrl != null && item.image.qiniuUrl != ''
? Image.network(
item.image.qiniuUrl,
fit: BoxFit.contain,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(
// _uploadImageProvider
// .imgSizefirstImage *
// 2),
)
: Image.file(
item.image.file,
fit: BoxFit.contain,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(
// _uploadImageProvider
// .imgSizefirstImage *
// 2),
),
Positioned(
left: 0,
top: 0,
child: (item.image.file != null) &&
item.image.process != 1 &&
item.image.process != 0.01
? Container(
width: ScreenUtil().screenWidth,
height:
w(_uploadImageProvider.imgSizefirstImage),
color: MyColours.color_4D000000,
child: Center(
child: Text('上传中',
style: TextStyle(
color: MyColours.color_F8F9FD)),
),
)
: Container()),
]),
// item.image.process == 1
// ? Container(
// width: w(150),
// height: w(30),
// color: MyColours.color_4D000000,
// alignment: Alignment.center,
// child: Text(
// '点击图片可以更换',
// style: TextStyle(
// color: MyColours
// .color_F8F9FD,
// fontSize: font(14),
// fontWeight:
// FontWeight.bold),
// ))
// : SizedBox(),
item.image.process == 1
? Positioned(
top: 0,
right: 0,
child: InkWell(
onTap: () {
data.remove(item);
setState(() {});
},
child: Container(
width: w(20),
height: w(20),
color: Colors.transparent,
alignment: Alignment.center,
child: Image.asset(
Utils.getImgPath('delete')))))
: SizedBox(),
]))));
}
} else if (item.type == '2') {
//文本
temp.add(Container(
key: ValueKey(item),
decoration: BoxDecoration(
border: Border.all(width: w(1), color: MyColours.color_DBDBDB)),
// child: Text(item.content),
// color: Colors.red,
child: Stack(
children: [
Container(
// height: w(152),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(5)),
border: Border.all(
width: w(1), color: MyColours.color_DBDBDB)),
margin: EdgeInsets.only(
left: w(10), top: w(10), bottom: w(10), right: w(60)),
padding: EdgeInsets.only(
top: w(16), bottom: w(16), left: w(14), right: w(10)),
child: TextField(
controller: item.infoC,
// textAlign: TextAlign.right,
// focusNode: _cusdemNode,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
// textBaseline: TextBaseline.alphabetic
),
// textAlignVertical: TextAlignVertical.center,
maxLines: 5,
maxLength: 200,
// inputFormatters: [
// LengthLimitingTextInputFormatter(10), // 设置输入长度限制
// ],
decoration: InputDecoration(
hintText: "点击录入文字",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
contentPadding: EdgeInsets.zero,
border: OutlineInputBorder(borderSide: BorderSide.none),
),
keyboardType: TextInputType.multiline,
onChanged: (value) {
item.content = value;
})),
Positioned(
top: w(10),
right: w(10),
child: InkWell(
onTap: () {
data.remove(item);
setState(() {});
},
child: Container(
width: w(20),
height: w(20),
color: Colors.transparent,
alignment: Alignment.center,
child: Image.asset(Utils.getImgPath('delete')))))
],
),
));
} else {
//视频
if (item.image.qiniuUrl == null && item.image.file == null) {
} else {
temp.add(Container(
key: ValueKey(item),
margin: EdgeInsets.only(bottom: w(12)),
child: InkWell(
onTap: () {
if (item.image.process == 1) {
NavigatorUtil.goPlayVideoPage(context,
urlStr: item.image.qiniuUrl);
}
},
child: Stack(alignment: Alignment.bottomRight, children: [
Stack(
alignment: Alignment.center,
children: [
Stack(
alignment: Alignment.topRight,
children: [
Image.file(
item.image.thumbnailPath,
fit: BoxFit.contain,
width: double.infinity,
)
// : FutureBuilder(
// //显示缩略图
// future: _initializeVideoPlayerFuture,
// builder: (context, snapshot) {
// print(snapshot.connectionState);
// if (snapshot.hasError)
// print(snapshot.error);
// if (snapshot.connectionState ==
// ConnectionState.done) {
// return Container(
// // width: ScreenUtil().setWidth(225),
// child: AspectRatio(
// aspectRatio: 1 / 1,
// // aspectRatio: _controller.value.aspectRatio,
// child: VideoPlayer(_controller),
// ),
// );
// } else {
// return Center(
// child: CircularProgressIndicator(),
// );
// }
// },
// ),
,
Offstage(
offstage: item.image.process < 1,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
),
onTap: () {
//点击删除按钮
data.remove(item);
setState(() {});
// setState(() {
// widget.model.imageListDenvironment
// .removeWhere((element) =>
// element ==
// widget.model
// .imageListDenvironment[
// index]);
// widget.model.imageQiniuUrlList
// .removeWhere((element) =>
// element ==
// widget.model
// .imageQiniuUrlList[index]);
// });
},
),
),
],
),
// Offstage(
// offstage: widget.model.imageListDenvironment[index].process == 1,
// child: Progress(widget.model.imageListDenvironment[index].process),
// ),
showCompress
? Container(
width: ScreenUtil().setWidth(90.0 * 2),
height: ScreenUtil().setWidth(90.0 * 2),
decoration: BoxDecoration(
color: Color.fromRGBO(0, 0, 0, 0.5),
borderRadius: BorderRadius.circular(r(5))),
child: Center(
child: Text('压缩中...',
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_fefefe)),
))
: item.image.process == 1
? Align(
alignment: Alignment.center,
child: Image.asset(
Utils.getImgPath('play'),
width: ScreenUtil().setWidth(60),
))
: Progress(
item.image.process,
size: 90.0,
),
],
),
Align(
alignment: Alignment.bottomRight,
child: Padding(
padding: EdgeInsets.only(
bottom: ScreenUtil().setWidth(10),
right: ScreenUtil().setWidth(10)),
child: Text(
item.image.duration,
style: TextStyle(
color: MyColours.color_fefefe,
fontSize: ScreenUtil().setSp(24)),
)),
)
]))));
}
}
}
return temp;
}
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
Future _getFromPictureOrCamera(int index, imageSource) async {
final pickedFile = await picker.pickImage(source: imageSource);
if (pickedFile != null) {
UploadImgModel uploadImgModel = UploadImgModel(); //图
_uploadImageProvider.setDynamicValue('${data.length}', uploadImgModel);
AdditionModel additionModel = AdditionModel();
// additionModel.content = imgModel.qiniuUrl;
additionModel.type = '1';
// additionModel.order = data.length;
additionModel.image = uploadImgModel;
// additionModel.image.process = 1;
// additionModel.image.qiniuUrl =
// 'https://inews.gtimg.com/om_bt/OGlQWfsaAoKkuCcMZ2o9IVEPqd-72DQy5EAN02XBHUwfYAA/641';
data.add(additionModel);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
UploadImgModel imgModel =
_uploadImageProvider.getDynamicValue('${index}');
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -143,23 +1203,38 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
// _uploadImageProvider.touxiang.qiniuUrl = null;
// } else {
// _uploadImageProvider.imgSizeErweima = 76;
_uploadImageProvider.firstImage.qiniuUrl = null;
imgModel.qiniuUrl = null;
// }
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil()
.startUploadOnly(context, file, 4, true, _uploadImageProvider, () {
imgAll.add(_uploadImageProvider.firstImage.qiniuUrl);
UploadImageUtil().startUploadOnlyAddition(
context, file, index, true, _uploadImageProvider, () {
UploadImgModel imgModel =
_uploadImageProvider.getDynamicValue('${index}');
AdditionModel additionModel = AdditionModel();
additionModel.content = imgModel.qiniuUrl;
additionModel.type = '1';
// additionModel.order = index;
additionModel.image = imgModel;
// additionModel.image.process = 1;
// additionModel.image.qiniuUrl =
// 'https://inews.gtimg.com/om_bt/OGlQWfsaAoKkuCcMZ2o9IVEPqd-72DQy5EAN02XBHUwfYAA/641';
data[index] = additionModel;
imgAll.add(imgModel.qiniuUrl);
setState(() {});
});
}
}
}
///添加图片UI弹出
Future _openModalBottomSheet(context) async {
Future _openModalBottomSheet(context, int index,
{FileType fileType = FileType.image}) async {
final option = await showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
... ... @@ -177,15 +1252,12 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
children: <Widget>[
InkWell(
onTap: () {
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage, ImageSource.camera);
// Navigator.pop(context);
// }, Permission.camera);
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
_uploadImageProvider.firstImage, ImageSource.camera);
if (fileType == FileType.image) {
_getFromPictureOrCamera(index, ImageSource.camera);
} else {
_getVideoFromPictureOrCamera(ImageSource.camera);
}
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
... ... @@ -193,6 +1265,17 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
Platform.isAndroid
? Permission.storage
: Permission.photos);
// Utils.getPickPermission(context, () {
// if (fileType == FileType.image) {
// _getImageFromPictureOrCamera(ImageSource.camera);
// } else {
// _getVideoFromPictureOrCamera(ImageSource.camera);
// }
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// }, Permission.camera);
},
child: Container(
width: double.infinity,
... ... @@ -223,9 +1306,13 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
_uploadImageProvider.firstImage, ImageSource.gallery);
if (fileType == FileType.image) {
_getFromPictureOrCamera(index, ImageSource.gallery);
} else {
_getVideoFromPictureOrCamera(ImageSource.gallery);
}
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
... ... @@ -233,6 +1320,22 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
Platform.isAndroid
? Permission.storage
: Permission.photos);
// Utils.getPickPermission(context, () {
// if (fileType == FileType.image) {
// pickAsset(RequestType.image);
// } else {
// _getVideoFromPictureOrCamera(ImageSource.gallery);
// }
// // //
// // _getFromPictureOrCamera(ImageSource.gallery);
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
},
child: Container(
width: double.infinity,
... ... @@ -276,244 +1379,101 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
});
}
Widget _uploadImage({EdgeInsets padding = EdgeInsets.zero}) {
return _uploadImageProvider.firstImage.file != null ||
(_uploadImageProvider.firstImage.qiniuUrl != null &&
_uploadImageProvider.firstImage.qiniuUrl != '')
? InkWell(
onTap: () {
double process;
String qiniuUrl;
List<String> tempList = [];
// if (title == '头像') {
process = _uploadImageProvider.firstImage.process;
qiniuUrl = _uploadImageProvider.firstImage.qiniuUrl;
// } else {
// process = _uploadImageProvider.erweima.process;
// qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// }
if (qiniuUrl != null && qiniuUrl != '') {
// tempList.add(qiniuUrl);
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
// _uploadImageProvider.firstImage.qiniuUrl = null;
// _uploadImageProvider.firstImage.process = 0;
// setState(() {});
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage,
// ImageSource.gallery);
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
}
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Stack(clipBehavior: Clip.none, children: [
_uploadImageProvider.firstImage.qiniuUrl != null &&
_uploadImageProvider.firstImage.qiniuUrl != ''
? Center(
child: Image.network(
_uploadImageProvider.firstImage.qiniuUrl,
fit: BoxFit.contain,
// width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(
// _uploadImageProvider.imgSizefirstImage * 2),
))
: Center(
child: Image.file(
_uploadImageProvider.firstImage.file,
fit: BoxFit.contain,
// width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
// height: ScreenUtil().setWidth(
// _uploadImageProvider.imgSizefirstImage * 2),
)),
Positioned(
left: 0,
top: 0,
right: padding.right,
child: (_uploadImageProvider.firstImage.file != null) &&
_uploadImageProvider.firstImage.process != 1 &&
_uploadImageProvider.firstImage.process != 0.01
? Container(
width: ScreenUtil().screenWidth,
height: w(_uploadImageProvider.imgSizefirstImage),
color: MyColours.color_4D000000,
child: Center(
child: Text('上传中',
style:
TextStyle(color: MyColours.color_F8F9FD)),
),
)
: Container()),
if (_uploadImageProvider.firstImage.process == 1)
Positioned(
top: 0,
right: 0,
child: GestureDetector(
child: Image.asset(
Utils.getImgPath("delete"),
width: ScreenUtil().setWidth(40),
height: ScreenUtil().setWidth(40),
),
onTap: () {
//已经传到服务器,弹提醒窗口,是否删除
//修改之前有内容,则弹框
DialogUtil.cupertinoAlertDialog(context,
title: "", content: "是否确定删除该照片?", lCallback: () {
print("取消");
}, rCallback: () {
_uploadImageProvider.firstImage.qiniuUrl = null;
_uploadImageProvider.firstImage.file = null;
_uploadImageProvider.firstImage.isUpload = false;
_uploadImageProvider.firstImage.process = 0.01;
setState(() {});
});
},
))
]),
_uploadImageProvider.firstImage.process == 1
? Container(
width: w(150),
height: w(30),
color: MyColours.color_4D000000,
alignment: Alignment.center,
margin: padding,
child: Text(
'点击图片可以更换',
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: font(14),
fontWeight: FontWeight.bold),
))
: SizedBox(),
]))
: InkWell(
onTap: () {
// double process;
// String qiniuUrl;
// List<String> tempList = [];
// if (title == '头像') {
// process = _uploadImageProvider.touxiang.process;
// qiniuUrl = _uploadImageProvider.touxiang.qiniuUrl;
// } else {
// process = _uploadImageProvider.erweima.process;
// qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// }
// if (qiniuUrl != null && qiniuUrl != '') {
// tempList.add(qiniuUrl);
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
// } else {
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage, ImageSource.gallery);
// }, Platform.isAndroid ? Permission.storage : Permission.photos);
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context);
},
child: Container(
color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(_uploadImageProvider.imgSizefirstImage),
margin: padding,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
// VEmptyView(80),
Image.asset(
Utils.getImgPath('add_img'),
width: w(63),
),
VEmptyView(28),
Container(
width: w(139),
height: w(60),
child: Text(
'点击上传照片\n为了更好的效果\n建议上传4:3照片',
textAlign: TextAlign.center,
style: TextStyle(
height: 1.4,
color: MyColours.color_ffffff,
fontSize: font(14),
fontWeight: FontWeight.bold),
))
],
),
));
}
///无介绍
Widget _noTextWidget() {
return SizedBox();
// return Column(
// children: [
// _uploadImage(),
// VEmptyView(18),
// ],
// );
}
///图文分开
Widget _separateWidget() {
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
// _introduceWidget(EdgeInsets.all(w(15)),
// boxDecoration: BoxDecoration(color: MyColours.color_ffffff)),
// VEmptyView(18),
_uploadImage(),
]);
}
///视频
Future _getVideoFromPictureOrCamera(ImageSource imageSource) async {
final pickedFile = await picker.pickVideo(
source: imageSource, maxDuration: const Duration(minutes: 2));
if (pickedFile != null) {
int key = data.length; //上传变量key
// String ddd = Utils.getPicSuffix(pickedFile.path); //获取后缀MP4
// print(ddd);
await VideoCompress.setLogLevel(0);
final info = await VideoCompress.getMediaInfo(
pickedFile.path); //视频信息:时长、像素(宽高)、大小、path
String duration = '00:00';
if (info != null) {
//限制视频时长
if (info.duration > 30000 || info.duration < 0) {
Utils.showToast('请选择30秒以内的视频');
return;
}
duration = VideoUtils.getDuration(
info.duration,
); //转化视频时长单位(00:13、 02:00)
}
UploadImgModel uploadImgModel = UploadImgModel(); //图
_uploadImageProvider.setDynamicValue('${key}', uploadImgModel);
Widget _item(String title, {bool select, GestureTapCallback onTap}) {
return InkWell(
onTap: onTap,
child: Container(
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
color: MyColours.color_E7E7E7, width: w(0.5)))),
margin: EdgeInsets.only(left: w(16)),
padding: EdgeInsets.only(top: w(12), bottom: w(12), right: w(16)),
child: Row(
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setWidth(32)),
),
Spacer(),
Container(
padding:
EdgeInsets.symmetric(horizontal: w(7), vertical: w(4)),
child: Image.asset(
Utils.getImgPath(select ? 'swich_on' : 'swich_off'),
width: w(44),
),
)
],
)));
AdditionModel additionModel = AdditionModel();
additionModel.type = '3';
additionModel.image = uploadImgModel;
data.add(additionModel);
//获取视频封面图
String thumbnailPathString =
await VideoUtils.getThumbnailFile(pickedFile.path);
File thumbnailPath = File(thumbnailPathString);
//视频数据赋值:封面、时长、类型、进度、path
UploadImgModel imgModel = _uploadImageProvider.getDynamicValue('${key}');
setState(() {
imgModel.file = File(pickedFile.path);
imgModel.process = 0.01;
imgModel.fileType = FileType.video;
imgModel.thumbnailPath = thumbnailPath;
imgModel.duration = duration;
imgModel.qiniuUrl = null;
});
//上传文件准备
File file = File(pickedFile.path);
//是否需要压缩
bool need = await VideoUtils.shouldCompress(pickedFile.path);
if (need) {
showCompress = true;
setState(() {});
//需要压缩
// 订阅压缩进度
_subscription = VideoCompress.compressProgress$.subscribe((progress) {
debugPrint('progress: $progress');
if (progress.toInt() == 100) {
//压缩完成
showCompress = false;
_subscription.unsubscribe(); // 取消订阅
setState(() {});
}
// 回调进度给外部
// if (onProgress != null) {
// onProgress!(progress);
// }
});
file = await VideoUtils.compress(pickedFile.path); //压缩后的文件
}
//开始上传任务
UploadImageUtil().startUploadOnlyAddition(
context, file, key, true, _uploadImageProvider, () {
//上传成功后赋值
UploadImgModel imgModel =
_uploadImageProvider.getDynamicValue('${key}');
AdditionModel additionModel = AdditionModel();
additionModel.content = imgModel.qiniuUrl;
additionModel.type = '3';
additionModel.image = imgModel;
data[key] = additionModel;
imgAll.add(imgModel.qiniuUrl);
setState(() {});
});
} else {
print('No image selected.');
}
}
@override
Widget build(BuildContext context) {
// _baseIndoProvider =
// Provider.of<StoreBaseIndoProvider>(context, listen: false);
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
_marketingCenterProvider =
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
bool hasVedio = data.any((element) => element.type == '3');
return KeyboardDismissOnTap(
child: Scaffold(
backgroundColor: MyColours.color_ffffff,
... ... @@ -529,198 +1489,372 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
children: [
Expanded(
child: SingleChildScrollView(
controller: controller,
child: Column(
children: [
// _selectBtnWidget(),
// VEmptyView(24),
// Container(
// alignment: Alignment.centerLeft,
// padding: EdgeInsets.only(left: w(16)),
// height: w(48),
// child: Text(
// '效果预览',
// style: TextStyle(
// fontSize: font(16),
// color: MyColours.color_515151),
// ),
// ),
// VEmptyView(24),
_item('预订安排通知中附加主厨文字介绍', select: addChefIntroduce,
_item('预订通知中展示主厨介绍', select: addStoreIntroduce,
onTap: () {
setState(() {
addChefIntroduce = !addChefIntroduce;
addStoreIntroduce = !addStoreIntroduce;
});
}),
VEmptyView(24),
//输入框
Container(
width: double.infinity,
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40)),
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(20)),
alignment: Alignment.topLeft,
decoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border.all(
color: MyColours.color_DBDBDB,
width: ScreenUtil().setWidth(2)),
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(20))),
child: TextField(
controller: chefIntroduceC,
focusNode: chefIntroduceNode,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(28),
textBaseline: TextBaseline.alphabetic),
textAlignVertical: TextAlignVertical.center,
maxLines: 5,
maxLength: 100,
decoration: InputDecoration(
hintText: "点击录入餐厅介绍文字信息,最多100个汉字。",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(28),
),
contentPadding: EdgeInsets.zero,
border: OutlineInputBorder(
borderSide: BorderSide.none),
),
keyboardType: TextInputType.multiline,
onChanged: (value) {
setState(() {
// currentRemark = value ?? "";
});
}),
_textfield(
'标题名称',
'请输入',
titleC,
titleCNode,
),
VEmptyView(24),
Padding(
padding: EdgeInsets.symmetric(horizontal: w(20)),
child: MyDivider(
double.infinity,
w(0.5),
color: MyColours.color_DBDBDB,
)),
VEmptyView(24),
// _selectBtnWidget(),
_item('预订安排通知中附加主厨介绍图片', select: addChefImge, onTap: () {
setState(() {
addChefImge = !addChefImge;
});
}),
VEmptyView(24),
_separateWidget(),
VEmptyView(24),
_item('主厨介绍文字显示在图片上', select: addAbove, onTap: () {
setState(() {
addAbove = !addAbove;
});
}),
if (data.length > 0)
Padding(
padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(32),
vertical: ScreenUtil().setWidth(26)),
child: ReorderableListView(
shrinkWrap: true,
scrollController: controller,
children: _scrolleWidget(),
onReorder: (int oldIndex, int newIndex) async {
print(newIndex);
if (oldIndex < newIndex) {
newIndex -= 1;
}
print(newIndex);
// var childold = tableManagerModel.areas[oldIndex];
// Map<String, String> params = {
// 'sid': Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// 'regionid': childold.rid,
// 'order_o': tableManagerModel.areas[newIndex].orderId,
// 'sort': oldIndex < newIndex ? '2' : '1'
// };
var child = data.removeAt(oldIndex);
data.insert(newIndex, child);
setState(() {});
// await tableManagerModel.sortByRegion(context, params);
// //刷新前一页数据
// bus.emit('refresh_table_area');
},
)),
//输入框
// Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40)),
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// vertical: ScreenUtil().setWidth(20)),
// alignment: Alignment.topLeft,
// decoration: BoxDecoration(
// color: MyColours.color_ffffff,
// border: Border.all(
// color: MyColours.color_DBDBDB,
// width: ScreenUtil().setWidth(2)),
// borderRadius: BorderRadius.circular(
// ScreenUtil().setWidth(20))),
// child: TextField(
// controller: storeIntroduceC,
// focusNode: storeIntroduceNode,
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// textBaseline: TextBaseline.alphabetic),
// textAlignVertical: TextAlignVertical.center,
// maxLines: 5,
// maxLength: 500,
// decoration: InputDecoration(
// hintText: "点击录入餐厅介绍文字信息,最多100个汉字。",
// hintStyle: TextStyle(
// color: MyColours.color_999999,
// fontSize: ScreenUtil().setSp(28),
// ),
// contentPadding: EdgeInsets.zero,
// border: OutlineInputBorder(
// borderSide: BorderSide.none),
// ),
// keyboardType: TextInputType.multiline,
// onChanged: (value) {
// setState(() {
// // currentRemark = value ?? "";
// });
// }),
// ),
// VEmptyView(24),
// Padding(
// padding: EdgeInsets.symmetric(horizontal: w(20)),
// child: MyDivider(
// double.infinity,
// w(0.5),
// color: MyColours.color_DBDBDB,
// )),
// VEmptyView(24),
// // _selectBtnWidget(),
// _item('预订安排通知中附加餐厅介绍图片', select: addStoreImge, onTap: () {
// setState(() {
// addStoreImge = !addStoreImge;
// });
// }),
// VEmptyView(24),
// // Container(
// // alignment: Alignment.centerLeft,
// // padding: EdgeInsets.only(left: w(16)),
// // height: w(48),
// // child: Text(
// // '效果预览',
// // style: TextStyle(
// // fontSize: font(16),
// // color: MyColours.color_515151),
// // ),
// // ),
// // VEmptyView(24),
// // currIndex == 0
// // ? _noTextWidget()
// // : currIndex == 1
// // ? _mergingWidget()
// // :
// _separateWidget(),
// VEmptyView(24),
// _item('餐厅介绍文字显示在第一张图片上', select: addAbove, onTap: () {
// setState(() {
// addAbove = !addAbove;
// });
// }),
VEmptyView(24),
],
),
)),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
left: w(45), right: w(45), top: w(12), bottom: w(25)),
child: RoundButton(
text: '保存',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: r(5),
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () async {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
if (addChefIntroduce &&
chefIntroduceC.text.trim().length == 0) {
Utils.showToast('请输入主厨介绍文字!');
return false;
}
if (addChefImge &&
_uploadImageProvider.firstImage.qiniuUrl == null) {
Utils.showToast('请上传图片!');
return false;
}
Column(
children: [
Container(
padding: EdgeInsets.only(top: w(15)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
InkWell(
onTap: () {
if (!hasVedio) {
_openModalBottomSheet(context, data.length,
fileType: FileType.video);
}
},
child: Container(
width: w(77),
height: w(34),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(5)),
border: Border.all(
width: w(1),
color: hasVedio
? MyColours.color_999999
: MyColours.color_438E93)),
child: Text(
'+视频',
style: TextStyle(
color: hasVedio
? MyColours.color_999999
: MyColours.color_000000,
fontSize: font(14)),
),
)),
HEmptyView(20),
InkWell(
onTap: () {
_openModalBottomSheet(context, data.length);
},
child: Container(
width: w(77),
height: w(34),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(5)),
border: Border.all(
width: w(1),
color: MyColours.color_438E93)),
child: Text(
'+图片',
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(14)),
),
)),
HEmptyView(20),
InkWell(
onTap: () {
AdditionModel additionModel1 = AdditionModel();
// additionModel1.content =
// 'webenkjfkdfjakdfjaldfkjaldfjaldf';
additionModel1.type = '2';
// additionModel1.order = data.length;
if (addChefImge &&
_uploadImageProvider.firstImage.process < 1) {
Utils.showToast('正在上传图片,请稍等');
return false;
}
data.add(additionModel1);
setState(() {});
},
child: Container(
width: w(77),
height: w(34),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(5)),
border: Border.all(
width: w(1),
color: MyColours.color_438E93)),
child: Text(
'+文字',
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(14)),
),
)),
],
),
),
VEmptyView(24),
Text(
'注:\n1. 为了保证客户访问速度,只能有1个视频,时常不超过2分钟\n2. 上下拖动可以调整展示顺序',
style: TextStyle(
height: 1.5,
color: MyColours.color_999999,
fontSize: font(12)),
),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
left: w(45), right: w(45), top: w(13), bottom: w(25)),
child: RoundButton(
text: '保存',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: r(5),
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () async {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
// List<String> images = [];
// if (_uploadImageProvider.storeImage1.qiniuUrl != null &&
// _uploadImageProvider.storeImage1.qiniuUrl != '') {
// images.add(_uploadImageProvider.storeImage1.qiniuUrl);
// }
// if (_uploadImageProvider.storeImage2.qiniuUrl != null &&
// _uploadImageProvider.storeImage2.qiniuUrl != '') {
// images.add(_uploadImageProvider.storeImage2.qiniuUrl);
// }
// if (_uploadImageProvider.storeImage3.qiniuUrl != null &&
// _uploadImageProvider.storeImage3.qiniuUrl != '') {
// images.add(_uploadImageProvider.storeImage3.qiniuUrl);
// }
// if (_uploadImageProvider.storeImage3.qiniuUrl != null &&
// _uploadImageProvider.storeImage3.qiniuUrl != '') {
// images.add(_uploadImageProvider.storeImage3.qiniuUrl);
// }
// if (images.length == 0) {
// Utils.showToast('请至少上传一张图片!');
// return false;
// }
//接口
Map chefData = {
'introduce': chefIntroduceC.text,
'image': _uploadImageProvider.firstImage.qiniuUrl,
'is_introduce': addChefIntroduce ? '1' : '0',
'is_images': addChefImge ? '1' : '0',
'is_above': addAbove ? '1' : '0'
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'chef': json.encode(chefData)
};
bool success = await _marketingCenterProvider
.setSellerTemplateConf(context, params,
showLoading: true);
if (success) {
// imgAll和images 比较,挑出不一样的,删除七牛云
Set<String> difference = Set.from(imgAll)
..removeAll(
[_uploadImageProvider.firstImage.qiniuUrl]);
List<String> differenceList =
difference.toList(); //需要删除的图片
if (differenceList.length > 0) {
String delImgs =
Utils.listToStringEnglish(differenceList);
_uploadImageProvider.deleteImg(context, delImgs,
needToast: false);
}
Utils.showToast('保存成功');
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
}
},
),
if (titleC.text.trim().length == 0) {
Utils.showToast('请输入标题名称!');
return false;
}
if (addStoreIntroduce && data.length == 0) {
Utils.showToast('请录入主厨介绍!');
return false;
}
print(data);
bool can = true;
innerloop:
for (AdditionModel item in data) {
if (item.type == '1' && item.image.process < 1) {
Utils.showToast('正在上传,请稍等');
// return false;
can = false;
break innerloop;
}
}
data.removeWhere((element) =>
element.type == '2' &&
(element.infoC.text.trim() == '' ||
element.infoC.text == null));
if (can) {
List temp = [];
List<String> delImgs = [];
// String text = '';
for (int i = 0; i < data.length; i++) {
AdditionModel element = data[i];
temp.add({
'type': element.type,
'content': element.type == '2'
? element.infoC.text
: element.image.qiniuUrl,
'duration': element.type == '3'
? element.image.duration
: ''
});
if (element.type == '2') {
// text += '${element.infoC.text}\n';
} else {
delImgs.add(element.image.qiniuUrl);
}
}
// List<String> images = [];
// for (int i = 0; i < data.length; i++) {
// ChangeModel imgModel = data[i];
// if (imgModel.image.qiniuUrl != null &&
// imgModel.image.qiniuUrl != '') {
// images.add(imgModel.image.qiniuUrl);
// }
// }
// if (images.length == 0) {
// Utils.showToast('请至少上传一张图片!');
// return false;
// }
// if (text.trim().length > 0) {
// //同步店铺信息
// _setSellerInfoById(text); //同步店铺简介
// }
//接口
Map storeData = {
// 'style': currIndex.toString(),
// 'seller_name': sellername,
'content': jsonEncode(temp),
'title': titleC.text,
// 'images': json.encode(images),
'is_introduce_all':
addStoreIntroduce ? '1' : '0',
// 'is_images': addStoreImge ? '1' : '0',
// 'is_above': addAbove ? '1' : '0'
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context,
listen: false)
.user
.sellerid,
'chef': json.encode(storeData)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params,
showLoading: true);
if (success) {
// await VideoUtils.clearTemporaryDirectory();
// imgAll和images 比较,挑出不一样的,删除七牛云
Set<String> difference = Set.from(imgAll)
..removeAll(delImgs);
List<String> differenceList =
difference.toList(); //需要删除的图片
if (differenceList.length > 0) {
String delImgs =
Utils.listToStringEnglish(differenceList);
_uploadImageProvider.deleteImg(
context, delImgs,
needToast: false);
}
if (Navigator.canPop(context)) {
Navigator.pop(context);
}
}
}
}),
)
],
)
],
)));
... ...
// import 'dart:convert';
// import 'dart:io';
// import 'package:flutter/material.dart';
// import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
// import 'package:flutter_native_image/flutter_native_image.dart';
// import 'package:flutter_screenutil/flutter_screenutil.dart';
// import 'package:image_picker/image_picker.dart';
// import 'package:one_key/widgets/v_empty_view.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:provider/provider.dart';
// import '../../../../app.dart';
// import '../../../../models/upload_img_model.dart';
// import '../../../../provider/marketing_center_provider.dart';
// import '../../../../provider/upload_img_provider.dart';
// import '../../../../provider/user_model.dart';
// import '../../../../res/colors.dart';
// import '../../../../utils/dialog_util.dart';
// import '../../../../utils/screen_util.dart';
// import '../../../../utils/upload_image_util.dart';
// import '../../../../utils/utils.dart';
// import '../../../../widgets/MyDivider.dart';
// import '../../../../widgets/common_button_flat.dart';
// import '../../../../widgets/round_button.dart';
// import '../../../../widgets/system_app_bar.dart';
// /***
// *
// *
// * 主厨介绍
// */
// class ChefIntroducePage extends StatefulWidget {
// ChefIntroducePage({Key key}) : super(key: key);
// @override
// _ChefIntroducePageState createState() => _ChefIntroducePageState();
// }
// class _ChefIntroducePageState extends State<ChefIntroducePage> {
// // int currIndex = 0; //样式按钮默认选中第一个
// // String sellername; //店铺名称
// TextEditingController chefIntroduceC = TextEditingController();
// FocusNode chefIntroduceNode = FocusNode();
// TextEditingController chefNameC = TextEditingController();
// FocusNode chefNameNode = FocusNode();
// final picker = ImagePicker();
// UploadImageProvider _uploadImageProvider;
// MarketingCenterProvider _marketingCenterProvider;
// bool addChefIntroduce = false;
// bool addChefImge = false;
// bool addAbove = false;
// List<String> imgAll = [];
// @override
// void initState() {
// super.initState();
// WidgetsBinding.instance.addPostFrameCallback((_) async {
// // UserModel userModel = Provider.of<UserModel>(context, listen: false);
// // sellername = userModel.user.sellername;
// // setState(() {});
// _getQiniuInfo();
// await getSellerTemplateConf();
// });
// }
// @override
// void dispose() {
// _uploadImageProvider.firstImage = UploadImgModel();
// super.dispose();
// }
// ///获取七牛云token
// ///
// _getQiniuInfo() async {
// await _uploadImageProvider.getQiniuInfo(context, {});
// }
// getSellerTemplateConf() async {
// bool success =
// await _marketingCenterProvider.getSellerTemplateConf(context);
// if (success && _marketingCenterProvider.markDataModel.chef != null) {
// // currIndex = int.parse(_marketingCenterProvider.markDataModel.chef.style);
// _uploadImageProvider.firstImage.qiniuUrl =
// _marketingCenterProvider.markDataModel.chef.image ?? null;
// if (_uploadImageProvider.firstImage.qiniuUrl != null) {
// imgAll.add(_uploadImageProvider.firstImage.qiniuUrl);
// }
// _uploadImageProvider.firstImage.process =
// _uploadImageProvider.firstImage.qiniuUrl != null &&
// _uploadImageProvider.firstImage.qiniuUrl != ''
// ? 1
// : null;
// chefNameC.text = _marketingCenterProvider.markDataModel.chef.chefName;
// chefIntroduceC.text =
// _marketingCenterProvider.markDataModel.chef.introduce;
// addChefIntroduce =
// _marketingCenterProvider.markDataModel.chef.isIntroduce == '1'
// ? true
// : false;
// addChefImge = _marketingCenterProvider.markDataModel.chef.isImages == '1'
// ? true
// : false;
// addAbove = _marketingCenterProvider.markDataModel.chef.isAbove == '1'
// ? true
// : false;
// setState(() {});
// }
// }
// ///#相机拍照,单图选择
// Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
// final pickedFile = await picker.pickImage(source: imageSource);
// if (pickedFile != null) {
// File compressedFile = await FlutterNativeImage.compressImage(
// pickedFile.path,
// quality: 50,
// percentage: 50);
// setState(() {
// if (pickedFile != null) {
// imgModel.file = File(pickedFile.path);
// imgModel.process = 0.01;
// } else {
// print('No image selected.');
// }
// });
// if (pickedFile != null) {
// // if (title == '头像') {
// // _uploadImageProvider.imgSizeTouxiang = 76;
// // _uploadImageProvider.touxiang.qiniuUrl = null;
// // } else {
// // _uploadImageProvider.imgSizeErweima = 76;
// _uploadImageProvider.firstImage.qiniuUrl = null;
// // }
// bool need = await Utils.sizeNeed(File(pickedFile.path));
// File file = File(pickedFile.path);
// if (need) {
// file = File(compressedFile.absolute.path);
// }
// UploadImageUtil()
// .startUploadOnly(context, file, 4, true, _uploadImageProvider, () {
// imgAll.add(_uploadImageProvider.firstImage.qiniuUrl);
// });
// }
// }
// }
// ///添加图片UI弹出
// Future _openModalBottomSheet(context) async {
// final option = await showModalBottomSheet(
// context: context,
// backgroundColor: Colors.transparent,
// isDismissible: false,
// builder: (BuildContext context) {
// return Container(
// // height: ScreenUtil().setWidth(180 * 2),
// decoration: BoxDecoration(
// color: MyColours.color_ffffff,
// borderRadius: BorderRadius.only(
// topLeft: Radius.circular(ScreenUtil().setWidth(24)),
// topRight: Radius.circular(ScreenUtil().setWidth(24)))),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: <Widget>[
// InkWell(
// onTap: () {
// // Utils.getPickPermission(context, () {
// // _getFromPictureOrCamera(
// // _uploadImageProvider.firstImage, ImageSource.camera);
// // Navigator.pop(context);
// // }, Permission.camera);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage, ImageSource.camera);
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
// },
// child: Container(
// width: double.infinity,
// height: ScreenUtil().setWidth(58 * 2),
// child: Center(
// child: Text(
// '拍摄',
// style: TextStyle(
// fontSize: ScreenUtil().setSp(32),
// color: MyColours.color_353535,
// fontWeight: FontWeight.bold),
// ),
// )),
// ),
// MyDivider(
// double.infinity,
// ScreenUtil().setWidth(2),
// color: MyColours.color_EEEEEE,
// ),
// InkWell(
// onTap: () {
// // Utils.getPickPermission(context, () {
// // // pickAsset(RequestType.image);
// // _getFromPictureOrCamera(
// // _uploadImageProvider.firstImage, ImageSource.gallery);
// // Navigator.pop(context);
// // },
// // Platform.isAndroid
// // ? Permission.storage
// // : Permission.photos);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage, ImageSource.gallery);
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
// },
// child: Container(
// width: double.infinity,
// height: ScreenUtil().setWidth(58 * 2),
// child: Center(
// child: Text(
// '从相册选择',
// style: TextStyle(
// fontSize: ScreenUtil().setSp(32),
// color: MyColours.color_353535,
// fontWeight: FontWeight.bold),
// ),
// )),
// ),
// MyDivider(
// double.infinity,
// ScreenUtil().setWidth(10),
// color: MyColours.color_EEEEEE,
// ),
// InkWell(
// onTap: () {
// if (Navigator.canPop(context)) {
// Navigator.pop(context, '取消');
// }
// },
// child: Container(
// width: double.infinity,
// height: ScreenUtil().setWidth(58 * 2),
// child: Center(
// child: Text(
// '取消',
// style: TextStyle(
// fontSize: ScreenUtil().setSp(32),
// color: MyColours.color_353535,
// fontWeight: FontWeight.bold),
// ),
// )))
// ],
// ),
// );
// });
// }
// Widget _uploadImage({EdgeInsets padding = EdgeInsets.zero}) {
// return _uploadImageProvider.firstImage.file != null ||
// (_uploadImageProvider.firstImage.qiniuUrl != null &&
// _uploadImageProvider.firstImage.qiniuUrl != '')
// ? InkWell(
// onTap: () {
// double process;
// String qiniuUrl;
// List<String> tempList = [];
// // if (title == '头像') {
// process = _uploadImageProvider.firstImage.process;
// qiniuUrl = _uploadImageProvider.firstImage.qiniuUrl;
// // } else {
// // process = _uploadImageProvider.erweima.process;
// // qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// // }
// if (qiniuUrl != null && qiniuUrl != '') {
// // tempList.add(qiniuUrl);
// // ///没有上传完成的不可以点击
// // _showPhotoView(context, 0, tempList);
// // _uploadImageProvider.firstImage.qiniuUrl = null;
// // _uploadImageProvider.firstImage.process = 0;
// // setState(() {});
// FocusScope.of(context).requestFocus(FocusNode());
// _openModalBottomSheet(context);
// // Utils.getPickPermission(context, () {
// // _getFromPictureOrCamera(
// // _uploadImageProvider.firstImage,
// // ImageSource.gallery);
// // },
// // Platform.isAndroid
// // ? Permission.storage
// // : Permission.photos);
// }
// },
// child: Stack(alignment: Alignment.bottomCenter, children: [
// Stack(clipBehavior: Clip.none, children: [
// _uploadImageProvider.firstImage.qiniuUrl != null &&
// _uploadImageProvider.firstImage.qiniuUrl != ''
// ? Center(
// child: Image.network(
// _uploadImageProvider.firstImage.qiniuUrl,
// fit: BoxFit.contain,
// // width: double.infinity,
// // width: ScreenUtil()
// // .setWidth(imgSize * 2),
// // height: ScreenUtil().setWidth(
// // _uploadImageProvider.imgSizefirstImage * 2),
// ))
// : Center(
// child: Image.file(
// _uploadImageProvider.firstImage.file,
// fit: BoxFit.contain,
// // width: double.infinity,
// // width: ScreenUtil()
// // .setWidth(imgSize * 2),
// // height: ScreenUtil().setWidth(
// // _uploadImageProvider.imgSizefirstImage * 2),
// )),
// Positioned(
// left: 0,
// top: 0,
// right: padding.right,
// child: (_uploadImageProvider.firstImage.file != null) &&
// _uploadImageProvider.firstImage.process != 1 &&
// _uploadImageProvider.firstImage.process != 0.01
// ? Container(
// width: ScreenUtil().screenWidth,
// height: w(_uploadImageProvider.imgSizefirstImage),
// color: MyColours.color_4D000000,
// child: Center(
// child: Text('上传中',
// style:
// TextStyle(color: MyColours.color_F8F9FD)),
// ),
// )
// : Container()),
// if (_uploadImageProvider.firstImage.process == 1)
// Positioned(
// top: 0,
// right: 0,
// child: GestureDetector(
// child: Image.asset(
// Utils.getImgPath("delete"),
// width: ScreenUtil().setWidth(40),
// height: ScreenUtil().setWidth(40),
// ),
// onTap: () {
// //已经传到服务器,弹提醒窗口,是否删除
// //修改之前有内容,则弹框
// DialogUtil.cupertinoAlertDialog(context,
// title: "", content: "是否确定删除该照片?", lCallback: () {
// print("取消");
// }, rCallback: () {
// _uploadImageProvider.firstImage.qiniuUrl = null;
// _uploadImageProvider.firstImage.file = null;
// _uploadImageProvider.firstImage.isUpload = false;
// _uploadImageProvider.firstImage.process = 0.01;
// setState(() {});
// });
// },
// ))
// ]),
// _uploadImageProvider.firstImage.process == 1
// ? Container(
// width: w(150),
// height: w(30),
// color: MyColours.color_4D000000,
// alignment: Alignment.center,
// margin: padding,
// child: Text(
// '点击图片可以更换',
// style: TextStyle(
// color: MyColours.color_F8F9FD,
// fontSize: font(14),
// fontWeight: FontWeight.bold),
// ))
// : SizedBox(),
// ]))
// : InkWell(
// onTap: () {
// // double process;
// // String qiniuUrl;
// // List<String> tempList = [];
// // if (title == '头像') {
// // process = _uploadImageProvider.touxiang.process;
// // qiniuUrl = _uploadImageProvider.touxiang.qiniuUrl;
// // } else {
// // process = _uploadImageProvider.erweima.process;
// // qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// // }
// // if (qiniuUrl != null && qiniuUrl != '') {
// // tempList.add(qiniuUrl);
// // ///没有上传完成的不可以点击
// // _showPhotoView(context, 0, tempList);
// // } else {
// // Utils.getPickPermission(context, () {
// // _getFromPictureOrCamera(
// // _uploadImageProvider.firstImage, ImageSource.gallery);
// // }, Platform.isAndroid ? Permission.storage : Permission.photos);
// FocusScope.of(context).requestFocus(FocusNode());
// _openModalBottomSheet(context);
// },
// child: Container(
// color: MyColours.color_d9d9d9,
// width: double.infinity,
// height: w(_uploadImageProvider.imgSizefirstImage),
// margin: padding,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// // VEmptyView(80),
// Image.asset(
// Utils.getImgPath('add_img'),
// width: w(63),
// ),
// VEmptyView(28),
// Container(
// width: w(139),
// height: w(60),
// child: Text(
// '点击上传照片\n为了更好的效果\n建议上传4:3照片',
// textAlign: TextAlign.center,
// style: TextStyle(
// height: 1.4,
// color: MyColours.color_ffffff,
// fontSize: font(14),
// fontWeight: FontWeight.bold),
// ))
// ],
// ),
// ));
// }
// ///无介绍
// Widget _noTextWidget() {
// return SizedBox();
// // return Column(
// // children: [
// // _uploadImage(),
// // VEmptyView(18),
// // ],
// // );
// }
// ///图文分开
// Widget _separateWidget() {
// return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
// // _introduceWidget(EdgeInsets.all(w(15)),
// // boxDecoration: BoxDecoration(color: MyColours.color_ffffff)),
// // VEmptyView(18),
// _uploadImage(),
// ]);
// }
// Widget _item(String title, {bool select, GestureTapCallback onTap}) {
// return InkWell(
// onTap: onTap,
// child: Container(
// decoration: BoxDecoration(
// border: Border(
// bottom: BorderSide(
// color: MyColours.color_E7E7E7, width: w(0.5)))),
// margin: EdgeInsets.only(left: w(16)),
// padding: EdgeInsets.only(top: w(12), bottom: w(12), right: w(16)),
// child: Row(
// children: [
// Text(
// title,
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setWidth(32)),
// ),
// Spacer(),
// Container(
// padding:
// EdgeInsets.symmetric(horizontal: w(7), vertical: w(4)),
// child: Image.asset(
// Utils.getImgPath(select ? 'swich_on' : 'swich_off'),
// width: w(44),
// ),
// )
// ],
// )));
// }
// @override
// Widget build(BuildContext context) {
// _uploadImageProvider =
// Provider.of<UploadImageProvider>(context, listen: true);
// _marketingCenterProvider =
// Provider.of<MarketingCenterProvider>(context, listen: true);
// return KeyboardDismissOnTap(
// child: Scaffold(
// backgroundColor: MyColours.color_ffffff,
// appBar: SystemAppBar(
// '主厨介绍',
// onTap: () {
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// },
// ),
// body: Column(
// children: [
// Expanded(
// child: SingleChildScrollView(
// child: Column(
// children: [
// // _selectBtnWidget(),
// // VEmptyView(24),
// // Container(
// // alignment: Alignment.centerLeft,
// // padding: EdgeInsets.only(left: w(16)),
// // height: w(48),
// // child: Text(
// // '效果预览',
// // style: TextStyle(
// // fontSize: font(16),
// // color: MyColours.color_515151),
// // ),
// // ),
// // VEmptyView(24),
// _item('预订安排通知中附加主厨文字介绍', select: addChefIntroduce,
// onTap: () {
// setState(() {
// addChefIntroduce = !addChefIntroduce;
// });
// }),
// VEmptyView(24),
// //输入框
// Container(
// width: double.infinity,
// margin: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40)),
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(40),
// vertical: ScreenUtil().setWidth(20)),
// alignment: Alignment.topLeft,
// decoration: BoxDecoration(
// color: MyColours.color_ffffff,
// border: Border.all(
// color: MyColours.color_DBDBDB,
// width: ScreenUtil().setWidth(2)),
// borderRadius: BorderRadius.circular(
// ScreenUtil().setWidth(20))),
// child: TextField(
// controller: chefIntroduceC,
// focusNode: chefIntroduceNode,
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// textBaseline: TextBaseline.alphabetic),
// textAlignVertical: TextAlignVertical.center,
// maxLines: 5,
// maxLength: 100,
// decoration: InputDecoration(
// hintText: "点击录入餐厅介绍文字信息,最多100个汉字。",
// hintStyle: TextStyle(
// color: MyColours.color_999999,
// fontSize: ScreenUtil().setSp(28),
// ),
// contentPadding: EdgeInsets.zero,
// border: OutlineInputBorder(
// borderSide: BorderSide.none),
// ),
// keyboardType: TextInputType.multiline,
// onChanged: (value) {
// setState(() {
// // currentRemark = value ?? "";
// });
// }),
// ),
// VEmptyView(24),
// Padding(
// padding: EdgeInsets.symmetric(horizontal: w(20)),
// child: MyDivider(
// double.infinity,
// w(0.5),
// color: MyColours.color_DBDBDB,
// )),
// VEmptyView(24),
// // _selectBtnWidget(),
// _item('预订安排通知中附加主厨介绍图片', select: addChefImge, onTap: () {
// setState(() {
// addChefImge = !addChefImge;
// });
// }),
// VEmptyView(24),
// _separateWidget(),
// VEmptyView(24),
// _item('主厨介绍文字显示在图片上', select: addAbove, onTap: () {
// setState(() {
// addAbove = !addAbove;
// });
// }),
// VEmptyView(24),
// ],
// ),
// )),
// Container(
// color: MyColours.color_ffffff,
// padding: EdgeInsets.only(
// left: w(45), right: w(45), top: w(12), bottom: w(25)),
// child: RoundButton(
// text: '保存',
// gradientStart: MyColours.color_199095,
// gradientEnd: MyColours.color_199095,
// // borderColor: MyColours.color_999999,
// radius: r(5),
// fontSize: 34,
// height: w(40),
// isBold: true,
// onPressed: () async {
// FocusScope.of(context)
// .requestFocus(FocusNode()); //点击空白处隐藏键盘
// if (addChefIntroduce &&
// chefIntroduceC.text.trim().length == 0) {
// Utils.showToast('请输入主厨介绍文字!');
// return false;
// }
// if (addChefImge &&
// _uploadImageProvider.firstImage.qiniuUrl == null) {
// Utils.showToast('请上传图片!');
// return false;
// }
// if (addChefImge &&
// _uploadImageProvider.firstImage.process < 1) {
// Utils.showToast('正在上传图片,请稍等');
// return false;
// }
// // List<String> images = [];
// // if (_uploadImageProvider.storeImage1.qiniuUrl != null &&
// // _uploadImageProvider.storeImage1.qiniuUrl != '') {
// // images.add(_uploadImageProvider.storeImage1.qiniuUrl);
// // }
// // if (_uploadImageProvider.storeImage2.qiniuUrl != null &&
// // _uploadImageProvider.storeImage2.qiniuUrl != '') {
// // images.add(_uploadImageProvider.storeImage2.qiniuUrl);
// // }
// // if (_uploadImageProvider.storeImage3.qiniuUrl != null &&
// // _uploadImageProvider.storeImage3.qiniuUrl != '') {
// // images.add(_uploadImageProvider.storeImage3.qiniuUrl);
// // }
// // if (_uploadImageProvider.storeImage3.qiniuUrl != null &&
// // _uploadImageProvider.storeImage3.qiniuUrl != '') {
// // images.add(_uploadImageProvider.storeImage3.qiniuUrl);
// // }
// // if (images.length == 0) {
// // Utils.showToast('请至少上传一张图片!');
// // return false;
// // }
// //接口
// Map chefData = {
// 'introduce': chefIntroduceC.text,
// 'image': _uploadImageProvider.firstImage.qiniuUrl,
// 'is_introduce': addChefIntroduce ? '1' : '0',
// 'is_images': addChefImge ? '1' : '0',
// 'is_above': addAbove ? '1' : '0'
// };
// Map<String, String> params = {
// 'sid': Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// 'chef': json.encode(chefData)
// };
// bool success = await _marketingCenterProvider
// .setSellerTemplateConf(context, params,
// showLoading: true);
// if (success) {
// // imgAll和images 比较,挑出不一样的,删除七牛云
// Set<String> difference = Set.from(imgAll)
// ..removeAll(
// [_uploadImageProvider.firstImage.qiniuUrl]);
// List<String> differenceList =
// difference.toList(); //需要删除的图片
// if (differenceList.length > 0) {
// String delImgs =
// Utils.listToStringEnglish(differenceList);
// _uploadImageProvider.deleteImg(context, delImgs,
// needToast: false);
// }
// Utils.showToast('保存成功');
// if (Navigator.canPop(context)) {
// Navigator.pop(context);
// }
// }
// },
// ),
// )
// ],
// )));
// }
// }
... ...