Commit 37268afdefbbf079f61e45fbac701cd54dc96707

Authored by wdn127929
1 parent 040e87c1

存酒and预订安排定制OK,已上线

Showing 71 changed files with 737 additions and 326 deletions
... ... @@ -14,16 +14,16 @@ if (flutterRoot == null) {
def flutterVersionCode = "463"
def flutterVersionCode = "466"
if (flutterVersionCode == null) {
flutterVersionCode = '463'
flutterVersionCode = '466'
}
def flutterVersionName = "4.6.3"
def flutterVersionName = "4.6.6"
if (flutterVersionName == null) {
flutterVersionName = '4.6.3'
flutterVersionName = '4.6.6'
}
... ...

3.92 KB | W: | H:

3.32 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

2.27 KB | W: | H:

2.05 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

5.64 KB | W: | H:

4.84 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

9.47 KB | W: | H:

8.73 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

14.3 KB | W: | H:

11.2 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.84 KB | W: | H:

10.6 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

30.4 KB | W: | H:

8.61 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
... ... @@ -505,7 +505,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 463;
CURRENT_PROJECT_VERSION = 466;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -520,7 +520,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 4.6.3;
MARKETING_VERSION = 4.6.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -651,7 +651,7 @@
CODE_SIGN_ENTITLEMENTS = "Runner/一键订Debug.entitlements";
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 463;
CURRENT_PROJECT_VERSION = 466;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -666,7 +666,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 4.6.3;
MARKETING_VERSION = 4.6.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -687,7 +687,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 463;
CURRENT_PROJECT_VERSION = 466;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_MODE = release;
... ... @@ -702,7 +702,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 4.6.3;
MARKETING_VERSION = 4.6.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = Runner;
PROVISIONING_PROFILE_SPECIFIER = "";
... ...
{
"images" : [
{
"filename" : "Icon-App-20x20@2x.png",
"filename" : "40.jpg",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "Icon-App-20x20@3x.png",
"filename" : "60.jpg",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "Icon-App-29x29@1x.png",
"filename" : "29.jpg",
"idiom" : "iphone",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@2x.png",
"filename" : "58.jpg",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@3x.png",
"filename" : "87.jpg",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "Icon-App-40x40@2x.png",
"filename" : "80 1.jpg",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-App-40x40@3x.png",
"filename" : "120 1.jpg",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "Icon-App-60x60@2x.png",
"filename" : "120.jpg",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "Icon-App-180x180@1x.png",
"filename" : "180.jpg",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "Icon-App-20x20@1x.png",
"filename" : "20 1.jpg",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "Icon-App-20x20@2x.png",
"filename" : "40 1.jpg",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "Icon-App-29x29@1x.png",
"filename" : "29 1.jpg",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "Icon-App-29x29@2x.png",
"filename" : "58 1.jpg",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "Icon-App-40x40@1x.png",
"filename" : "40 2.jpg",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "Icon-App-80x80@1x.png",
"filename" : "80 2.jpg",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "Icon-App-76x76@1x.png",
"filename" : "76.jpg",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "Icon-App-76x76@2x.png",
"filename" : "152.jpg",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "Icon-App-83.5x83.5@2x.png",
"filename" : "167.jpg",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "Icon-App-1024x1024@1x.png",
"filename" : "1024.jpg",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
... ...
... ... @@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<true/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
... ...
... ... @@ -16,17 +16,10 @@ class MarkDataModel extends Object {
MarkSignboardModel signboard;
MarkMarketingModel marketing;
String isNewTemplate;
MarkDataModel(
this.id,
this.sid,
this.home,
this.reserve,
this.store,
this.chef,
this.signboard,
this.marketing,
);
MarkDataModel(this.id, this.sid, this.home, this.reserve, this.store,
this.chef, this.signboard, this.marketing, this.isNewTemplate);
MarkDataModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
... ... @@ -54,6 +47,8 @@ class MarkDataModel extends Object {
marketing = json['marketing'] != null
? new MarkMarketingModel.fromJson(convert.jsonDecode(json['marketing']))
: null; //
isNewTemplate = json['is_new_template'] ?? "0";
}
Map<String, dynamic> toJson() {
... ... @@ -67,6 +62,7 @@ class MarkDataModel extends Object {
data['chef'] = this.chef;
data['signboard'] = this.signboard;
data['marketing'] = this.marketing;
data['is_new_template'] = this.isNewTemplate;
return data;
}
}
... ...
... ... @@ -388,8 +388,10 @@ class HttpUrl {
static const String get_store_wine_check_list =
"?service=App.Reserve.GetStoreWineCheckList"; // 获取取酒记录
// static const String send_vc_code =
// "?service=App.SendSMS.SendVcCode"; // 向指定手机号码发送验证码
static const String set_confing =
"?service=App.Reserve.SetConfing"; // 设置订座商家配置信息
// static const String send_vc_code =
// "?service=App.SendSMS.SendVcCode"; // 向指定手机号码发送验证码
}
... ...
import 'dart:io';
import 'package:flutter/material.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/models/upload_img_model.dart';
... ... @@ -188,7 +189,11 @@ class _CreateStorePageState extends State<CreateStorePage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(String title, UploadImgModel imgModel,
imageSource, UploadImageProvider model) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -200,8 +205,13 @@ class _CreateStorePageState extends State<CreateStorePage> {
if (pickedFile != null) {
model.imgSizeTouxiang = 76;
model.touxiang.qiniuUrl = null;
UploadImageUtil().startUpload(context, File(pickedFile.path),
title == '头像' ? 0 : 1, true, model, UploadType.StoreFrontUploadType);
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(context, file, title == '头像' ? 0 : 1, true,
model, UploadType.StoreFrontUploadType);
}
}
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_native_image/flutter_native_image.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';
... ... @@ -73,9 +74,13 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
///#相机拍照,单图选择
//////#相机拍照,单图选择
Future _getImageFromPictureOrCamera(ImageSource imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
// String ddd = Utils.getPicSuffix(pickedFile.path);
// print(ddd);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
UploadImgModel imgModel = UploadImgModel();
... ... @@ -88,9 +93,14 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
}
});
if (pickedFile != null) {
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context,
File(pickedFile.path),
file,
widget.model.imageListDenvironment.length - 1,
true,
widget.model,
... ... @@ -100,7 +110,7 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
///视频
Future _getVideoFromPictureOrCamera(ImageSource imageSource) async {
final pickedFile = await picker.getVideo(
final pickedFile = await picker.pickVideo(
source: imageSource, maxDuration: const Duration(seconds: 15));
String ddd = Utils.getPicSuffix(pickedFile.path);
print(ddd);
... ... @@ -120,6 +130,10 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
);
if (pickedFile != null) {
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
UploadImgModel imgModel = UploadImgModel();
imgModel.file = File(pickedFile.path);
imgModel.process = 0.01;
... ... @@ -128,9 +142,14 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
imgModel.duration = duration;
widget.model.imageListDenvironment.add(imgModel);
setState(() {});
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context,
File(pickedFile.path),
file,
widget.model.imageListDenvironment.length - 1,
true,
widget.model,
... ... @@ -205,9 +224,19 @@ class _VideoPickerWidgetState extends DisposableState<VideoPickerWidget> {
imgModel.fileType = FileType.image;
widget.model.imageListDenvironment.add(imgModel);
});
bool need = await Utils.sizeNeed(file);
if (need) {
File compressedFile = await FlutterNativeImage.compressImage(
file.path,
quality: 50,
percentage: 50);
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context,
File(file.absolute.path),
file,
widget.model.imageListDenvironment.length - 1,
false,
widget.model,
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_native_image/flutter_native_image.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
... ... @@ -386,7 +387,11 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(
String title, UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -403,8 +408,13 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
_uploadImageProvider.imgSizeErweima = 76;
_uploadImageProvider.erweima.qiniuUrl = null;
}
UploadImageUtil().startUploadOnly(context, File(pickedFile.path),
title == '头像' ? 0 : 1, true, _uploadImageProvider);
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUploadOnly(
context, file, title == '头像' ? 0 : 1, true, _uploadImageProvider);
}
}
... ...
... ... @@ -231,7 +231,7 @@
// ///#相机拍照,单图选择
// Future _getFromPictureOrCamera(
// String title, UploadImgModel imgModel, imageSource) async {
// final pickedFile = await picker.getImage(source: imageSource);
// final pickedFile = await picker.pickImage(source: imageSource);
// setState(() {
// if (pickedFile != null) {
// imgModel.file = File(pickedFile.path);
... ...
... ... @@ -436,8 +436,8 @@ class _BookInfoPageState extends State<BookInfoPage> {
'${marketingCenterProvider.tableOuterList[0].list[0].tableNum}')
: SizedBox(),
VEmptyView(10),
_itemTitleAndSubTtile('地址', '${address}'),
VEmptyView(10),
// _itemTitleAndSubTtile('地址', '${address}'),
// VEmptyView(10),
addParking
? _itemTitleAndSubTtile('停车', '${parkingIncoC.text}')
: SizedBox(),
... ...
... ... @@ -3,6 +3,7 @@ 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';
... ... @@ -101,7 +102,11 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -118,8 +123,13 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
// _uploadImageProvider.imgSizeErweima = 76;
_uploadImageProvider.firstImage.qiniuUrl = null;
// }
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), 4, true, _uploadImageProvider);
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);
}
}
... ... @@ -455,9 +465,9 @@ class _ChefIntroducePageState extends State<ChefIntroducePage> {
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
_uploadImageProvider.firstImage.qiniuUrl = null;
_uploadImageProvider.firstImage.process = 0;
setState(() {});
// _uploadImageProvider.firstImage.qiniuUrl = null;
// _uploadImageProvider.firstImage.process = 0;
// setState(() {});
FocusScope.of(context).requestFocus(FocusNode());
_openModalBottomSheet(context);
// Utils.getPickPermission(context, () {
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.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/provider/marketing_center_provider.dart';
... ... @@ -276,7 +277,11 @@ class _FirstImagePageState extends State<FirstImagePage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -293,8 +298,13 @@ class _FirstImagePageState extends State<FirstImagePage> {
// _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(pickedFile.path), 4, true, _uploadImageProvider);
context, file, 4, true, _uploadImageProvider);
}
}
... ... @@ -598,9 +608,9 @@ class _FirstImagePageState extends State<FirstImagePage> {
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
_uploadImageProvider.firstImage.qiniuUrl = null;
_uploadImageProvider.firstImage.process = 0;
setState(() {});
// _uploadImageProvider.firstImage.qiniuUrl = null;
// _uploadImageProvider.firstImage.process = 0;
// setState(() {});
_openModalBottomSheet(context);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
... ...
... ... @@ -104,7 +104,11 @@ class _ImgPickerInvitationWidgetState
///#相机拍照,单图选择
Future _getFromPictureOrCamera(imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
widget.imageModel.file = File(pickedFile.path);
... ... @@ -121,8 +125,13 @@ class _ImgPickerInvitationWidgetState
// _uploadImageProvider.imgSizeErweima = 76;
widget.imageModel.qiniuUrl = null;
// }
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), widget.index, true, widget.model);
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil()
.startUploadOnly(context, file, widget.index, true, widget.model);
}
}
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.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/utils.dart';
... ... @@ -159,7 +160,11 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
setState(() {
if (pickedFile != null) {
imgModel.file = File(pickedFile.path);
... ... @@ -176,8 +181,13 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
// _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(pickedFile.path), 4, true, _uploadImageProvider);
context, file, 4, true, _uploadImageProvider);
}
}
... ... @@ -422,27 +432,27 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
color: MyColours.color_ffffff,
margin: EdgeInsets.only(left: w(21), top: w(12), right: w(21)),
child: Column(children: [
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),
// 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: _uploadImageProvider.firstImage.file != null ||
... ... @@ -467,9 +477,9 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
// ///没有上传完成的不可以点击
// _showPhotoView(context, 0, tempList);
_uploadImageProvider.firstImage.qiniuUrl = null;
_uploadImageProvider.firstImage.process = 0;
setState(() {});
// _uploadImageProvider.firstImage.qiniuUrl = null;
// _uploadImageProvider.firstImage.process = 0;
// setState(() {});
_openModalBottomSheet(context);
// Utils.getPickPermission(context, () {
// _getFromPictureOrCamera(
... ... @@ -627,38 +637,38 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
});
}),
),
VEmptyView(40),
Container(
width: w(188),
height: w(22),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(11)),
gradient: LinearGradient(stops: [
-0.57,
0.55,
1.48
], colors: [
MyColours.color_4C8DAD,
MyColours.color_0143A3,
MyColours.color_42A5FF
], begin: Alignment.centerLeft, end: Alignment.centerRight)),
child: RoundButton(
width: w(186),
height: w(20),
text: '点击了解更多会员优惠政策',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: Colors.transparent,
// borderColor: MyColours.color_999999,
textColor: MyColours.color_999999,
radius: r(11),
fontSize: 24,
isBold: true,
onPressed: () {},
)),
VEmptyView(18),
// VEmptyView(40),
// Container(
// width: w(188),
// height: w(22),
// alignment: Alignment.center,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(r(11)),
// gradient: LinearGradient(stops: [
// -0.57,
// 0.55,
// 1.48
// ], colors: [
// MyColours.color_4C8DAD,
// MyColours.color_0143A3,
// MyColours.color_42A5FF
// ], begin: Alignment.centerLeft, end: Alignment.centerRight)),
// child: RoundButton(
// width: w(186),
// height: w(20),
// text: '点击了解更多会员优惠政策',
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// borderColor: Colors.transparent,
// // borderColor: MyColours.color_999999,
// textColor: MyColours.color_999999,
// radius: r(11),
// fontSize: 24,
// isBold: true,
// onPressed: () {},
// )),
// VEmptyView(18),
Container(
height: w(28),
alignment: Alignment.center,
... ... @@ -695,13 +705,13 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
child: Column(
children: [
_headItem('客户互动及店铺推广'),
_storeItemWidget('允许顾客转发邀请函给同行客人。',
'同行客人可以从电子邀请函了解预订信息、一键导航到店,快速联系餐厅服务人员。还可以了解更多餐厅介绍、各种活动。',
onTap: () {
setState(() {
is_transpond = !is_transpond;
});
}, select: is_transpond),
// _storeItemWidget('允许顾客转发邀请函给同行客人。',
// '同行客人可以从电子邀请函了解预订信息、一键导航到店,快速联系餐厅服务人员。还可以了解更多餐厅介绍、各种活动。',
// onTap: () {
// setState(() {
// is_transpond = !is_transpond;
// });
// }, select: is_transpond),
_storeItemWidget('向被邀请客人开放“确认到店”功能。',
'被邀客人点击确认到店后,方便请客人了解被邀客人是否确认,同时,被邀客人的信息会加入到餐厅客户池中,方便餐厅维护客户。',
onTap: () {
... ... @@ -724,8 +734,8 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
});
}, select: is_order),
VEmptyView(24),
_headItem('预订安排中附带的营销推广'),
VEmptyView(24),
// _headItem('预订安排中附带的营销推广'),
// VEmptyView(24),
// couponProvider.couponListSelect.length > 0
// ? _markingItem('推荐店内代金券优惠', couponProvider.couponListSelect[0].aname,
// couponProvider.couponListSelect[0].desc, '100', '5折', onPressed: () {
... ... @@ -768,21 +778,23 @@ class _MarkingInteractionPageState extends State<MarkingInteractionPage> {
Utils.showToast('正在上传餐厅logo!,请稍等');
return false;
}
if (welcomeTextC.text.trim().length == 0) {
Utils.showToast('请输入输入餐厅欢迎语!');
return false;
}
// if (welcomeTextC.text.trim().length == 0) {
// Utils.showToast('请输入输入餐厅欢迎语!');
// return false;
// }
//接口
Map marketingData = {
'is_transpond': is_transpond ? '1' : '0', //转发同行客人
// 'is_transpond': is_transpond ? '1' : '0', //转发同行客人
'is_transpond': '1', //转发同行客人
'is_arrival': is_arrival ? '1' : '0', //确认到店
'is_online_book': is_online_book ? '1' : '0', //在线预订
'is_order': is_order ? '1' : '0', //去点餐
'is_coupon': '0', //代金券暂时
'is_recharge': '0', //充值券暂时
'is_link': is_link ? '1' : '0',
'wecomle': welcomeTextC.text,
// 'is_link': is_link ? '1' : '0',
'is_link': '0',
'wecomle': welcomeTextC.text ?? '',
'logo': _uploadImageProvider.firstImage.qiniuUrl,
};
Map<String, String> params = {
... ...
... ... @@ -332,8 +332,8 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
VEmptyView(10),
_itemTitleAndSubTtile('人数', '${reserveModel.pnum}'),
VEmptyView(10),
_itemTitleAndSubTtile('地址', '${reserveModel.address}'),
VEmptyView(10),
// _itemTitleAndSubTtile('地址', '${reserveModel.address}'),
// VEmptyView(10),
reserveModel.swichPark == '1'
? _itemTitleAndSubTtile('停车', '${reserveModel.parkInfo}')
: SizedBox(),
... ... @@ -429,24 +429,27 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
children: [
Image.asset(
Utils.getImgPath('location_blue'),
width: w(26),
width: w(36),
),
HEmptyView(28),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('${reserveModel.sellerName}',
Text('【${reserveModel.sellerName}】',
style: TextStyle(
color: MyColours.color_000000,
fontWeight: FontWeight.bold,
fontSize: font(14))),
VEmptyView(10),
Text('${reserveModel.address}',
style: TextStyle(
height: 1.3,
color: MyColours.color_000000,
fontSize: font(14))),
Padding(
padding: EdgeInsets.only(left: w(8)),
child: Text('${reserveModel.address}',
style: TextStyle(
height: 1.3,
color: MyColours.color_000000,
fontSize: font(14))),
),
],
))
],
... ... @@ -536,32 +539,34 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
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))),
Expanded(
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(12),
),
alignment: Alignment.topLeft,
child: Text(
_marketingCenterProvider.markDataModel.store.introduce,
style: TextStyle(
height: 2,
color: textColor,
fontSize: ScreenUtil().setSp(20),
textBaseline: TextBaseline.alphabetic),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
maxLines: 7,
),
)),
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: Text(
_marketingCenterProvider.markDataModel.store.introduce,
style: TextStyle(
height: 2,
color: textColor,
fontSize: ScreenUtil().setSp(20),
textBaseline: TextBaseline.alphabetic),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
maxLines: 7,
),
))),
],
),
);
... ... @@ -871,7 +876,8 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
),
),
VEmptyView(32),
Container(
Expanded(
child: Container(
width: double.infinity,
// margin: EdgeInsets.symmetric(horizontal: w(10)),
// padding: EdgeInsets.symmetric(horizontal: w(6)),
... ... @@ -896,7 +902,7 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
maxLines: 7,
overflow: TextOverflow.ellipsis,
)),
),
)),
],
),
);
... ... @@ -1287,6 +1293,21 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
fontSize: 32,
height: w(42),
isBold: true,
margin: EdgeInsets.only(
right: (_marketingCenterProvider
.markDataModel.marketing !=
null &&
_marketingCenterProvider.markDataModel
.marketing.isArrival ==
'1') ||
(_marketingCenterProvider
.markDataModel.marketing !=
null &&
_marketingCenterProvider.markDataModel
.marketing.isTranspond ==
'1')
? w(18)
: 0),
onPressed: () async {},
),
if (_marketingCenterProvider.markDataModel.marketing !=
... ... @@ -1305,6 +1326,15 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
fontSize: 32,
height: w(42),
isBold: true,
margin: EdgeInsets.only(
right: (_marketingCenterProvider
.markDataModel.marketing !=
null &&
_marketingCenterProvider.markDataModel
.marketing.isTranspond ==
'1')
? w(18)
: 0),
onPressed: () async {},
),
if (_marketingCenterProvider.markDataModel.marketing !=
... ... @@ -1312,32 +1342,33 @@ class _MarkingPreviewPageState extends State<MarkingPreviewPage> {
_marketingCenterProvider
.markDataModel.marketing.isTranspond ==
'1')
Container(
width: w(100),
height: w(42),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(21)),
gradient: LinearGradient(
stops: [
-0.57,
0.55,
1.48
],
colors: [
MyColours.color_4C8DAD,
MyColours.color_0143A3,
MyColours.color_42A5FF
],
begin: Alignment.topLeft,
end: Alignment.bottomRight)),
child: Text(
'转发给客人',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_F8F9FD,
fontWeight: FontWeight.bold),
)),
Expanded(
child: Container(
// width: w(100),
height: w(42),
alignment: Alignment.center,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(r(21)),
gradient: LinearGradient(
stops: [
-0.57,
0.55,
1.48
],
colors: [
MyColours.color_4C8DAD,
MyColours.color_0143A3,
MyColours.color_42A5FF
],
begin: Alignment.topLeft,
end: Alignment.bottomRight)),
child: Text(
'转发给客人',
style: TextStyle(
fontSize: font(16),
color: MyColours.color_F8F9FD,
fontWeight: FontWeight.bold),
))),
],
),
)
... ...
... ... @@ -520,9 +520,9 @@ class _StoreIntroducePageState extends State<StoreIntroducePage> {
_uploadImageProvider.storeImage3.qiniuUrl != '') {
images.add(_uploadImageProvider.storeImage3.qiniuUrl);
}
if (_uploadImageProvider.storeImage3.qiniuUrl != null &&
_uploadImageProvider.storeImage3.qiniuUrl != '') {
images.add(_uploadImageProvider.storeImage3.qiniuUrl);
if (_uploadImageProvider.storeImage4.qiniuUrl != null &&
_uploadImageProvider.storeImage4.qiniuUrl != '') {
images.add(_uploadImageProvider.storeImage4.qiniuUrl);
}
if (images.length == 0) {
Utils.showToast('请至少上传一张图片!');
... ...
... ... @@ -2,13 +2,16 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../provider/marketing_center_provider.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../utils/event_bus.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/system_app_bar.dart';
... ... @@ -26,6 +29,26 @@ class MarketingCenterHomePage extends StatefulWidget {
class _MarketingCenterHomePageState extends State<MarketingCenterHomePage> {
MarketingCenterProvider marketingCenterProvider;
bool select = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
getSellerTemplateConf();
});
}
getSellerTemplateConf() async {
bool success = await marketingCenterProvider.getSellerTemplateConf(context);
if (success && marketingCenterProvider.markDataModel != null) {
select = marketingCenterProvider.markDataModel.isNewTemplate == '1'
? true
: false;
setState(() {});
}
}
Widget _item(String title, {GestureTapCallback onTap}) {
return InkWell(
... ... @@ -78,93 +101,166 @@ class _MarketingCenterHomePageState extends State<MarketingCenterHomePage> {
EventBus().emit('changeStatusColor');
Navigator.of(context).pop();
},
child: SingleChildScrollView(
child: Column(
children: [
// InkWell(
// onTap: () {
// // NavigatorUtil.goWebPage(context, '隐私政策', "zc",
// // need: true);
// },
// child: Padding(
// padding: EdgeInsets.only(
// left: w(16),
// top: w(12),
// bottom: w(12),
// right: w(12)),
// child: Row(
// children: [
// Text(
// '会员充值优惠活动',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setWidth(32)),
// ),
// Spacer(),
// Container(
// padding: EdgeInsets.symmetric(
// horizontal: w(7), vertical: w(4)),
// child: Image.asset(
// "assets/arrow_right_new.png",
// width: ScreenUtil().setWidth(18),
// height: ScreenUtil().setWidth(32),
// ),
// )
// ],
// ))),
// Padding(
// padding: EdgeInsets.only(left: w(16)),
// child: MyDivider(double.infinity, w(0.5),
// color: MyColours.color_E7E7E7)),
// VEmptyView(24),
Padding(
padding: EdgeInsets.only(
left: w(16), top: w(12), bottom: w(12), right: w(12)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'预订安排通知定制',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setWidth(32)),
),
RoundButton(
text: '预览',
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_438E93,
textColor: MyColours.color_438E93,
radius: ScreenUtil().setWidth(22),
fontSize: 24,
width: w(72),
height: ScreenUtil().setWidth(44),
isBold: true,
onPressed: () {
NavigatorUtil.goMarkingPreviewPage(context);
},
),
])),
_item('首图形象展示', onTap: () {
NavigatorUtil.goFirstImagePage(context);
}),
_item('预订信息模块', onTap: () {
NavigatorUtil.goBookInfoPage(context);
}),
_item('店铺介绍展示', onTap: () {
NavigatorUtil.goStoreIntroducePage(context);
}),
_item('主厨介绍展示', onTap: () {
NavigatorUtil.goChefIntroducePage(context);
}),
_item('招牌菜展示', onTap: () {
NavigatorUtil.goDishShowPage(context);
}),
_item('营销及客户互动功能', onTap: () {
NavigatorUtil.goMarkingInteractionPage(context);
}),
],
),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
// InkWell(
// onTap: () {
// // NavigatorUtil.goWebPage(context, '隐私政策', "zc",
// // need: true);
// },
// child: Padding(
// padding: EdgeInsets.only(
// left: w(16),
// top: w(12),
// bottom: w(12),
// right: w(12)),
// child: Row(
// children: [
// Text(
// '会员充值优惠活动',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setWidth(32)),
// ),
// Spacer(),
// Container(
// padding: EdgeInsets.symmetric(
// horizontal: w(7), vertical: w(4)),
// child: Image.asset(
// "assets/arrow_right_new.png",
// width: ScreenUtil().setWidth(18),
// height: ScreenUtil().setWidth(32),
// ),
// )
// ],
// ))),
// Padding(
// padding: EdgeInsets.only(left: w(16)),
// child: MyDivider(double.infinity, w(0.5),
// color: MyColours.color_E7E7E7)),
// VEmptyView(24),
InkWell(
onTap: () {
setState(() {
select = !select;
});
},
child: Padding(
padding: EdgeInsets.only(
left: w(16),
top: w(12),
bottom: w(12),
right: w(12)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'启用预订安排通知图文模式',
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),
),
)
// RoundButton(
// text: '预览',
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// borderColor: MyColours.color_438E93,
// textColor: MyColours.color_438E93,
// radius: ScreenUtil().setWidth(22),
// fontSize: 24,
// width: w(72),
// height: ScreenUtil().setWidth(44),
// isBold: true,
// onPressed: () {
// NavigatorUtil.goMarkingPreviewPage(context);
// },
// ),
]))),
_item('首图形象展示', onTap: () {
NavigatorUtil.goFirstImagePage(context);
}),
_item('预订信息模块', onTap: () {
NavigatorUtil.goBookInfoPage(context);
}),
_item('店铺介绍展示', onTap: () {
NavigatorUtil.goStoreIntroducePage(context);
}),
_item('主厨介绍展示', onTap: () {
NavigatorUtil.goChefIntroducePage(context);
}),
_item('招牌菜展示', onTap: () {
NavigatorUtil.goDishShowPage(context);
}),
_item('营销及客户互动功能', onTap: () {
NavigatorUtil.goMarkingInteractionPage(context);
}),
],
),
)),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
left: w(23), right: w(23), top: w(12), bottom: w(25)),
child: Row(
children: [
RoundButton(
text: '图文预览',
width: w(100),
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
borderColor: MyColours.color_438E93,
radius: r(5),
fontSize: 32,
height: w(40),
textColor: MyColours.color_438E93,
isBold: true,
onPressed: () async {
NavigatorUtil.goMarkingPreviewPage(context);
}),
HEmptyView(30),
Expanded(
child: RoundButton(
text: '保存',
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
// borderColor: MyColours.color_999999,
radius: r(5),
fontSize: 32,
height: w(40),
isBold: true,
onPressed: () async {
//调用接口
Map<String, String> params = {
'sid': Provider.of<UserModel>(context,
listen: false)
.user
.sellerid,
'key': 'is_new_template',
'value': select ? '1' : '0'
};
bool success = await marketingCenterProvider
.setConfing(context, params);
if (success) {}
}))
],
))
],
)));
}
}
... ...
... ... @@ -345,7 +345,7 @@ class _MenuAddDishesPageState extends State<MenuAddDishesPage> {
// 当前的任务状态
///#相机拍照,单图选择
_getFromPictureOrCamera(imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
... ... @@ -363,9 +363,13 @@ class _MenuAddDishesPageState extends State<MenuAddDishesPage> {
if (pickedFile != null) {
uploadImageProvider.dish.process = 0.01;
uploadImageProvider.dish.qiniuUrl = null;
UploadImageUtil().startUploadOnly(
context, File(pickedFile.path), 3, true, uploadImageProvider);
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil()
.startUploadOnly(context, file, 3, true, uploadImageProvider);
}
}
... ...
... ... @@ -6,6 +6,7 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_native_image/flutter_native_image.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/get_seller_info_model.dart';
import 'package:one_key/models/seller_info.dart';
... ... @@ -601,7 +602,7 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(
String title, UploadImgModel imgModel, imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
//从相册选取照片后进行裁剪压缩
File yourFile = File(pickedFile.path);
... ... @@ -609,7 +610,11 @@ class _StoreBaseInfoPageState extends State<StoreBaseInfoPage> {
Uint8List newImg = await Utils.testFromFileComporessList(context, afterImg);
String path = await Utils.saveImage(newImg);
if (path == null) {
path = pickedFile.path;
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
percentage: 50);
path = compressedFile.path;
}
//更新本地存储,上传中展示
setState(() {
... ...
... ... @@ -261,7 +261,7 @@
// ///#相机拍照,单图选择
// Future _getFromPictureOrCamera(
// String title, UploadImgModel imgModel, imageSource) async {
// final pickedFile = await picker.getImage(source: imageSource);
// final pickedFile = await picker.pickImage(source: imageSource);
// setState(() {
// if (pickedFile != null) {
// imgModel.file = File(pickedFile.path);
... ...
... ... @@ -70,6 +70,13 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
});
}
@override
void dispose() {
super.dispose();
_uploadImageProvider.qiniuInfoSunModel.token = null;
}
///获取七牛云token
///
_getQiniuInfo() async {
... ...
... ... @@ -531,7 +531,7 @@ class _StoreWineManageHomePageState extends State<StoreWineManageHomePage>
])),
Container(
height: ScreenUtil().setWidth(91 * 2),
// height: ScreenUtil().setWidth(91 * 2),
width: double.infinity,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(12 * 2),
... ...
... ... @@ -94,7 +94,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(
source: imageSource, preferredCameraDevice: CameraDevice.rear);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
... ... @@ -133,9 +134,13 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
} else if (widget.uploadType == UploadType.WineManageType) {
temp = widget.imageList;
}
UploadImageUtil().startUpload(context, File(pickedFile.path),
temp.length - 1, true, widget.model, widget.uploadType,
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context, file, temp.length - 1, true, widget.model, widget.uploadType,
callback: widget.callback, countAll: 1, imageList: widget.imageList);
}
}
... ... @@ -220,8 +225,13 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
temp.add(imgModel);
});
UploadImageUtil().startUpload(context, File(file.absolute.path),
temp.length - 1, false, widget.model, widget.uploadType,
bool need = await Utils.sizeNeed(file);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(context, file, temp.length - 1, false,
widget.model, widget.uploadType,
countAll: imgList.length,
callback: widget.callback,
imageList: widget.imageList);
... ...
... ... @@ -103,7 +103,7 @@ class _ImgPickerFWidgetState extends DisposableState<ImgPickerFWidget> {
///#相机拍照,单图选择
Future _getFromPictureOrCamera(imageSource) async {
final pickedFile = await picker.getImage(source: imageSource);
final pickedFile = await picker.pickImage(source: imageSource);
File compressedFile = await FlutterNativeImage.compressImage(
pickedFile.path,
quality: 50,
... ... @@ -158,8 +158,13 @@ class _ImgPickerFWidgetState extends DisposableState<ImgPickerFWidget> {
} else if (widget.uploadType == UploadType.FeastRemarkInvoiceType) {
temp = widget.model.feastRemarkInvoiceImageList;
}
UploadImageUtil().startUpload(context, File(pickedFile.path),
temp.length - 1, true, widget.model, widget.uploadType,
bool need = await Utils.sizeNeed(File(pickedFile.path));
File file = File(pickedFile.path);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context, file, temp.length - 1, true, widget.model, widget.uploadType,
callback: widget.callback,
countAll: 1,
feastRemarkXtImageList: widget.feastRemarkXtImageList);
... ... @@ -254,8 +259,17 @@ class _ImgPickerFWidgetState extends DisposableState<ImgPickerFWidget> {
temp.add(imgModel);
});
UploadImageUtil().startUpload(context, File(file.absolute.path),
temp.length - 1, false, widget.model, widget.uploadType,
bool need = await Utils.sizeNeed(file);
if (need) {
file = File(compressedFile.absolute.path);
}
UploadImageUtil().startUpload(
context,
file,
temp.length - 1,
false,
widget.model,
widget.uploadType,
countAll: imgList.length,
callback: widget.callback,
feastRemarkXtImageList: temp);
... ...
... ... @@ -52,6 +52,30 @@ class MarketingCenterProvider extends ChangeNotifier {
return false;
}
// 设置订座商家配置信息
Future<bool> setConfing(BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.set_confing,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('设置失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data == 0 || baseResp.data == 1) {
Utils.showToast('设置成功');
return true;
} else {
Utils.showToast('设置失败,请重试');
}
} else {
Utils.showToast(baseResp.msg ?? '设置失败,请重试');
}
return false;
}
// 获取商家获取预订安排模板页面
Future<bool> getSellerTemplateConf(BuildContext context,
{bool showLoading = true}) async {
... ...
... ... @@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:one_key/provider/upload_img_provider.dart';
import 'package:one_key/utils/utils.dart';
// import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart';
import 'package:qiniu_flutter_sdk_diox/qiniu_flutter_sdk_diox.dart';
... ... @@ -124,6 +125,7 @@ class UploadImageUtil {
selectedFile,
usedToken,
options: PutOptions(
// forceBySingle:
key: key,
partSize: partSize,
controller: putController,
... ... @@ -191,40 +193,88 @@ class UploadImageUtil {
}
// 取消当前任务
putController.cancel();
// putController.cancel();
// _image
uploadImageProvider.notifyListeners();
})
..catchError((dynamic error) {
if (uploadType == UploadType.StoreFrontUploadType) {
//门头
uploadImageProvider.imageListFront.removeAt(index);
} else if (uploadType == UploadType.EnvironmentUploadType) {
uploadImageProvider.imageListDenvironment.removeAt(index);
} else if (uploadType == UploadType.ConsumptionUploadType) {
//消费清单
uploadImageProvider.imageList.removeAt(index);
} else if (uploadType == UploadType.TableManagerType) {
//桌面照片管理
uploadImageProvider.tableImageList.removeAt(index);
} else if (uploadType == UploadType.FeastRemarkType) {
//宴会备注---意向
uploadImageProvider.feastRemarkImageList.removeAt(index);
} else if (uploadType == UploadType.FeastRemarkXtType) {
//宴会备注---选台
feastRemarkXtImageList.removeAt(index);
} else if (uploadType == UploadType.FeastRemarkDjType) {
//宴会备注---定金
uploadImageProvider.feastRemarkDjImageList.removeAt(index);
} else if (uploadType == UploadType.FeastRemarkContractType) {
//宴会备注 ---合同
uploadImageProvider.feastRemarkContractImageList.removeAt(index);
} else if (uploadType == UploadType.FeastRemarkInvoiceType) {
//宴会备注 ---发票
uploadImageProvider.feastRemarkInvoiceImageList.removeAt(index);
} else if (uploadType == UploadType.InvitationStoreType) {
//宴会备注 ---发票
uploadImageProvider.feastRemarkInvoiceImageList.removeAt(index);
} else if (uploadType == UploadType.WineManageType) {
//新建存酒
imageList.removeAt(index);
}
// 取消当前任务
putController.cancel();
uploadImageProvider.notifyListeners();
if (error is StorageError) {
switch (error.type) {
case StorageErrorType.CONNECT_TIMEOUT:
print('发生错误: 连接超时');
Utils.showToast('发生错误: 连接超时');
break;
case StorageErrorType.SEND_TIMEOUT:
print('发生错误: 发送数据超时');
Utils.showToast('发生错误: 发送数据超时');
break;
case StorageErrorType.RECEIVE_TIMEOUT:
print('发生错误: 响应数据超时');
Utils.showToast('发生错误: 响应数据超时');
break;
case StorageErrorType.RESPONSE:
print('发生错误: ${error.message}');
Utils.showToast('发生错误: ${error.message}');
// Utils.showToast('发生错误000: ${error}');
// Utils.showToast('发生错误000: ${error.code}');
// Utils.showToast('发生错误000: ${error.message}');
break;
case StorageErrorType.CANCEL:
print('发生错误: 请求取消');
Utils.showToast('发生错误: 请求取消');
break;
case StorageErrorType.UNKNOWN:
print('发生错误: 未知错误');
print('发生错误: ');
Utils.showToast('发生错误: 未知错误');
break;
case StorageErrorType.NO_AVAILABLE_HOST:
print('发生错误: 无可用 Host');
Utils.showToast('发生错误: 无可用 Host');
break;
case StorageErrorType.IN_PROGRESS:
print('发生错误: 已在队列中');
Utils.showToast('发生错误: 已在队列中');
break;
}
} else {
print('发生错误: ${error.toString()}');
Utils.showToast('发生错误: ${error.toString()}');
}
print('------------------------');
... ... @@ -306,7 +356,7 @@ class UploadImageUtil {
response.rawData['key'];
// 取消当前任务
putController.cancel();
// putController.cancel();
if (index == 0) {
uploadImageProvider.touxiang.process = 1;
uploadImageProvider.touxiang.qiniuUrl = imgUrl;
... ... @@ -355,35 +405,94 @@ class UploadImageUtil {
}
})
..catchError((dynamic error) {
if (index == 0) {
uploadImageProvider.touxiang.process = 0;
uploadImageProvider.touxiang.qiniuUrl = null;
uploadImageProvider.touxiang.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 1) {
uploadImageProvider.erweima.process = 0;
uploadImageProvider.erweima.qiniuUrl = null;
uploadImageProvider.erweima.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 2) {
uploadImageProvider.mentou.process = 0;
uploadImageProvider.mentou.qiniuUrl = null;
uploadImageProvider.mentou.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 3) {
uploadImageProvider.dish.process = 0;
uploadImageProvider.dish.qiniuUrl = null;
uploadImageProvider.dish.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 4) {
uploadImageProvider.firstImage.process = 0;
uploadImageProvider.firstImage.qiniuUrl = null;
uploadImageProvider.firstImage.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 5) {
uploadImageProvider.storeImage1.process = 0;
uploadImageProvider.storeImage1.qiniuUrl = null;
uploadImageProvider.storeImage1.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 6) {
uploadImageProvider.storeImage2.process = 0;
uploadImageProvider.storeImage2.qiniuUrl = null;
uploadImageProvider.storeImage2.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 7) {
uploadImageProvider.storeImage3.process = 0;
uploadImageProvider.storeImage3.qiniuUrl = null;
uploadImageProvider.storeImage3.file = null;
uploadImageProvider.notifyListeners();
} else if (index == 8) {
uploadImageProvider.storeImage4.process = 0;
uploadImageProvider.storeImage4.qiniuUrl = null;
uploadImageProvider.storeImage4.file = null;
uploadImageProvider.notifyListeners();
}
// 取消当前任务
putController.cancel();
uploadImageProvider.notifyListeners();
if (error is StorageError) {
switch (error.type) {
case StorageErrorType.CONNECT_TIMEOUT:
print('发生错误: 连接超时');
Utils.showToast('发生错误: 连接超时');
break;
case StorageErrorType.SEND_TIMEOUT:
print('发生错误: 发送数据超时');
Utils.showToast('发生错误: 发送数据超时');
break;
case StorageErrorType.RECEIVE_TIMEOUT:
print('发生错误: 响应数据超时');
Utils.showToast('发生错误: 响应数据超时');
break;
case StorageErrorType.RESPONSE:
print('发生错误: ${error.message}');
// Utils.showToast('发生错误000: ${error}');
// Utils.showToast('发生错误000: ${error.code}');
Utils.showToast('发生错误: ${error.message}');
break;
case StorageErrorType.CANCEL:
print('发生错误: 请求取消');
Utils.showToast('发生错误: 请求取消');
break;
case StorageErrorType.UNKNOWN:
print('发生错误: 未知错误');
print('发生错误: ');
Utils.showToast('发生错误: 未知错误');
break;
case StorageErrorType.NO_AVAILABLE_HOST:
print('发生错误: 无可用 Host');
Utils.showToast('发生错误: 无可用 Host');
break;
case StorageErrorType.IN_PROGRESS:
print('发生错误: 已在队列中');
Utils.showToast('发生错误: 已在队列中');
break;
}
} else {
print('发生错误: ${error.toString()}');
Utils.showToast('发生错误: ${error.toString()}');
}
print('------------------------');
... ...
... ... @@ -1415,6 +1415,7 @@ class Utils {
//image_cropper插件,中心点裁剪固定比例的图片
String imgPath = await saveImage(data);
Uint8List afterImg = data;
if (imgPath != null) {
final croppedImage = await ImageCropper().cropImage(
sourcePath: imgPath,
... ... @@ -1501,6 +1502,23 @@ class Utils {
return res;
}
/// 大于3.99 压缩
static Future<bool> sizeNeed(File file) async{
Uint8List afterImg = await file.readAsBytes();
String res = "";
final int unit = 1024;
final int m = unit * unit; // 1M
// 如果小于 1 兆,显示 KB
// if (length < 1 * m) {
// res = (length / unit).toStringAsFixed(0) + " KB";
// }
// 如果大于 1 兆,显示 MB,并保留一位小数
if (afterImg.length / m > 3.99) {
return true;
}
return false;
}
/// Uint8List 转 Image 方式一
/// Uint8List 转 Image 方式二
... ... @@ -1543,7 +1561,7 @@ class Utils {
title: _title,
path: _path,
description: _description,
miniProgramType: WXMiniProgramType.PREVIEW, //体验版
// miniProgramType: WXMiniProgramType.PREVIEW, //体验版
// miniProgramType: WXMiniProgramType.RELEASE //正式版
// miniProgramType: WXMiniProgramType.TEST //开发版
// thumbnail: WeChatImage.binary(source)
... ...
... ... @@ -322,7 +322,7 @@ packages:
name: dio
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.0"
version: "5.1.0"
diox:
dependency: transitive
description:
... ... @@ -474,7 +474,7 @@ packages:
name: flutter_inappwebview
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.3.2"
version: "5.7.2+3"
flutter_keyboard_visibility:
dependency: "direct main"
description:
... ...
... ... @@ -40,7 +40,8 @@ dependencies:
# 网络
# dio: ^3.0.10
# dio: ^4.0.6
dio: ^5.0.0
# dio: ^5.0.0
dio: ^5.1.0
# 屏幕适配
flutter_screenutil: ^5.5.3+2
# 路由管理
... ... @@ -118,6 +119,7 @@ dependencies:
#七牛云sdk
# qiniu_flutter_sdk: ^0.2.0
# qiniu_flutter_sdk: ^0.4.0
# qiniu_flutter_sdk: ^0.4.0
qiniu_flutter_sdk_diox: ^0.4.1
#相机拍照,单图选择
# image_picker: ^0.6.7+21
... ... @@ -159,7 +161,8 @@ dependencies:
flutter_staggered_grid_view: ^0.4.1
# webview
# webview_flutter: ^2.0.13
flutter_inappwebview: ^5.3.2
# flutter_inappwebview: ^5.3.2
flutter_inappwebview: ^5.7.2+3
# flutter_downloader: ^1.7.1
# open_file: ^3.2.1
... ...