Commit 16e390c447a64d9c5e7adff2d9021f0e6bdf052a

Authored by wdn127929
1 parent 0e2fc0ab

modelmodel

import 'package:flutter/material.dart';
import 'dart:convert' as convert;
import 'package:one_key/models/set_xuan_tai_model.dart';
class MarkDataModel extends Object {
String id;
String sid;
MarkHomeModel home;
MarkReserveModel reserve;
MarkStoreModel store;
MarkChefModel chef;
MarkSignboardModel signboard;
MarkMarketingModel marketing;
MarkDataModel(
this.id,
this.sid,
this.home,
this.reserve,
this.store,
this.chef,
this.signboard,
this.marketing,
);
MarkDataModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
sid = json['sid'];
home = json['home'] != null
? new MarkHomeModel.fromJson(convert.jsonDecode(json['home']))
: null; //首图形象
reserve = json['reserve'] != null
? new MarkReserveModel.fromJson(convert.jsonDecode(json['reserve']))
: null; //
store = json['store'] != null
? new MarkStoreModel.fromJson(convert.jsonDecode(json['store']))
: null; //
chef = json['chef'] != null
? new MarkChefModel.fromJson(convert.jsonDecode(json['chef']))
: null; //
signboard = json['signboard'] != null
? new MarkSignboardModel.fromJson(convert.jsonDecode(json['signboard']))
: null; //
marketing = json['marketing'] != null
? new MarkMarketingModel.fromJson(convert.jsonDecode(json['marketing']))
: null; //
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sid'] = this.sid;
data['home'] = this.home;
data['reserve'] = this.reserve;
data['store'] = this.store;
data['chef'] = this.chef;
data['signboard'] = this.signboard;
data['marketing'] = this.marketing;
return data;
}
}
class MarkHomeModel {
String themeColor; //
String title; //
String slogan; //
String image; //
MarkHomeModel({
this.themeColor,
this.title,
this.slogan,
this.image,
});
MarkHomeModel.fromJson(Map<String, dynamic> json) {
themeColor = json['theme_color'];
title = json['title'];
slogan = json['slogan'];
image = json['image'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['theme_color'] = this.themeColor;
data['title'] = this.title;
data['slogan'] = this.slogan;
data['image'] = this.image;
return data;
}
}
class MarkReserveModel {
String swichManager; //
String swichPark; //
String parkInfo; //
String sellerName; //
String date; //
String dsolt; //
String room; //
String pnum; //
String address; //
String sellerPhone; //
String managerImage; //
String managerName; //
String managerPhone; //
String managerWechat; //
String long; //
String lat; //
MarkReserveModel(
{this.swichManager,
this.swichPark,
this.parkInfo,
this.sellerName,
this.date,
this.dsolt,
this.room,
this.pnum,
this.address,
this.lat,
this.long,
this.managerImage,
this.managerName,
this.managerPhone,
this.managerWechat,
this.sellerPhone});
MarkReserveModel.fromJson(Map<String, dynamic> json) {
swichManager = json['swich_manager'];
swichPark = json['swich_park'];
parkInfo = json['park_info'];
sellerName = json['seller_name'];
date = json['date'];
dsolt = json['dsolt'];
room = json['room'];
pnum = json['pnum'];
address = json['address'];
sellerPhone = json['seller_phone'];
managerImage = json['manager_image'];
managerName = json['manager_name'];
managerPhone = json['manager_phone'];
managerWechat = json['manager_wechat'];
long = json['long'];
lat = json['lat'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['swich_manager'] = this.swichManager;
data['swich_park'] = this.swichPark;
data['park_info'] = this.parkInfo;
data['seller_name'] = this.sellerName;
data['date'] = this.date;
data['dsolt'] = this.dsolt;
data['room'] = this.room;
data['pnum'] = this.pnum;
data['address'] = this.address;
data['seller_phone'] = this.sellerPhone;
data['manager_image'] = this.managerImage;
data['manager_name'] = this.managerName;
data['manager_phone'] = this.managerPhone;
data['manager_wechat'] = this.managerWechat;
data['long'] = this.long;
data['lat'] = this.lat;
return data;
}
}
class MarkStoreModel {
String style; //
String sellerName; //
String introduce;
List<Images> images;
MarkStoreModel({
this.style,
this.sellerName,
this.introduce,
this.images,
});
MarkStoreModel.fromJson(Map<String, dynamic> json) {
style = json['style'];
sellerName = json['seller_name'];
introduce = json['introduce'];
if (json['images'] != null) {
images = <Images>[];
if (json['images'] is List) {
json['images'].forEach((v) {
images.add(new Images.fromJson(v));
});
} else {
convert.jsonDecode(json['images']).forEach((v) {
images.add(new Images.fromJson(v));
});
}
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['style'] = this.style;
data['seller_name'] = this.sellerName;
data['introduce'] = this.introduce;
data['images'] = this.images;
return data;
}
}
class MarkChefModel {
String style; //
String sellerName; //
String introduce;
String chefName;
String image;
MarkChefModel({
this.style,
this.sellerName,
this.introduce,
this.chefName,
this.image,
});
MarkChefModel.fromJson(Map<String, dynamic> json) {
style = json['style'];
sellerName = json['seller_name'];
chefName = json['chef_name'];
introduce = json['introduce'];
image = json['image'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['style'] = this.style;
data['seller_name'] = this.sellerName;
data['chef_name'] = this.chefName;
data['introduce'] = this.introduce;
data['image'] = this.image;
return data;
}
}
class MarkSignboardModel {
String swich; //
List<Images> images;
MarkSignboardModel({
this.swich,
this.images,
});
MarkSignboardModel.fromJson(Map<String, dynamic> json) {
swich = json['swich'];
if (json['images'] != null) {
images = <Images>[];
if (json['images'] is List) {
json['images'].forEach((v) {
images.add(new Images.fromJson(v));
});
} else {
convert.jsonDecode(json['images']).forEach((v) {
images.add(new Images.fromJson(v));
});
}
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['swich'] = this.swich;
data['images'] = this.images;
return data;
}
}
class MarkMarketingModel {
String isTranspond; //
String isArrival; //
String isOnlineBook; //
String isOrder; //
String isLink; //
String wecomle; //
String logo; //
MarkMarketingModel(
{this.isArrival,
this.isLink,
this.isOnlineBook,
this.isOrder,
this.isTranspond,
this.logo,
this.wecomle});
MarkMarketingModel.fromJson(Map<String, dynamic> json) {
isTranspond = json['is_transpond'];
isArrival = json['is_arrival'];
isOnlineBook = json['is_online_book'];
isOrder = json['is_order'];
isLink = json['is_link'];
wecomle = json['wecomle'];
logo = json['logo'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['is_transpond'] = this.isTranspond;
data['is_arrival'] = this.isArrival;
data['is_online_book'] = this.isOnlineBook;
data['is_order'] = this.isOrder;
data['is_link'] = this.isLink;
data['wecomle'] = this.wecomle;
data['logo'] = this.logo;
return data;
}
}
... ...
... ... @@ -72,7 +72,9 @@ class _CouponSelectPageState extends State<CouponSelectPage> {
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
leading: InkWell(
onTap: () {
... ...
... ... @@ -50,7 +50,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
bool addManager = false;
bool addParking = false;
double dateValue;
String dateValue;
BaseIndoProvider _baseIndoProvider;
String lat;
String long;
... ... @@ -143,7 +143,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
DateTime dateTime = DateTime.now();
dateValue = (dateTime.millisecondsSinceEpoch) / 1000;
dateValue = ((dateTime.millisecondsSinceEpoch) / 1000).floor().toString();
date = Utils.returnYMDandLunarCalendar(DateTime.now(), context);
... ... @@ -206,7 +206,10 @@ class _BookInfoPageState extends State<BookInfoPage> {
dateTime.add(Duration(days: 1)), context);
dateValue =
(dateTime.add(Duration(days: 1)).millisecondsSinceEpoch) / 1000;
((dateTime.add(Duration(days: 1)).millisecondsSinceEpoch) / 1000)
.floor()
.toString();
;
} else {
//过了晚市
dsolt = '早餐';
... ... @@ -401,7 +404,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
.tableOuterList[0].list.length >
0
? _itemTitleAndSubTtile('包间',
'${marketingCenterProvider.tableOuterList[0].name}${marketingCenterProvider.tableOuterList[0].list[0].name}}')
'${marketingCenterProvider.tableOuterList[0].name}${marketingCenterProvider.tableOuterList[0].list[0].name}')
: SizedBox(),
VEmptyView(10),
marketingCenterProvider.tableOuterList.length > 0 &&
... ... @@ -576,7 +579,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
marketingCenterProvider
.tableOuterList[0].list.length >
0
? '${marketingCenterProvider.tableOuterList[0].name}${marketingCenterProvider.tableOuterList[0].list[0].name}}'
? '${marketingCenterProvider.tableOuterList[0].name}${marketingCenterProvider.tableOuterList[0].list[0].name}'
: '',
'pnum':
'${marketingCenterProvider.tableOuterList[0].list[0].tableNum}',
... ...
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.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/screen_util.dart';
import '../../../../utils/upload_image_util.dart';
import '../../../../utils/utils.dart';
import '../../../../widgets/MyDivider.dart';
import '../../../../widgets/common_button_flat.dart';
... ... @@ -37,6 +46,11 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
TextEditingController chefNameC = TextEditingController();
FocusNode chefNameNode = FocusNode();
final picker = ImagePicker();
UploadImageProvider _uploadImageProvider;
MarketingCenterProvider _marketingCenterProvider;
@override
void initState() {
super.initState();
... ... @@ -48,6 +62,148 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
});
}
@override
void dispose() {
_uploadImageProvider.firstImage = UploadImgModel();
super.dispose();
}
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
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;
// }
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), 4, true, _uploadImageProvider);
}
}
///添加图片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);
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);
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: () {
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 _selectBtnWidget() {
return Container(
... ... @@ -244,72 +400,167 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
);
}
Widget _uploadImage(bool hasupload, {EdgeInsets padding = EdgeInsets.zero}) {
return InkWell(
onTap: () {},
child: hasupload
? InkWell(
onTap: () {
print('object');
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Image.network(
'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
fit: BoxFit.cover,
height: w(280),
),
Container(
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 != ''
? Image.network(
_uploadImageProvider.firstImage.qiniuUrl,
fit: BoxFit.cover,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
height: ScreenUtil().setWidth(
_uploadImageProvider.imgSizefirstImage * 2),
)
: Image.file(
_uploadImageProvider.firstImage.file,
fit: BoxFit.cover,
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()),
]),
_uploadImageProvider.firstImage.process == 1
? Container(
width: w(150),
height: w(30),
color: MyColours.color_4D000000,
margin: padding,
alignment: Alignment.center,
margin: padding,
child: Text(
'点击图片可以更换',
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: font(14),
fontWeight: FontWeight.bold),
)),
]))
: Container(
color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(280),
padding: padding,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
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),
))
],
),
));
))
: 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 Column(
children: [
_uploadImage(false),
VEmptyView(18),
],
);
return SizedBox();
// return Column(
// children: [
// _uploadImage(),
// VEmptyView(18),
// ],
// );
}
///图文合并
... ... @@ -322,15 +573,15 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
return Column(
children: [
Stack(
alignment: Alignment.centerRight,
children: [
_uploadImage(
true,
padding: EdgeInsets.only(left: w(160)),
padding: EdgeInsets.only(right: w(160)),
),
Positioned(
child: _introduceWidget(
EdgeInsets.only(
left: w(15), top: w(23), right: w(7), bottom: w(42)),
right: w(15), top: w(23), left: w(7), bottom: w(42)),
textColor: MyColours.color_ffffff,
hintColor: MyColours.color_ffffff,
boxDecoration: BoxDecoration(
... ... @@ -358,12 +609,17 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
_introduceWidget(EdgeInsets.all(w(15)),
boxDecoration: BoxDecoration(color: MyColours.color_ffffff)),
VEmptyView(18),
_uploadImage(false),
_uploadImage(),
]);
}
@override
Widget build(BuildContext context) {
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
_marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -413,7 +669,75 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () {},
onPressed: () async {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
if ((currIndex == 1 || currIndex == 2)) {
if (chefNameC.text.trim().length == 0) {
Utils.showToast('请输入主厨姓名!');
return false;
}
if (chefIntroduceC.text.trim().length == 0) {
Utils.showToast('请输入主厨介绍文字!');
return false;
}
if (_uploadImageProvider.firstImage.qiniuUrl == null) {
Utils.showToast('请上传图片!');
return false;
}
if (_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 = {
'style': currIndex.toString(),
'seller_name': sellername,
'chef_name': chefNameC.text,
'introduce': chefIntroduceC.text,
'image': _uploadImageProvider.firstImage.qiniuUrl
};
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) {
Utils.showToast('保存成功');
Navigator.pop(context);
}
},
),
)
],
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.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/screen_util.dart';
import '../../../../utils/upload_image_util.dart';
import '../../../../utils/utils.dart';
import '../../../../widgets/round_button.dart';
import '../../../../widgets/system_app_bar.dart';
import '../../../../widgets/v_empty_view.dart';
import 'img_picker_invitation_widget.dart';
/***
* 菜品展示
... ... @@ -25,6 +33,18 @@ class _DishShowPageState extends State<DishShowPage> {
MarketingCenterProvider marketingCenterProvider;
bool addDish = false;
UploadImageProvider _uploadImageProvider;
ScrollController controller = ScrollController();
@override
void dispose() {
_uploadImageProvider.storeImage1 = UploadImgModel();
_uploadImageProvider.storeImage2 = UploadImgModel();
_uploadImageProvider.storeImage3 = UploadImgModel();
_uploadImageProvider.storeImage4 = UploadImgModel();
super.dispose();
}
Widget _item(String title, {bool select, GestureTapCallback onTap}) {
return InkWell(
onTap: onTap,
... ... @@ -56,69 +76,76 @@ class _DishShowPageState extends State<DishShowPage> {
)));
}
Widget _uploadImage(bool hasupload, {EdgeInsets padding = EdgeInsets.zero}) {
return InkWell(
onTap: () {},
child: hasupload
? InkWell(
onTap: () {
print('object');
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Image.network(
'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
fit: BoxFit.cover,
height: w(280),
),
Container(
width: w(150),
height: w(30),
color: MyColours.color_4D000000,
margin: padding,
alignment: Alignment.center,
child: Text(
'点击图片可以更换',
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: font(14),
fontWeight: FontWeight.bold),
)),
]))
: Container(
color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(280),
padding: padding,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
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 _uploadImage(bool hasupload, {EdgeInsets padding = EdgeInsets.zero}) {
// return InkWell(
// onTap: () {},
// child: hasupload
// ? InkWell(
// onTap: () {
// print('object');
// },
// child: Stack(alignment: Alignment.bottomCenter, children: [
// Image.network(
// 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
// fit: BoxFit.cover,
// height: w(280),
// ),
// Container(
// width: w(150),
// height: w(30),
// color: MyColours.color_4D000000,
// margin: padding,
// alignment: Alignment.center,
// child: Text(
// '点击图片可以更换',
// style: TextStyle(
// color: MyColours.color_F8F9FD,
// fontSize: font(14),
// fontWeight: FontWeight.bold),
// )),
// ]))
// : Container(
// color: MyColours.color_d9d9d9,
// width: double.infinity,
// height: w(280),
// padding: padding,
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// 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),
// ))
// ],
// ),
// ));
// }
@override
Widget build(BuildContext context) {
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
int colorValue = App.sp.get("themeColor");
Color themColor = MyColours.color_0C0F0E;
if (colorValue != null) {
themColor = Color(colorValue);
}
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -130,37 +157,86 @@ class _DishShowPageState extends State<DishShowPage> {
body: Column(children: [
Expanded(
child: SingleChildScrollView(
controller: controller,
child: Column(children: [
_item('附加招牌菜展示', select: addDish, onTap: () {
setState(() {
addDish = !addDish;
});
}),
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),
),
),
addDish
? Column(
children: [
VEmptyView(24),
_uploadImage(false),
VEmptyView(18),
_uploadImage(true),
VEmptyView(18),
_uploadImage(true),
VEmptyView(18),
],
)
: SizedBox()
]))),
_item('附加招牌菜展示', select: addDish, onTap: () {
setState(() {
addDish = !addDish;
});
}),
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),
),
),
addDish
? Column(
children: [
VEmptyView(24),
Stack(
alignment: Alignment.topCenter,
children: [
ImgPickerInvitationWidget(
scrollController: controller,
model: _uploadImageProvider,
index: 5,
imageModel:
_uploadImageProvider.storeImage1),
Container(
width: double.infinity,
padding: EdgeInsets.only(
left: w(26), top: w(16), bottom: w(16)),
decoration: BoxDecoration(
gradient: LinearGradient(
stops: [0, 1],
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
themColor,
MyColours.color_4D0C0F0E,
],
),
),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text('Favorites',
style: TextStyle(
color: MyColours.color_B39437,
fontSize: font(14))),
Text('菜品展示',
style: TextStyle(
color: MyColours.color_B39437,
fontSize: font(14)))
],
),
)
],
),
VEmptyView(18),
ImgPickerInvitationWidget(
scrollController: controller,
model: _uploadImageProvider,
index: 6,
imageModel: _uploadImageProvider.storeImage2),
VEmptyView(18),
ImgPickerInvitationWidget(
scrollController: controller,
model: _uploadImageProvider,
index: 7,
imageModel: _uploadImageProvider.storeImage3),
VEmptyView(18),
],
)
: SizedBox()
]))),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
... ... @@ -174,7 +250,48 @@ class _DishShowPageState extends State<DishShowPage> {
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () {},
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 (addDish && images.length == 0) {
Utils.showToast('请至少上传一张图片!');
return false;
}
//接口
Map signboardData = {
'swich': addDish ? '1' : '0',
'images': json.encode(images)
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'signboard': json.encode(signboardData)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params, showLoading: true);
if (success) {
Utils.showToast('保存成功');
Navigator.pop(context);
}
},
),
)
]));
... ...
... ... @@ -20,6 +20,7 @@ import '../../../../provider/user_model.dart';
import '../../../../res/colors.dart';
import '../../../../utils/screen_util.dart';
import '../../../../utils/upload_image_util.dart';
import '../../../../widgets/MyDivider.dart';
import '../../../../widgets/round_button.dart';
import '../../../online_check/photo_view_wiget.dart';
... ... @@ -57,6 +58,12 @@ class _FirstImagePageState extends State<FirstImagePage> {
_initThemeColor();
}
@override
void dispose() {
_uploadImageProvider.firstImage = UploadImgModel();
super.dispose();
}
///初始化主题颜色
_initThemeColor() {
int colorValue = App.sp.get("themeColor");
... ... @@ -253,6 +260,118 @@ class _FirstImagePageState extends State<FirstImagePage> {
}
}
///添加图片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);
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);
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: () {
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),
),
)))
],
),
);
});
}
@override
Widget build(BuildContext context) {
ThemeColorModel themeColerModel = themeColorData[themeColorIndex];
... ... @@ -444,14 +563,15 @@ class _FirstImagePageState extends State<FirstImagePage> {
_uploadImageProvider.firstImage.qiniuUrl = null;
_uploadImageProvider.firstImage.process = 0;
setState(() {});
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
_uploadImageProvider.firstImage,
ImageSource.gallery);
},
Platform.isAndroid
? Permission.storage
: Permission.photos);
_openModalBottomSheet(context);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage,
// ImageSource.gallery);
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
}
},
child:
... ... @@ -539,14 +659,15 @@ class _FirstImagePageState extends State<FirstImagePage> {
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
// } else {
Utils.getPickPermission(context, () {
_getFromPictureOrCamera(
_uploadImageProvider.firstImage,
ImageSource.gallery);
},
Platform.isAndroid
? Permission.storage
: Permission.photos);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
// _uploadImageProvider.firstImage,
// ImageSource.gallery);
// },
// Platform.isAndroid
// ? Permission.storage
// : Permission.photos);
_openModalBottomSheet(context);
},
child: Container(
color: MyColours.color_d9d9d9,
... ... @@ -602,21 +723,13 @@ class _FirstImagePageState extends State<FirstImagePage> {
Utils.showToast('请输入店铺slogan!');
return false;
}
if (_uploadImageProvider.firstImage.qiniuUrl == null) {
Utils.showToast('请上传图片!');
return false;
}
if (_uploadImageProvider.firstImage.process < 1) {
Utils.showToast('正在上传图片,请稍等');
return false;
}
App.sp.setInt(
"themeColor", themeColorData[themeColorIndex].color.value);
//接口
Map homeData = {
'theme_color': themeColorData[themeColorIndex].color.value,
'theme_color':
themeColorData[themeColorIndex].color.value.toString(),
'title': titleC.text,
'slogan': sloganC.text,
'image': _uploadImageProvider.firstImage.qiniuUrl
... ...
import 'dart:convert';
import 'dart:io';
import 'dart:async';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/upload_img_model.dart';
import 'package:one_key/pages/online_check/photo_view_wiget.dart';
import 'package:one_key/pages/online_check/progress.dart';
import 'package:one_key/provider/online_check_edit_provider.dart';
import 'package:one_key/provider/upload_img_provider.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/misc.dart';
import 'package:one_key/utils/upload_image_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:permission_handler/permission_handler.dart';
// import 'package:photo/photo.dart';
import 'package:provider/provider.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:wechat_assets_picker/wechat_assets_picker.dart';
import '../../../../utils/screen_util.dart';
import '../../../online_check/dispose.dart';
import 'package:photo_manager/photo_manager.dart';
import 'package:flutter_native_image/flutter_native_image.dart';
typedef void OnPickImageCallback(
double maxWidth, double maxHeight, int quality);
typedef void DeleteCallback(int index);
class ImgPickerInvitationWidget extends StatefulWidget {
final ScrollController scrollController;
final Color borderColor;
final VoidCallback callback;
final int maxImageNumber;
final UploadImageProvider model;
final UploadType uploadType;
final DeleteCallback deleteCallback;
final double size;
final Color bgColor;
final UploadImgModel imageModel;
final int index;
final EdgeInsets padding;
ImgPickerInvitationWidget(
{Key key,
this.scrollController,
this.borderColor = Colors.blue,
this.callback,
this.model,
this.uploadType,
this.deleteCallback,
this.size = 100,
this.bgColor = MyColours.color_f3f3f3,
this.imageModel,
this.padding = EdgeInsets.zero,
this.maxImageNumber,
this.index})
: super(key: key);
@override
_ImgPickerInvitationWidgetState createState() =>
_ImgPickerInvitationWidgetState();
}
class _ImgPickerInvitationWidgetState
extends DisposableState<ImgPickerInvitationWidget> {
final picker = ImagePicker();
// OnlineCheckEditProvider _onlineCheckEditProvider;
// UploadImageProvider _uploadImageProvider;
// 用户输入的文件名
String key;
// 用户输入的 partSize
int partSize = 4;
// 用户输入的 token
String token;
/// storage 实例
final Storage storage = Storage();
// 控制器,可以用于取消任务、获取上述的状态,进度等信息
// PutController putController = PutController();
// 当前的任务状态
@override
void initState() {
// storage = Storage();
// putController = PutController();
super.initState();
}
@override
void dispose() {
super.dispose();
}
///#相机拍照,单图选择
Future _getFromPictureOrCamera(imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
setState(() {
if (pickedFile != null) {
widget.imageModel.file = File(pickedFile.path);
widget.imageModel.process = 0.01;
} else {
print('No image selected.');
}
});
if (pickedFile != null) {
// if (title == '头像') {
// _uploadImageProvider.imgSizeTouxiang = 76;
// _uploadImageProvider.touxiang.qiniuUrl = null;
// } else {
// _uploadImageProvider.imgSizeErweima = 76;
widget.imageModel.qiniuUrl = null;
// }
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), widget.index, true, widget.model);
}
}
// ///多图片选择
// void pickAsset(RequestType type, {List<AssetPathEntity> pathList}) async {
// List<UploadImgModel> temp = [];
// if (widget.uploadType == UploadType.InvitationStoreType) {
// temp = widget.model.storeImageList;
// }
// List<AssetEntity> imgList = await AssetPicker.pickAssets(context,
// pickerConfig: AssetPickerConfig(
// maxAssets: widget.maxImageNumber - temp.length,
// // selectedAssets: assets,
// requestType: type,
// themeColor: MyColours.color_199095));
// /// context is required, other params is optional.
// // List<AssetEntity> imgList = await PhotoPicker.pickAsset(
// // // BuildContext required
// // context: context,
// // /// The following are optional parameters.
// // themeColor: MyColours.color_199095,
// // // the title color and bottom color
// // textColor: Colors.white,
// // // text color
// // padding: 1.0,
// // // item padding
// // dividerColor: Colors.grey,
// // // divider color
// // disableColor: Colors.grey.shade300,
// // // the check box disable color
// // itemRadio: 0.88,
// // // the content item radio
// // maxSelected: widget.maxImageNumber - temp.length,
// // // max picker image count
// // // provider: I18nProvider.english,
// // provider: I18nProvider.chinese,
// // // i18n provider ,default is chinese. , you can custom I18nProvider or use ENProvider()
// // rowCount: 3,
// // // item row count
// // thumbSize: 150,
// // // preview thumb size , default is 64
// // sortDelegate: SortDelegate.common,
// // // default is common ,or you make custom delegate to sort your gallery
// // checkBoxBuilderDelegate: DefaultCheckBoxBuilderDelegate(
// // activeColor: MyColours.color_353535,
// // unselectedColor: Colors.white,
// // checkColor: MyColours.color_199095,
// // ),
// // // default is DefaultCheckBoxBuilderDelegate ,or you make custom delegate to create checkbox
// // // loadingDelegate: this,
// // // if you want to build custom loading widget,extends LoadingDelegate, [see example/lib/main.dart]
// // badgeDelegate: const DurationBadgeDelegate(),
// // // badgeDelegate to show badge widget
// // pickType: type,
// // photoPathList: pathList,
// // );
// if (imgList == null || imgList.isEmpty) {
// print("No pick item.");
// return;
// } else {
// for (int i = 0; i < imgList.length; i++) {
// var file = await imgList[i].file;
// File compressedFile = await FlutterNativeImage.compressImage(
// file.absolute.path,
// quality: 50,
// percentage: 50);
// setState(() {
// UploadImgModel imgModel = UploadImgModel();
// imgModel.file = compressedFile;
// imgModel.process = 0.01;
// temp.add(imgModel);
// });
// UploadImageUtil().startUpload(context, File(file.absolute.path),
// temp.length - 1, false, widget.model, widget.uploadType,
// countAll: imgList.length,
// callback: widget.callback,
// feastRemarkXtImageList: temp);
// // startUpload(File(file.absolute.path),
// // _uploadImageProvider.imageList.length - 1, false);
// }
// }
// }
// ///上传到七牛云
// void startUpload(File selectedFile, int index, bool needInit) async {
// final PutController putController = PutController();
// print(index);
// // 添加状态监听
// putController.addStatusListener((StorageStatus status) {
// print('状态变化: 当前任务状态:${status.toString()}');
// });
// // 添加整体进度监听
// putController.addProgressListener((percent) {
// print('${index}任务进度变化:进度:${percent.toStringAsFixed(4)}');
// _uploadImageProvider.imageList[index].process = percent;
// _uploadImageProvider.notifyListeners();
// });
// // 添加实际发送进度订阅
// putController.addSendProgressListener((percent) {
// // _onlineCheckEditProvider.imageList[index].process = percent;
// // setState(() {});
// print('${index}实际发送变化:进度:${percent.toStringAsFixed(4)}');
// });
// if (token == null || token == '') {
// await _uploadImageProvider.getQiniuInfo(context, {});
// }
// var usedToken = _uploadImageProvider.qiniuInfoSunModel.token;
// if (usedToken == null || usedToken == '') {
// print('token 不能为空');
// return;
// }
// print('开始上传文件');
// storage.putFile(
// selectedFile,
// usedToken,
// options: PutOptions(
// key: key,
// partSize: partSize,
// controller: putController,
// ),
// )
// ..then((PutResponse response) {
// print('${index}上传已完成: 原始响应数据: ${jsonEncode(response.rawData)}');
// print('------------------------');
// String imgUrl = _uploadImageProvider.qiniuInfoSunModel.domain +
// '/' +
// response.rawData['key'];
// _uploadImageProvider.imageList[index].process = 1;
// _uploadImageProvider.imageList[index].qiniuUrl = imgUrl;
// // 取消当前任务
// putController.cancel();
// // _image
// _uploadImageProvider.notifyListeners();
// })
// ..catchError((dynamic error) {
// if (error is StorageError) {
// switch (error.type) {
// case StorageErrorType.CONNECT_TIMEOUT:
// print('发生错误: 连接超时');
// break;
// case StorageErrorType.SEND_TIMEOUT:
// print('发生错误: 发送数据超时');
// break;
// case StorageErrorType.RECEIVE_TIMEOUT:
// print('发生错误: 响应数据超时');
// break;
// case StorageErrorType.RESPONSE:
// print('发生错误: ${error.message}');
// break;
// case StorageErrorType.CANCEL:
// print('发生错误: 请求取消');
// break;
// case StorageErrorType.UNKNOWN:
// print('发生错误: 未知错误');
// break;
// case StorageErrorType.NO_AVAILABLE_HOST:
// print('发生错误: 无可用 Host');
// break;
// case StorageErrorType.IN_PROGRESS:
// print('发生错误: 已在队列中');
// break;
// }
// } else {
// print('发生错误: ${error.toString()}');
// }
// print('------------------------');
// });
// }
///添加图片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(ImageSource.camera);
Navigator.pop(context);
}, Permission.camera);
},
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(ImageSource.gallery);
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: () {
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),
),
)))
],
),
);
});
}
//查看大图
_showPhotoView(BuildContext context, int index, List<String> imgs,
{isShow = false, List dashName}) async {
// if (imgs.length == 1 &&
// imgs[0] ==
// 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
// imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
// }
Utils.setBarStatus(false, color: Colors.black);
dynamic result = await showGeneralDialog(
context: context,
barrierDismissible: false,
// barrierColor: Colors.red,
barrierLabel:
MaterialLocalizations.of(context).modalBarrierDismissLabel,
transitionDuration: const Duration(milliseconds: 150),
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
Widget child = Stack(
children: <Widget>[
PhotoPreview(
initialIndex: index,
photoList: imgs,
isShow: isShow,
dashName: dashName)
],
);
return child;
});
Utils.setBarStatus(true, color: Colors.white);
}
@override
Widget build(BuildContext context) {
// _uploadImageProvider =
// Provider.of<UploadImageProvider>(context, listen: true);
// List<UploadImgModel> temp = [];
// if (widget.uploadType == UploadType.InvitationStoreType) {
// temp = widget.model.storeImageList;
// }
return _getGridImg(
// temp.length < widget.maxImageNumber ? temp.length + 1 : temp.length,
context,
// temp.length == widget.maxImageNumber ? true : false,
widget.imageModel);
}
/// 九宫格
Widget _getGridImg(context, UploadImgModel imageModel) {
return imageModel.file != null ||
(imageModel.qiniuUrl != null && imageModel.qiniuUrl != '')
? InkWell(
onTap: () {
double process;
String qiniuUrl;
// if (title == '头像') {
process = widget.imageModel.process;
qiniuUrl = widget.imageModel.qiniuUrl;
// } else {
// process = _uploadImageProvider.erweima.process;
// qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
// }
if (qiniuUrl != null && qiniuUrl != '') {
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context);
}
///没有上传完成的不可以点击
// _showPhotoView(
// context, index, widget.model.storeImageList);
// }
// }
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Stack(clipBehavior: Clip.none, children: [
imageModel.qiniuUrl != null && imageModel.qiniuUrl != ''
? Image.network(
imageModel.qiniuUrl,
fit: BoxFit.cover,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
height: ScreenUtil().setWidth(281 * 2),
)
: Image.file(
imageModel.file,
fit: BoxFit.cover,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
height: ScreenUtil().setWidth(281 * 2),
),
Positioned(
left: 0,
top: 0,
child: (imageModel.file != null) &&
imageModel.process != 1 &&
imageModel.process != 0.01
? Container(
width: ScreenUtil().screenWidth,
height: w(281),
color: MyColours.color_4D000000,
child: Center(
child: Text('上传中',
style:
TextStyle(color: MyColours.color_F8F9FD)),
),
)
: Container()),
// Offstage(
// offstage: imageModel.process < 1,
// child: Align(
// alignment: Alignment.topRight,
// child: GestureDetector(
// child: Image.asset(
// Utils.getImgPath("f_delete"),
// width: ScreenUtil().setWidth(40),
// height: ScreenUtil().setWidth(40),
// ),
// onTap: () {
// // if (widget.uploadType ==
// // UploadType.TableManagerType) {
// // if (imageModel.isUpload) {
// // //已经传到服务器,弹提醒窗口,是否删除
// // //修改之前有内容,则弹框
// // DialogUtil.cupertinoAlertDialog(context,
// // title: "确认删除",
// // content: "是否确定删除该照片,删除操作不可逆转,请谨慎操作",
// // lCallback: () {
// // print("取消");
// // }, rCallback: () {
// // print("确定");
// // widget.deleteCallback(index);
// // });
// // } else {
// // //直接删除
// // setState(() {
// // temp.removeWhere((element) =>
// // element == imageModel);
// // });
// // }
// // } else {
// // //点击删除按钮
// // setState(() {
// // temp.removeWhere((element) =>
// // element == imageModel);
// // widget.model.storeImageList.removeWhere(
// // (element) =>
// // element ==
// // widget.model.storeImageList[index]);
// // });
// // }
// },
// )),
// ),
]),
imageModel.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(),
]))
: InkWell(
onTap: () {
// if (imageModel.process == 1) {
// widget.model.storeImageList = [];
// if (imageModel.qiniuUrl != null) {
// for (int i = 0; i < temp.length; i++) {
// widget.model.storeImageList.add(temp[i].qiniuUrl);
// }
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context);
///没有上传完成的不可以点击
// _showPhotoView(
// // context, index, widget.model.storeImageList);
// }
// }
},
child: Container(
color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(281),
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 Function(BuildContext context, int index)
// var linjie = widget.maxImageNumber;
// if (isLinjie) {
// linjie = widget.maxImageNumber - 1;
// }
// if (index == count - 1 && index < linjie) {
// return InkWell(
// onTap: () {
// },
// child: Container(
// width: ScreenUtil().setWidth((widget.size - 20) * 2),
// height: ScreenUtil().setWidth((widget.size - 20) * 2),
// decoration: BoxDecoration(
// color: widget.bgColor,
// borderRadius: BorderRadius.circular(r(5))
// // border: Border.all(
// // color: MyColours.color_E0E0E0,
// // width: ScreenUtil().setWidth(2)),
// ),
// child: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// children: [
// // VEmptyView(46),
// Image.asset(
// Utils.getImgPath('f_add_image'),
// width: ScreenUtil().setWidth(64),
// height: ScreenUtil().setWidth(64),
// ),
// // VEmptyView(10),
// // Text(
// // '上传照片',
// // style: TextStyle(
// // fontSize: ScreenUtil().setSp(24),
// // color: MyColours.color_999999),
// // )
// ],
// )),
// );
// }
// return temp.length < 1
// ? Text('')
// : InkWell(
// onTap: () {
// if ( imageModel.process == 1) {
// widget.model.storeImageList = [];
// if ( imageModel.qiniuUrl != null) {
// for (int i = 0; i < temp.length; i++) {
// widget.model.storeImageList.add(temp[i].qiniuUrl);
// }
// ///没有上传完成的不可以点击
// _showPhotoView(
// context, index, widget.model.storeImageList);
// }
// }
// },
// child: Stack(
// children: [
// Stack(
// // alignment: Alignment.topRight,
// children: [
// imageModel.file != null
// ? Container(
// child: ClipRRect(
// borderRadius: BorderRadius.circular(r(5)),
// child: Image.file(
// imageModel.file,
// fit: BoxFit.cover,
// width:
// ScreenUtil().setWidth(widget.size * 2),
// height:
// ScreenUtil().setWidth(widget.size * 2),
// ),
// ))
// : ClipRRect(
// borderRadius: BorderRadius.circular(r(5)),
// child: CachedNetworkImage(
// imageUrl: imageModel.qiniuUrl,
// fit: BoxFit.cover,
// width:
// ScreenUtil().setWidth(widget.size * 2),
// height:
// ScreenUtil().setWidth(widget.size * 2),
// ),
// ),
// ],
// ),
// Offstage(
// offstage: imageModel.process == 1,
// child: Progress(
// imageModel.process,
// size: widget.size,
// ),
// )
// ],
// ));
// });
// }
// }
}
}
... ...
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/pages/coupon/coupon_item.dart';
import 'package:one_key/provider/SmsModel.dart';
import 'package:one_key/provider/coupon_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:sendsms/sendsms.dart';
// import 'package:sendsms/sendsms.dart';
import 'package:flutter_sms/flutter_sms.dart';
/**
* 优惠券单选页面
*/
class MarkingCouponSelectPage extends StatefulWidget {
MarkingCouponSelectPage({Key key}) : super(key: key);
@override
_MarkingCouponSelectPageState createState() =>
_MarkingCouponSelectPageState();
}
class _MarkingCouponSelectPageState extends State<MarkingCouponSelectPage> {
EasyRefreshController _controller = EasyRefreshController();
CouponProvider couponProvider;
///获取优惠券列表数据(status == 1)
_couponNetworkData({bool isShowLoading = true}) async {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
};
params['status'] = '1';
await couponProvider.getCustomerSelectActivityMarking(context, params,
isShowLoading: isShowLoading);
}
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
// if (!couponProvider.hasModify) {
_couponNetworkData();
// } else {
// couponProvider.pageStateSelect = PageState.Success;
// // couponProvider.notifyListeners();
// }
});
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'优惠券',
onTap: () {
Navigator.pop(context);
},
),
body: WillPopScope(
child: Column(
children: [
Expanded(child: Consumer<CouponProvider>(
builder: (context, model, _) {
if (model.pageStateSelect != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateSelect,
callback: () {
_couponNetworkData();
// offset = 0;
// getMessage(showLoading: true);
},
emptyMsg: "暂时没有列表信息哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return EasyRefresh.custom(
controller: _controller,
shrinkWrap: true,
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return VEmptyView(40);
}, childCount: 1),
),
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
return InkWell(
onTap: () {
//改这里 ******8
couponProvider.couponListSelect
.forEach((element) {
element.isCheck = false;
});
couponProvider.couponListSelect[index].isCheck =
true;
},
// child: Row(
// children: [
// HEmptyView(30),
// !widget.hasModify
// ? Checkbox(
// value: couponProvider
// .couponListSelect[index].isCheck,
// checkColor: MyColours.color_ffffff,
// activeColor: MyColours.app_main,
// onChanged: (bool value) {},
// )
// : Container(),
// Image.asset(
// couponProvider.listData[index]['checked']
// ? 'assets/select.png'
// : 'assets/unselect.png',
// width: ScreenUtil().setWidth(44)),
child: CouponItem(
from: 'select',
showCheck: true,
couponSonModel:
couponProvider.couponListSelect[index],
onPressed: () {
// bool old = couponProvider
// .couponListSelect[index].isCheck;
//改这里 ******8
couponProvider.couponListSelect
.forEach((element) {
element.isCheck = false;
});
couponProvider
.couponListSelect[index].isCheck = true;
// couponProvider
// .couponListSelect[index].isCheck = !old;
setState(() {});
}));
}, childCount: couponProvider.couponListSelect.length),
)
],
// onRefresh: () async {
// // offset = 0;
// // getMessage(showLoading: false);
// },
// onLoad: () async {
// // offset++;
// // getMessage(showLoading: false);
// },
);
}
},
)),
VEmptyView(20),
couponProvider.pageStateSelect == PageState.Success
? Padding(
padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () async {
Navigator.pop(context);
},
text: '确定',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
: Container()
],
),
onWillPop: () async {
Utils.changeStatusColor(color: Colors.transparent);
Navigator.of(context).pop();
return true;
},
),
);
}
}
... ...
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:image_picker/image_picker.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
import '../../../../models/upload_img_model.dart';
import '../../../../provider/coupon_provider.dart';
import '../../../../provider/marketing_center_provider.dart';
import '../../../../provider/upload_img_provider.dart';
import '../../../../provider/user_model.dart';
import '../../../../res/colors.dart';
import '../../../../route/navigator_util.dart';
import '../../../../utils/screen_util.dart';
import '../../../../utils/upload_image_util.dart';
import '../../../../widgets/MyDivider.dart';
import '../../../../widgets/round_button.dart';
import '../../../../widgets/system_app_bar.dart';
... ... @@ -25,50 +37,221 @@ class MarkingInteractionPage extends StatefulWidget {
class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
TextEditingController welcomeTextC = TextEditingController(); //欢迎语
FocusNode welcomeTextNode = FocusNode(); //
CouponProvider couponProvider;
final picker = ImagePicker();
UploadImageProvider _uploadImageProvider;
MarketingCenterProvider marketingCenterProvider;
bool is_transpond = false; //转发邀请函
bool is_arrival = false; //确认到店
bool is_online_book = false; //在线预订
bool is_order = false; //提前点餐
bool is_link = false; //充值优惠活动链接
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
// _couponNetworkData();
});
}
@override
void dispose() {
_uploadImageProvider.firstImage = UploadImgModel();
super.dispose();
}
///获取优惠券列表数据(status == 1)
_couponNetworkData({bool isShowLoading = true}) async {
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid,
};
params['status'] = '1';
await couponProvider.getCustomerSelectActivityMarking(context, params,
isShowLoading: isShowLoading);
}
///客户互动及店铺推广
Widget _storeItemWidget(String title, String content, {bool select = false}) {
return Container(
margin: EdgeInsets.only(top: w(12), left: w(32)),
padding: EdgeInsets.only(bottom: w(16)),
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(width: w(0.5), color: MyColours.color_E7E7E7))),
child: Column(
children: [
Row(
Widget _storeItemWidget(String title, String content,
{bool select = false, GestureTapCallback onTap}) {
return InkWell(
onTap: onTap,
child: Container(
margin: EdgeInsets.only(top: w(12), left: w(32)),
padding: EdgeInsets.only(bottom: w(16)),
decoration: BoxDecoration(
border: Border(
bottom: BorderSide(
width: w(0.5), color: MyColours.color_E7E7E7))),
child: Column(
children: [
Image.asset(
Utils.getImgPath(select ? 'f_select' : 'f_select_not'),
width: w(20),
Row(
children: [
Image.asset(
Utils.getImgPath(select ? 'f_select' : 'f_select_not'),
width: w(20),
),
HEmptyView(20),
Text(
title,
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
)
],
),
HEmptyView(20),
Text(
title,
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
VEmptyView(20),
Padding(
padding: EdgeInsets.symmetric(horizontal: w(16)),
child: Text(
content,
style: TextStyle(
height: 1.5,
fontSize: font(14),
color: MyColours.color_515151),
),
)
],
),
VEmptyView(20),
Padding(
padding: EdgeInsets.symmetric(horizontal: w(16)),
child: Text(
content,
style: TextStyle(
height: 1.5,
fontSize: font(14),
color: MyColours.color_515151),
));
}
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
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;
// }
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), 4, true, _uploadImageProvider);
}
}
///添加图片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);
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);
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: () {
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),
),
)))
],
),
)
],
),
);
);
});
}
///标题
... ... @@ -197,52 +380,182 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
///营销推广
Widget _markingOtherItem({VoidCallback onPressed, bool select = false}) {
return Container(
color: MyColours.color_ffffff,
margin: EdgeInsets.only(left: w(21), top: w(12), right: w(21)),
child: Column(children: [
Row(
children: [
Image.asset(
Utils.getImgPath(select ? 'f_select' : 'f_select_not'),
width: w(20),
),
HEmptyView(20),
Text(
'推荐店内充值优惠活动链接',
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
)
],
),
InkWell(
onTap: () {
setState(() {
is_link = !is_link;
});
},
child: Row(
children: [
Image.asset(
Utils.getImgPath(is_link ? 'f_select' : 'f_select_not'),
width: w(20),
),
HEmptyView(20),
Text(
'推荐店内充值优惠活动链接',
style: TextStyle(
fontSize: font(14), color: MyColours.color_515151),
)
],
)),
VEmptyView(24),
Container(
height: w(180),
child: true
? Image.network(
'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
fit: BoxFit.contain,
)
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
Utils.getImgPath('add_img_grey'),
width: w(63),
),
VEmptyView(28),
Padding(
padding: EdgeInsets.symmetric(
vertical: w(10),
),
child: Text(
'点击上传餐厅logo',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(14),
fontWeight: FontWeight.bold),
height: w(180),
child: _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(() {});
_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 != ''
? Image.network(
_uploadImageProvider.firstImage.qiniuUrl,
fit: BoxFit.cover,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
height: w(180),
)
: Image.file(
_uploadImageProvider.firstImage.file,
fit: BoxFit.cover,
width: double.infinity,
// width: ScreenUtil()
// .setWidth(imgSize * 2),
height: w(180),
),
Positioned(
left: 0,
top: 0,
right: 0,
child: (_uploadImageProvider.firstImage.file !=
null) &&
_uploadImageProvider.firstImage.process !=
1 &&
_uploadImageProvider.firstImage.process !=
0.01
? Container(
width: ScreenUtil().screenWidth,
height: w(180),
color: MyColours.color_4D000000,
child: Center(
child: Text('上传中',
style: TextStyle(
color: MyColours.color_F8F9FD)),
),
)
: Container()),
]),
_uploadImageProvider.firstImage.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(),
]))
: 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);
_openModalBottomSheet(context);
},
child: Container(
// color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(180),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
Utils.getImgPath('add_img_grey'),
width: w(63),
),
)
],
VEmptyView(28),
Padding(
padding: EdgeInsets.symmetric(
vertical: w(10),
),
child: Text(
'点击上传餐厅logo',
style: TextStyle(
color: MyColours.color_999999,
fontSize: font(14),
fontWeight: FontWeight.bold),
),
)
],
),
)),
),
Container(
width: double.infinity,
alignment: Alignment.center,
... ... @@ -322,6 +635,12 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
@override
Widget build(BuildContext context) {
couponProvider = Provider.of<CouponProvider>(context, listen: true);
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -338,24 +657,50 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
children: [
_headItem('客户互动及店铺推广'),
_storeItemWidget('允许顾客转发邀请函给同行客人。',
'同行客人可以从电子邀请函了解预订信息、一键导航到店,快速联系餐厅服务人员。还可以了解更多餐厅介绍、各种活动。'),
'同行客人可以从电子邀请函了解预订信息、一键导航到店,快速联系餐厅服务人员。还可以了解更多餐厅介绍、各种活动。',
onTap: () {
setState(() {
is_transpond = !is_transpond;
});
}, select: is_transpond),
_storeItemWidget('向被邀请客人开放“确认到店”功能。',
'被邀客人点击确认到店后,方便请客人了解被邀客人是否确认,同时,被邀客人的信息会加入到餐厅客户池中,方便餐厅维护客户。'),
'被邀客人点击确认到店后,方便请客人了解被邀客人是否确认,同时,被邀客人的信息会加入到餐厅客户池中,方便餐厅维护客户。',
onTap: () {
setState(() {
is_arrival = !is_arrival;
});
}, select: is_arrival),
_storeItemWidget('向客人开放“在线预订”功能。',
'客人和被邀客人可以通过邀请函,直接点击在线预订,向商家提交预订需求,无需通过电话,经理可以详细了解客户需求并安排预订。'),
'客人和被邀客人可以通过邀请函,直接点击在线预订,向商家提交预订需求,无需通过电话,经理可以详细了解客户需求并安排预订。',
onTap: () {
setState(() {
is_online_book = !is_online_book;
});
}, select: is_online_book),
_storeItemWidget('向被邀请客人开放“提前点餐”功能。',
'请客人从预定安排直接预先选菜,到店后确认下单,无需服务员花费时间给客户点餐,可以为餐厅节源提效。'),
'请客人从预定安排直接预先选菜,到店后确认下单,无需服务员花费时间给客户点餐,可以为餐厅节源提效。',
onTap: () {
setState(() {
is_order = !is_order;
});
}, select: is_order),
VEmptyView(24),
_headItem('预订安排中附带的营销推广'),
VEmptyView(24),
_markingItem('推荐店内代金券优惠', '200元代金券', '周一到周五可用,消费满600元可用一张。',
'100', '5折'),
_markingItem(
'推荐店内充值单一优惠活动',
'充1000赠300',
'会员充值满1000元赠余额200元;\n会员充值满1000元赠余额200元;\n会员充值满1000元赠余额200元;',
'',
''),
// couponProvider.couponListSelect.length > 0
// ? _markingItem('推荐店内代金券优惠', couponProvider.couponListSelect[0].aname,
// couponProvider.couponListSelect[0].desc, '100', '5折', onPressed: () {
// NavigatorUtil.goMarkingCouponSelectPage(
// context,
// );
// })
// : SizedBox(),
// _markingItem(
// '推荐店内充值单一优惠活动',
// '充1000赠300',
// '会员充值满1000元赠余额200元;\n会员充值满1000元赠余额200元;\n会员充值满1000元赠余额200元;',
// '',
// ''),
_markingOtherItem()
],
),
... ... @@ -373,7 +718,47 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () {},
onPressed: () async {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
if (_uploadImageProvider.firstImage.qiniuUrl == null) {
Utils.showToast('请上传餐厅logo!');
return false;
}
if (_uploadImageProvider.firstImage.process < 1) {
Utils.showToast('正在上传餐厅logo!,请稍等');
return false;
}
if (welcomeTextC.text.trim().length == 0) {
Utils.showToast('请输入输入餐厅欢迎语!');
return false;
}
//接口
Map marketingData = {
'is_transpond': is_transpond ? '1' : '0',
'is_arrival': is_arrival ? '1' : '0',
'is_online_book': is_online_book ? '1' : '0',
'is_order': is_order ? '1' : '0',
'is_link': is_link ? '1' : '0',
'wecomle': welcomeTextC.text,
'logo': _uploadImageProvider.firstImage.qiniuUrl,
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'marketing': json.encode(marketingData)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params,
showLoading: true);
if (success) {
Utils.showToast('保存成功');
Navigator.pop(context);
}
},
),
)
],
... ...
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/widgets/v_empty_view.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/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';
import 'img_picker_invitation_widget.dart';
/***
*
... ... @@ -34,6 +42,11 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
TextEditingController storeIntroduceC = TextEditingController();
FocusNode storeIntroduceNode = FocusNode();
MarketingCenterProvider marketingCenterProvider;
UploadImageProvider _uploadImageProvider;
ScrollController controller = ScrollController();
@override
void initState() {
super.initState();
... ... @@ -45,6 +58,15 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
});
}
@override
void dispose() {
_uploadImageProvider.storeImage1 = UploadImgModel();
_uploadImageProvider.storeImage2 = UploadImgModel();
_uploadImageProvider.storeImage3 = UploadImgModel();
_uploadImageProvider.storeImage4 = UploadImgModel();
super.dispose();
}
///图文合并,图文分开,无文字
Widget _selectBtnWidget() {
return Container(
... ... @@ -212,75 +234,41 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
);
}
Widget _uploadImage(bool hasupload, {EdgeInsets padding = EdgeInsets.zero}) {
return InkWell(
onTap: () {},
child: hasupload
? InkWell(
onTap: () {
print('object');
},
child: Stack(alignment: Alignment.bottomCenter, children: [
Image.network(
'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
fit: BoxFit.cover,
height: w(280),
),
Container(
width: w(150),
height: w(30),
color: MyColours.color_4D000000,
margin: padding,
alignment: Alignment.center,
child: Text(
'点击图片可以更换',
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: font(14),
fontWeight: FontWeight.bold),
)),
]))
: Container(
color: MyColours.color_d9d9d9,
width: double.infinity,
height: w(280),
padding: padding,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
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 Column(
children: [
_uploadImage(false),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 5,
imageModel: _uploadImageProvider.storeImage1),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 6,
imageModel: _uploadImageProvider.storeImage2,
),
VEmptyView(18),
_uploadImage(false),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 7,
imageModel: _uploadImageProvider.storeImage3),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
model: _uploadImageProvider,
index: 8,
uploadType: UploadType.InvitationStoreType,
imageModel: _uploadImageProvider.storeImage4,
),
],
);
}
... ... @@ -296,10 +284,13 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
children: [
Stack(
children: [
_uploadImage(
false,
padding: EdgeInsets.only(left: w(160)),
),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 5,
padding: EdgeInsets.only(left: w(160)),
imageModel: _uploadImageProvider.storeImage1),
Positioned(
child: _introduceWidget(
EdgeInsets.only(
... ... @@ -322,11 +313,26 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
],
),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 6,
imageModel: _uploadImageProvider.storeImage2),
VEmptyView(18),
_uploadImage(false),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 7,
imageModel: _uploadImageProvider.storeImage3),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 8,
imageModel: _uploadImageProvider.storeImage4),
],
);
}
... ... @@ -339,19 +345,43 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
_introduceWidget(EdgeInsets.all(w(15)),
boxDecoration: BoxDecoration(color: MyColours.color_ffffff)),
VEmptyView(18),
_uploadImage(false),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 5,
imageModel: _uploadImageProvider.storeImage1),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 6,
imageModel: _uploadImageProvider.storeImage2),
VEmptyView(18),
_uploadImage(false),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 7,
imageModel: _uploadImageProvider.storeImage3),
VEmptyView(18),
_uploadImage(true),
ImgPickerInvitationWidget(
scrollController: controller,
uploadType: UploadType.InvitationStoreType,
model: _uploadImageProvider,
index: 8,
imageModel: _uploadImageProvider.storeImage4),
],
);
}
@override
Widget build(BuildContext context) {
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
marketingCenterProvider =
Provider.of<MarketingCenterProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
... ... @@ -364,6 +394,7 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
children: [
Expanded(
child: SingleChildScrollView(
controller: controller,
child: Column(
children: [
_selectBtnWidget(),
... ... @@ -401,7 +432,60 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
fontSize: 34,
height: w(40),
isBold: true,
onPressed: () {},
onPressed: () async {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
if ((currIndex == 1 || currIndex == 2) &&
storeIntroduceC.text.trim().length == 0) {
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 storeData = {
'style': currIndex.toString(),
'seller_name': sellername,
'introduce': storeIntroduceC.text,
'images': json.encode(images)
};
Map<String, String> params = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'store': json.encode(storeData)
};
bool success = await marketingCenterProvider
.setSellerTemplateConf(context, params,
showLoading: true);
if (success) {
Utils.showToast('保存成功');
Navigator.pop(context);
}
},
),
)
],
... ...
... ... @@ -338,6 +338,62 @@ class CouponProvider with ChangeNotifier {
}
///客户经理获取所创建活动列表(选择优惠券)
Future<List<CouponSunModel>> getCustomerSelectActivityMarking(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
if (isShowLoading) {
pageStateSelect = PageState.Loading;
notifyListeners();
}
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_customer_activity,
data: params, showLoading: false)
.catchError((error) {
print(error.toString());
if (error is MyError) {
switch (error.type) {
case 1:
pageStateSelect = PageState.ConnectivityError;
break;
case 2:
pageStateSelect = PageState.ConnectivityTimeOut;
break;
default:
pageStateSelect = PageState.ConnectivityError;
break;
}
}
notifyListeners();
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data.isEmpty) {
pageStateSelect = PageState.Empty;
} else {
pageStateSelect = PageState.Success;
}
couponListSelect = CouponModel.fromJson(baseResp.responseData).data;
List<CouponSunModel> temp = [];
for (int i = 0; i < couponListSelect.length; i++) {
if (couponListSelect[i].isType == '1' &&
couponListSelect[i].isExamine == '1') {
//店铺优惠券 && 可核销 && dang
temp.add(couponListSelect[i]);
}
}
couponListSelect = temp;
notifyListeners();
} else {
pageStateSelect = PageState.ConnectivityError;
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
}
return couponListSelect;
}
///客户经理获取所创建活动列表(选择优惠券)
Future<List<CouponSunModel>> getCustomerSelectActivity(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
... ...
... ... @@ -20,6 +20,7 @@ class UploadImageProvider extends ChangeNotifier {
UploadImgModel mentou = UploadImgModel(); //店铺信息----门头照片
UploadImgModel dish = UploadImgModel(); //菜品
UploadImgModel firstImage = UploadImgModel(); //预订安排首图
double imgSizefirstImage = 282;
double imgSizeTouxiang = 76;
double imgSizeErweima = 22;
... ... @@ -32,6 +33,10 @@ class UploadImageProvider extends ChangeNotifier {
List<UploadImgModel> feastRemarkDjImageList = []; //宴会备注图片信息列表----定金
List<UploadImgModel> feastRemarkContractImageList = []; //宴会备注图片信息列表----合同
List<UploadImgModel> feastRemarkInvoiceImageList = []; //宴会备注图片信息列表----发票
UploadImgModel storeImage1 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage2 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage3 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage4 = UploadImgModel(); //预订安排介绍
int countUpload = 0;
UploadImageProvider() {
... ...
... ... @@ -1445,4 +1445,13 @@ class NavigatorUtil {
return _navigateTo(context, "${Routes.marking_interaction_page}",
replace: replace);
}
///预订安排通知定制------优惠券选择
static Future<dynamic> goMarkingCouponSelectPage(
BuildContext context, {
replace = false,
}) {
return _navigateTo(context, "${Routes.marking_coupon_select_page}",
replace: replace);
}
}
... ...
... ... @@ -182,6 +182,7 @@ import '../pages/my/marketing_center/book_notification/book_info_page.dart';
import '../pages/my/marketing_center/book_notification/chef_introduce_page.dart';
import '../pages/my/marketing_center/book_notification/dish_show_page.dart';
import '../pages/my/marketing_center/book_notification/first_image_page.dart';
import '../pages/my/marketing_center/book_notification/marking_coupon_select_page.dart';
import '../pages/my/marketing_center/book_notification/store_introduce_page.dart';
import '../pages/my/marketing_center/marketing_center_home_page.dart';
import '../pages/my/plan_dish/final_plan_dish_page.dart';
... ... @@ -2315,12 +2316,15 @@ var bookInfoPageHandle = new Handler(
// String idstr = params["idstr"].first;
// NotebookDetail detailEntity = NotebookDetail.fromJson(json
// .decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
return ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(),
child: ChangeNotifierProvider<ChooseTableModel>(
create: (_) => ChooseTableModel(),
child: ChangeNotifierProvider<StoreBaseIndoProvider>(
create: (_) => StoreBaseIndoProvider(), child: BookInfoPage())));
create: (_) => StoreBaseIndoProvider(),
child: ChangeNotifierProvider<BaseIndoProvider>(
create: (_) => BaseIndoProvider(), child: BookInfoPage()))));
});
//我的----营销中心-店铺介绍
... ... @@ -2363,3 +2367,14 @@ var markingInteractionPageHandle = new Handler(
create: (_) => MarketingCenterProvider(),
child: MarkingInteractionPage());
});
//我的----营销中心-优惠券选择
var markingCouponSelectPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
// String idstr = params["idstr"].first;
// NotebookDetail detailEntity = NotebookDetail.fromJson(json
// .decode(FluroConvertUtils.fluroCnParamsDecode(params["detail"].first)));
return ChangeNotifierProvider<MarketingCenterProvider>(
create: (_) => MarketingCenterProvider(),
child: MarkingCouponSelectPage());
});
... ...
... ... @@ -202,6 +202,9 @@ class Routes {
static String marking_interaction_page =
"/marking_interaction_page"; //预订安排通知定制------客户互动及店铺推广
static String marking_coupon_select_page =
"/marking_coupon_select_page"; //预订安排通知定制------优惠券选择
static void configureRoutes(FluroRouter router) {
router.notFoundHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<String>> params) {
... ... @@ -395,5 +398,10 @@ class Routes {
router.define(dish_show_page, handler: dishShowPageHandle);
router.define(marking_interaction_page,
handler: markingInteractionPageHandle);
router.define(marking_coupon_select_page,
handler: markingCouponSelectPageHandle);
}
}
... ...
... ... @@ -22,7 +22,8 @@ enum UploadType {
FeastRemarkXtType, //宴会备注--选台
FeastRemarkDjType, //宴会备注--定金
FeastRemarkContractType, //宴会备注--合同
FeastRemarkInvoiceType //宴会备注--发票
FeastRemarkInvoiceType, //宴会备注--发票
InvitationStoreType //预订安排定制----店铺图片
}
... ... @@ -91,6 +92,10 @@ class UploadImageUtil {
//宴会备注 ---发票
uploadImageProvider.feastRemarkInvoiceImageList[index].process =
percent;
} else if (uploadType == UploadType.InvitationStoreType) {
//宴会备注 ---发票
uploadImageProvider.feastRemarkInvoiceImageList[index].process =
percent;
}
uploadImageProvider.notifyListeners();
... ... @@ -169,6 +174,11 @@ class UploadImageUtil {
uploadImageProvider.feastRemarkInvoiceImageList[index].process = 1;
uploadImageProvider.feastRemarkInvoiceImageList[index].qiniuUrl =
imgUrl;
} else if (uploadType == UploadType.InvitationStoreType) {
//宴会备注 ---发票
uploadImageProvider.feastRemarkInvoiceImageList[index].process = 1;
uploadImageProvider.feastRemarkInvoiceImageList[index].qiniuUrl =
imgUrl;
}
// 取消当前任务
... ... @@ -237,6 +247,18 @@ class UploadImageUtil {
} else if (index == 4) {
//4 预订安排首图
uploadImageProvider.firstImage.process = percent;
} else if (index == 5) {
//4 预订安排首图
uploadImageProvider.storeImage1.process = percent;
} else if (index == 6) {
//4 预订安排首图
uploadImageProvider.storeImage2.process = percent;
} else if (index == 7) {
//4 预订安排首图
uploadImageProvider.storeImage3.process = percent;
} else if (index == 8) {
//4 预订安排首图
uploadImageProvider.storeImage4.process = percent;
} else {
//1 二维码
uploadImageProvider.erweima.process = percent;
... ... @@ -296,11 +318,31 @@ class UploadImageUtil {
uploadImageProvider.dish.qiniuUrl = imgUrl;
uploadImageProvider.dish.file = null;
uploadImageProvider.notifyListeners();
}else if (index == 4) {
} else if (index == 4) {
uploadImageProvider.firstImage.process = 1;
uploadImageProvider.firstImage.qiniuUrl = imgUrl;
uploadImageProvider.firstImage.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 5) {
uploadImageProvider.storeImage1.process = 1;
uploadImageProvider.storeImage1.qiniuUrl = imgUrl;
uploadImageProvider.storeImage1.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 6) {
uploadImageProvider.storeImage2.process = 1;
uploadImageProvider.storeImage2.qiniuUrl = imgUrl;
uploadImageProvider.storeImage2.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 7) {
uploadImageProvider.storeImage3.process = 1;
uploadImageProvider.storeImage3.qiniuUrl = imgUrl;
uploadImageProvider.storeImage3.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 8) {
uploadImageProvider.storeImage4.process = 1;
uploadImageProvider.storeImage4.qiniuUrl = imgUrl;
uploadImageProvider.storeImage4.file = null;
uploadImageProvider.notifyListeners();
}
})
..catchError((dynamic error) {
... ...