Commit 4ea73229fde7d635894034e925a985f5dd3a4dd7

Authored by wdn127929
1 parent b3dd72ad

推送语音+消息中心bus通知调整至message_page总页面

Showing 56 changed files with 1118 additions and 596 deletions
... ... @@ -11,14 +11,14 @@ if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = "180"
def flutterVersionCode = "181"
if (flutterVersionCode == null) {
flutterVersionCode = '180'
flutterVersionCode = '181'
}
def flutterVersionName = "1.8.0"
def flutterVersionName = "1.8.1"
if (flutterVersionName == null) {
flutterVersionName = '1.8.0'
flutterVersionName = '1.8.1'
}
apply plugin: 'com.android.application'
... ...

11.9 KB | W: | H:

8.78 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

13.2 KB | W: | H:

9.33 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

12.2 KB | W: | H:

9.92 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

11.3 KB | W: | H:

8.83 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

11.1 KB | W: | H:

8.83 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

10.6 KB | W: | H:

9.03 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

11.5 KB | W: | H:

9.58 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0feb5fcd550157bc1a24916743cf7132
\ No newline at end of file
34f4f21cec574b3cdb36b590374022c6
\ No newline at end of file
... ...
... ... @@ -9,7 +9,14 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
72CAA69425B7E2CA00753A2F /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 72CAA69325B7E2CA00753A2F /* Settings.bundle */; };
72DFBB9425BA6CD700EE1E5D /* tts_all.caf in Resources */ = {isa = PBXBuildFile; fileRef = 720060DA25B9912C0014BE3B /* tts_all.caf */; };
72DFBB9525BA6CD700EE1E5D /* tts_cancel.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB8C25BA6CBF00EE1E5D /* tts_cancel.caf */; };
72DFBB9625BA6CD700EE1E5D /* tts_invoice.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB9325BA6CBF00EE1E5D /* tts_invoice.caf */; };
72DFBB9725BA6CD700EE1E5D /* tts_new.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB8E25BA6CBF00EE1E5D /* tts_new.caf */; };
72DFBB9825BA6CD700EE1E5D /* tts_online.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB8F25BA6CBF00EE1E5D /* tts_online.caf */; };
72DFBB9925BA6CD700EE1E5D /* tts_order.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB9225BA6CBF00EE1E5D /* tts_order.caf */; };
72DFBB9A25BA6CD700EE1E5D /* tts_pay.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB8D25BA6CBF00EE1E5D /* tts_pay.caf */; };
72DFBB9B25BA6CD700EE1E5D /* tts_pre_pay.caf in Resources */ = {isa = PBXBuildFile; fileRef = 72DFBB9125BA6CBF00EE1E5D /* tts_pre_pay.caf */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
... ... @@ -36,7 +43,14 @@
22513BD076488FBD50F0303F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
2DCAB49DF131E02F3BAF38E1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
72CAA69325B7E2CA00753A2F /* Settings.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = Settings.bundle; sourceTree = "<group>"; };
720060DA25B9912C0014BE3B /* tts_all.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_all.caf; sourceTree = "<group>"; };
72DFBB8C25BA6CBF00EE1E5D /* tts_cancel.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_cancel.caf; sourceTree = "<group>"; };
72DFBB8D25BA6CBF00EE1E5D /* tts_pay.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_pay.caf; sourceTree = "<group>"; };
72DFBB8E25BA6CBF00EE1E5D /* tts_new.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_new.caf; sourceTree = "<group>"; };
72DFBB8F25BA6CBF00EE1E5D /* tts_online.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_online.caf; sourceTree = "<group>"; };
72DFBB9125BA6CBF00EE1E5D /* tts_pre_pay.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_pre_pay.caf; sourceTree = "<group>"; };
72DFBB9225BA6CBF00EE1E5D /* tts_order.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_order.caf; sourceTree = "<group>"; };
72DFBB9325BA6CBF00EE1E5D /* tts_invoice.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = tts_invoice.caf; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
... ... @@ -97,6 +111,14 @@
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
720060DA25B9912C0014BE3B /* tts_all.caf */,
72DFBB8C25BA6CBF00EE1E5D /* tts_cancel.caf */,
72DFBB9325BA6CBF00EE1E5D /* tts_invoice.caf */,
72DFBB8E25BA6CBF00EE1E5D /* tts_new.caf */,
72DFBB8F25BA6CBF00EE1E5D /* tts_online.caf */,
72DFBB9225BA6CBF00EE1E5D /* tts_order.caf */,
72DFBB8D25BA6CBF00EE1E5D /* tts_pay.caf */,
72DFBB9125BA6CBF00EE1E5D /* tts_pre_pay.caf */,
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
... ... @@ -120,7 +142,6 @@
EE6AF8FF2457DB720005E3B9 /* RunnerProfile.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
72CAA69325B7E2CA00753A2F /* Settings.bundle */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
... ... @@ -204,9 +225,16 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
72DFBB9425BA6CD700EE1E5D /* tts_all.caf in Resources */,
72DFBB9525BA6CD700EE1E5D /* tts_cancel.caf in Resources */,
72DFBB9625BA6CD700EE1E5D /* tts_invoice.caf in Resources */,
72DFBB9725BA6CD700EE1E5D /* tts_new.caf in Resources */,
72DFBB9825BA6CD700EE1E5D /* tts_online.caf in Resources */,
72DFBB9925BA6CD700EE1E5D /* tts_order.caf in Resources */,
72DFBB9A25BA6CD700EE1E5D /* tts_pay.caf in Resources */,
72DFBB9B25BA6CD700EE1E5D /* tts_pre_pay.caf in Resources */,
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
72CAA69425B7E2CA00753A2F /* Settings.bundle in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
... ... @@ -417,7 +445,7 @@
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 165;
CURRENT_PROJECT_VERSION = 170;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -430,7 +458,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.7.0;
MARKETING_VERSION = 1.8.0;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -559,7 +587,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 165;
CURRENT_PROJECT_VERSION = 170;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -572,7 +600,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.7.0;
MARKETING_VERSION = 1.8.0;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
... ... @@ -592,7 +620,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 165;
CURRENT_PROJECT_VERSION = 170;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
... ... @@ -605,7 +633,7 @@
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.7.0;
MARKETING_VERSION = 1.8.0;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
... ...
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
... ...
... ... @@ -2,8 +2,6 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSCameraUsageDescription</key>
<string>需要您的同意,APP才能访问您的相机来上传消费清单</string>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
... ... @@ -52,12 +50,12 @@
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要您的同意,APP才能访问您的相册来上传消费清单</string>
<key>NSAppleMusicUsageDescription</key>
<string>需要您的同意,APP才能访问媒体资料库</string>
<key>NSCalendarsUsageDescription</key>
<string>需要您的同意,APP才能访问日历</string>
<key>NSCameraUsageDescription</key>
<string>需要您的同意,APP才能访问您的相机来上传消费清单</string>
<key>NSContactsUsageDescription</key>
<string>允许访问您的通讯录来一键录入联系人</string>
<key>NSLocationAlwaysUsageDescription</key>
... ... @@ -66,6 +64,8 @@
<string>需要您的同意,APP才能在使用期间访问位置</string>
<key>NSMotionUsageDescription</key>
<string>需要您的同意,APP才能访问运动与健身</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要您的同意,APP才能访问您的相册来上传消费清单</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要您的同意,APP才能访问语音识别</string>
<key>UILaunchStoryboardName</key>
... ...
<?xml version="1.0" encoding="UTF-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>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Group</string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>Name</string>
<key>Key</key>
<string>name_preference</string>
<key>DefaultValue</key>
<string></string>
<key>IsSecure</key>
<false/>
<key>KeyboardType</key>
<string>Alphabet</string>
<key>AutocapitalizationType</key>
<string>None</string>
<key>AutocorrectionType</key>
<string>No</string>
</dict>
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Enabled</string>
<key>Key</key>
<string>enabled_preference</string>
<key>DefaultValue</key>
<true/>
</dict>
<dict>
<key>Type</key>
<string>PSSliderSpecifier</string>
<key>Key</key>
<string>slider_preference</string>
<key>DefaultValue</key>
<real>0.5</real>
<key>MinimumValue</key>
<integer>0</integer>
<key>MaximumValue</key>
<integer>1</integer>
<key>MinimumValueImage</key>
<string></string>
<key>MaximumValueImage</key>
<string></string>
</dict>
</array>
</dict>
</plist>
Binary files a/ios/Runner/Settings.bundle/en.lproj/Root.strings and /dev/null differ
... ...
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
... ... @@ -14,56 +14,65 @@ part 'notebook_detail.g.dart';
class NotebookDetail {
NotebookDetail();
NotebookDetail.def(BuildContext context){
id="-1";
pnum="6";
rname="";
sex="1";
phone="";
cusdem="";
type="0";
ddate=(DateTime.now().millisecondsSinceEpoch/1000).floor().toString();
ddate_solt=defDdateSolt(context);
is_set_ddate="0";
tables=[];
NotebookDetail.def(BuildContext context) {
id = "-1";
pnum = "6";
rname = "";
sex = "1";
phone = "";
cusdem = "";
type = "0";
ddate = (DateTime.now().millisecondsSinceEpoch / 1000).floor().toString();
ddate_solt = defDdateSolt(context);
is_set_ddate = "0";
tables = [];
}
NotebookDetail.fromTableManager(String ddateStr,String ddatesolt,t.Table table){
id="-1";
pnum="6";
rname="";
sex="1";
phone="";
cusdem="";
type="0";
ddate=ddateStr;
ddate_solt=ddatesolt;
is_set_ddate="1";
tables=[table];
NotebookDetail.fromTableManager(
String ddateStr, String ddatesolt, t.Table table) {
id = "-1";
pnum = "6";
rname = "";
sex = "1";
phone = "";
cusdem = "";
type = "0";
ddate = ddateStr;
ddate_solt = ddatesolt;
is_set_ddate = "1";
tables = [table];
}
String defDdateSolt(BuildContext context){
int millsNow=DateTime.now().millisecondsSinceEpoch;
UserModel userModel=Provider.of<UserModel>(context,listen: false);
String morning=userModel.user.morning==""?"00:00-00:00":userModel.user.morning;
String noon=userModel.user.noon==""?"00:00-00:00":userModel.user.noon;
String night=userModel.user.night==""?"00:00-00:00":userModel.user.night;
String endMorning=morning.split("-")[1];
String endNoon=noon.split("-")[1];
String endNight=night.split("-")[1];
int endMorningMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endMorning:00"));
int endNoonMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNoon:00"));
int endNightMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNight:00"));
if(millsNow<=endMorningMills){
String defDdateSolt(BuildContext context) {
int millsNow = DateTime.now().millisecondsSinceEpoch;
UserModel userModel = Provider.of<UserModel>(context, listen: false);
String morning =
userModel.user.morning == "" ? "00:00-00:00" : userModel.user.morning;
String noon =
userModel.user.noon == "" ? "00:00-00:00" : userModel.user.noon;
String night =
userModel.user.night == "" ? "00:00-00:00" : userModel.user.night;
String endMorning = morning.split("-")[1];
String endNoon = noon.split("-")[1];
String endNight = night.split("-")[1];
int endMorningMills = DateUtil.getDateMsByTimeStr(
DateUtil.formatDate(DateTime.now())
.replaceRange(11, 19, "$endMorning:00"));
int endNoonMills = DateUtil.getDateMsByTimeStr(
DateUtil.formatDate(DateTime.now())
.replaceRange(11, 19, "$endNoon:00"));
int endNightMills = DateUtil.getDateMsByTimeStr(
DateUtil.formatDate(DateTime.now())
.replaceRange(11, 19, "$endNight:00"));
if (millsNow <= endMorningMills) {
return "1";
}else if(millsNow<=endNoonMills){
} else if (millsNow <= endNoonMills) {
return "2";
}else if(millsNow<=endNightMills){
} else if (millsNow <= endNightMills) {
return "3";
}
}
String id;
String abolition;
String tableinfo;
... ... @@ -86,6 +95,7 @@ class NotebookDetail {
List<t.Table> tables; //预订桌位
Cancel cancel;
Order order;
OrderInfo orderInfo;
String get statuImgAssets {
switch (status) {
... ... @@ -93,6 +103,9 @@ class NotebookDetail {
return "assets/status_undeal.png";
case "1":
case "5":
if (orderInfo != null && orderInfo.status == '3') {
return "assets/statu_finished.png";
}
return "assets/statu_booked.png";
case "2":
return "assets/statu_reached.png";
... ... @@ -105,18 +118,19 @@ class NotebookDetail {
}
}
String get demandStr{
String demand="";
for(t.Table table in demands){
demand+=table.name+",";
String get demandStr {
String demand = "";
for (t.Table table in demands) {
demand += table.name + ",";
}
return demand.substring(0,demand.length-1);
return demand.substring(0, demand.length - 1);
}
String get ddateMd {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
String md ="${dateTime.year}年 "+Utils.addZeroNumber(dateTime.month) +
String md = "${dateTime.year}年 " +
Utils.addZeroNumber(dateTime.month) +
"月" +
Utils.addZeroNumber(dateTime.day) +
"日";
... ... @@ -201,8 +215,6 @@ class NotebookDetail {
String toString() {
return 'NotebookDetail{id: $id, abolition: $abolition, tableinfo: $tableinfo, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel}';
}
}
@JsonSerializable()
... ... @@ -230,10 +242,9 @@ class Cancel {
factory Cancel.fromJson(Map<String, dynamic> json) => _$CancelFromJson(json);
Map<String, dynamic> toJson() => _$CancelToJson(this);
}
@JsonSerializable()
class Order extends Object {
@JsonSerializable()
class Order extends Object {
@JsonKey(name: 'id')
String id;
... ... @@ -270,18 +281,29 @@ class Cancel {
@JsonKey(name: 'cookbooklist')
List<Cookbooklist> cookbooklist;
Order(this.id,this.rid,this.no,this.rowNum,this.pnum,this.sellerid,this.openid,this.price,this.type,this.behavior,this.cdate,this.cookbooklist,);
factory Order.fromJson(Map<String, dynamic> srcJson) => _$OrderFromJson(srcJson);
Order(
this.id,
this.rid,
this.no,
this.rowNum,
this.pnum,
this.sellerid,
this.openid,
this.price,
this.type,
this.behavior,
this.cdate,
this.cookbooklist,
);
factory Order.fromJson(Map<String, dynamic> srcJson) =>
_$OrderFromJson(srcJson);
Map<String, dynamic> toJson() => _$OrderToJson(this);
}
@JsonSerializable()
class Cookbooklist extends Object {
class Cookbooklist extends Object {
@JsonKey(name: 'id')
String id;
... ... @@ -330,10 +352,142 @@ class Cancel {
@JsonKey(name: 'cdate')
String cdate;
Cookbooklist(this.id,this.orderid,this.openid,this.cookbookid,this.price,this.cookname,this.cookunit,this.cookimage,this.className,this.classid,this.classOrder,this.fromSoucre,this.source,this.status,this.identity,this.cdate,);
factory Cookbooklist.fromJson(Map<String, dynamic> srcJson) => _$CookbooklistFromJson(srcJson);
Cookbooklist(
this.id,
this.orderid,
this.openid,
this.cookbookid,
this.price,
this.cookname,
this.cookunit,
this.cookimage,
this.className,
this.classid,
this.classOrder,
this.fromSoucre,
this.source,
this.status,
this.identity,
this.cdate,
);
factory Cookbooklist.fromJson(Map<String, dynamic> srcJson) =>
_$CookbooklistFromJson(srcJson);
Map<String, dynamic> toJson() => _$CookbooklistToJson(this);
}
@JsonSerializable()
class OrderInfo extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'order_no')
String orderNo;
@JsonKey(name: 'out_trade_no')
String outTradeNo;
@JsonKey(name: 'openid')
String openid;
@JsonKey(name: 'sid')
String sid;
@JsonKey(name: 'rid')
String rid;
@JsonKey(name: 'sellername')
String sellername;
@JsonKey(name: 'tablename')
String tablename;
@JsonKey(name: 'wechat_no')
String wechatNo;
@JsonKey(name: 'bill_list')
List<dynamic> billList;
@JsonKey(name: 'price')
String price;
@JsonKey(name: 'should_price')
String shouldPrice;
@JsonKey(name: 'subsidy_type')
String subsidyType;
@JsonKey(name: 'subsidy_price')
String subsidyPrice;
@JsonKey(name: 'is_wine')
String isWine;
@JsonKey(name: 'is_pack')
String isPack;
@JsonKey(name: 'status')
String status;
@JsonKey(name: 'pay_time')
String payTime;
@JsonKey(name: 'confirm_time')
String confirmTime;
@JsonKey(name: 'remarks')
String remarks;
@JsonKey(name: 'attach')
String attach;
@JsonKey(name: 'currency')
String currency;
@JsonKey(name: 'detail')
String detail;
@JsonKey(name: 'description')
String description;
@JsonKey(name: 'profit_sharing')
String profitSharing;
@JsonKey(name: 'create_time')
String createTime;
OrderInfo(
this.id,
this.orderNo,
this.outTradeNo,
this.openid,
this.sid,
this.rid,
this.sellername,
this.tablename,
this.wechatNo,
this.billList,
this.price,
this.shouldPrice,
this.subsidyType,
this.subsidyPrice,
this.isWine,
this.isPack,
this.status,
this.payTime,
this.confirmTime,
this.remarks,
this.attach,
this.currency,
this.detail,
this.description,
this.profitSharing,
this.createTime,
);
factory OrderInfo.fromJson(Map<String, dynamic> srcJson) =>
_$OrderInfoFromJson(srcJson);
Map<String, dynamic> toJson() => _$OrderInfoToJson(this);
}
... ...
... ... @@ -39,7 +39,10 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
: Cancel.fromJson(json['cancel'] as Map<String, dynamic>)
..order = json['order'] == null
? null
: Order.fromJson(json['order'] as Map<String, dynamic>);
: Order.fromJson(json['order'] as Map<String, dynamic>)
..orderInfo = json['order_info'] == null
? null
: OrderInfo.fromJson(json['order_info'] as Map<String, dynamic>);
}
Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
... ... @@ -65,9 +68,67 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
'demands': instance.demands,
'tables': instance.tables,
'cancel': instance.cancel,
'order':instance.order
'order': instance.order,
'order_info': instance.orderInfo
};
OrderInfo _$OrderInfoFromJson(Map<String, dynamic> json) {
return OrderInfo(
json['id'] as String,
json['order_no'] as String,
json['out_trade_no'] as String,
json['openid'] as String,
json['sid'] as String,
json['rid'] as String,
json['sellername'] as String,
json['tablename'] as String,
json['wechat_no'] as String,
json['bill_list'] as List,
json['price'] as String,
json['should_price'] as String,
json['subsidy_type'] as String,
json['subsidy_price'] as String,
json['is_wine'] as String,
json['is_pack'] as String,
json['status'] as String,
json['pay_time'] as String,
json['confirm_time'] as String,
json['remarks'] as String,
json['attach'] as String,
json['currency'] as String,
json['detail'] as String,
json['description'] as String,
json['profit_sharing'] as String,
json['create_time'] as String);
}
Map<String, dynamic> _$OrderInfoToJson(OrderInfo instance) => <String, dynamic>{
'id': instance.id,
'order_no': instance.orderNo,
'out_trade_no': instance.outTradeNo,
'openid': instance.openid,
'sid': instance.sid,
'rid': instance.rid,
'sellername': instance.sellername,
'tablename': instance.tablename,
'wechat_no': instance.wechatNo,
'bill_list': instance.billList,
'price': instance.price,
'should_price': instance.shouldPrice,
'subsidy_type': instance.subsidyType,
'subsidy_price': instance.subsidyPrice,
'is_wine': instance.isWine,
'is_pack': instance.isPack,
'status': instance.status,
'pay_time': instance.payTime,
'confirm_time': instance.confirmTime,
'remarks': instance.remarks,
'attach': instance.attach,
'currency': instance.currency,
'detail': instance.detail,
'description': instance.description,
'profit_sharing': instance.profitSharing,
'create_time': instance.createTime
};
Cancel _$CancelFromJson(Map<String, dynamic> json) {
return Cancel()
..uname = json['uname'] as String
... ...
... ... @@ -512,8 +512,8 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
),
Image.asset(
detailEntity.statuImgAssets,
width: ScreenUtil().setWidth(100),
height: ScreenUtil().setWidth(30),
width: ScreenUtil().setWidth(114),
height: ScreenUtil().setWidth(56),
)
],
),
... ... @@ -889,7 +889,9 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
)),
),
Offstage(
offstage: (detailEntity.status == "3" ||
offstage: ((detailEntity.orderInfo != null &&
detailEntity.orderInfo.status == "3") ||
detailEntity.status == "3" ||
detailEntity.status == "4" ||
detailEntity.status == "6"),
child: Container(
... ... @@ -906,11 +908,16 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
child: Row(
children: [
Offstage(
offstage: (detailEntity.status == "3" ||
detailEntity.status == "4" ||
detailEntity.status == "6")
? true
: false,
offstage:
((detailEntity.orderInfo != null &&
detailEntity.orderInfo
.status ==
"3") ||
detailEntity.status == "3" ||
detailEntity.status == "4" ||
detailEntity.status == "6")
? true
: false,
child: _cancelAndChangeBtn(() {
DialogUtil.showShareDialog(context)
?.then((value) {
... ... @@ -961,7 +968,11 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
offstage: !(detailEntity
.order.cookbooklist.length >
0 &&
(detailEntity.status != "3" &&
((detailEntity.orderInfo != null &&
detailEntity
.orderInfo.status ==
"3") &&
detailEntity.status != "3" &&
detailEntity.status != "4" &&
detailEntity.status != "6")),
child: MyDivider(ScreenUtil().setWidth(2),
... ... @@ -979,7 +990,12 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
rid: detailEntity.id);
}, '查看菜品',
bgColor: MyColours.color_199095,
width: (detailEntity.status == "3" ||
width: ((detailEntity.orderInfo !=
null &&
detailEntity.orderInfo
.status ==
"3") ||
detailEntity.status == "3" ||
detailEntity.status == "4" ||
detailEntity.status == "6")
? ScreenUtil.screenWidthDp -
... ... @@ -992,7 +1008,9 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
],
))),
Offstage(
offstage: (detailEntity.status == "3" ||
offstage: ((detailEntity.orderInfo != null &&
detailEntity.orderInfo.status == "3") ||
detailEntity.status == "3" ||
detailEntity.status == "4" ||
detailEntity.status == "6")
? true
... ...
... ... @@ -126,6 +126,27 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
//在线买单消息 去查看 跳转在线买单详情页面
NavigatorUtil.goOnlineCheckDetailPage(context,
rid: notifyParam["rid"], fromNotify: true);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": notifyParam['mid'],
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
break;
case "14":
//发票详情页面跳转
NavigatorUtil.goInvoiceDetailPage(context,
rid: '${notifyParam["rid"]}', fromNotify: true);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": notifyParam['mid'],
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
break;
case "1":
NavigatorUtil.goHasOrderFoodPage(context,
... ... @@ -231,6 +252,31 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
//在线买单消息 去查看 跳转在线买单详情页面
NavigatorUtil.goOnlineCheckDetailPage(context,
rid: custom["rid"], fromNotify: true);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
"id": custom['mid'],
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
break;
case "14":
//发票详情页面跳转
NavigatorUtil.goInvoiceDetailPage(context,
rid: '${custom["rid"]}', fromNotify: true);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
"id": custom['mid'],
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
break;
case "1":
NavigatorUtil.goHasOrderFoodPage(context,
... ... @@ -357,26 +403,30 @@ class HomePageState extends State<HomePage> with WidgetsBindingObserver {
///获取全部未读消息
///
_getAllUnMessages() {
getUntreatedMessage('11,10,1,12,13,14', () {
MessageDialogModel messageModel =
Provider.of<MessageDialogModel>(context, listen: false);
if (messageModel.messages.isNotEmpty) {
//底部弹出布局
if (!messageModel.showMessageDialog) {
DialogUtil.showMessageDialog(context);
} else {
messageModel.notifyListeners();
}
//播放声音
if (messageModel.messages.length > 1) {
messageModel.play("-1");
} else {
for (Message message in messageModel.messages) {
messageModel.play(message.message_type);
MessageDialogModel messageModel =
Provider.of<MessageDialogModel>(context, listen: false);
messageModel.messages = [];
getUntreatedMessage('1', () {
getUntreatedMessage('10', () {
if (messageModel.messages.isNotEmpty) {
//底部弹出布局
if (!messageModel.showMessageDialog) {
DialogUtil.showMessageDialog(context);
} else {
messageModel.notifyListeners();
}
//播放声音
if (messageModel.messages.length > 1) {
messageModel.play("-1");
} else {
for (Message message in messageModel.messages) {
messageModel.play(message.message_type);
}
}
}
}
});
});
}
... ...
... ... @@ -19,8 +19,7 @@ import '../../app.dart';
class MessageDialogItem extends StatelessWidget {
final Message message;
final bool isTreated;
final VoidCallback callback;
MessageDialogItem(this.message, {this.isTreated = false, this.callback});
MessageDialogItem(this.message, {this.isTreated = false});
@override
Widget build(BuildContext context) {
... ... @@ -177,6 +176,7 @@ class MessageDialogItem extends StatelessWidget {
state: 1,
onPress: () async {
messageDialogModel.removeMessage(message.id);
if (message.message_type == "10") {
NavigatorUtil.goHandleOnlinePage(
context, message.rid.toString(), message.id,
... ... @@ -190,7 +190,6 @@ class MessageDialogItem extends StatelessWidget {
? true
: false);
bus.emit("remove_untreated_message", message.id);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false)
.user
... ... @@ -208,7 +207,7 @@ class MessageDialogItem extends StatelessWidget {
replace: messageDialogModel.messages.isEmpty
? true
: false);
bus.emit("remove_untreated_message_order", message.id);
bus.emit("remove_untreated_message", message.id);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false)
.user
... ... @@ -221,12 +220,19 @@ class MessageDialogItem extends StatelessWidget {
bus.emit("refresh_untreated_num"); //刷新未读消息数目
} else if ('${message.message_type}' == "12") {
//在线买单消息 去处理 跳转在线买单处理页面
NavigatorUtil.goOnlineCheckEditPage(context,
rid: '${message.rid}', mid: message.id);
await NavigatorUtil.goOnlineCheckEditPage(context,
rid: '${message.rid}',
mid: message.id,
replace: messageDialogModel.messages.isEmpty
? true
: false);
} else if ('${message.message_type}' == "13") {
//在线买单消息 去查看 跳转在线买单详情页面
NavigatorUtil.goOnlineCheckDetailPage(context,
rid: '${message.rid}');
rid: '${message.rid}',
replace: messageDialogModel.messages.isEmpty
? true
: false);
bus.emit("remove_untreated_message", message.id);
Map<String, String> params = {
... ... @@ -244,7 +250,10 @@ class MessageDialogItem extends StatelessWidget {
} else if (message.message_type == "14") {
//发票详情页面跳转
NavigatorUtil.goInvoiceDetailPage(context,
rid: '${message.rid}');
rid: '${message.rid}',
replace: messageDialogModel.messages.isEmpty
? true
: false);
bus.emit("remove_untreated_message", message.id);
Map<String, String> params = {
... ...
... ... @@ -41,9 +41,8 @@ class MessageOnlineCheckPageState extends State<MessageOnlineCheckPage> {
// TODO: implement initState
super.initState();
//移除在线买单消息
// bus.on("remove_untreated_message", (args) {
// bus.on("remove_untreated_message_check", (args) {
// messageModel.removeUntreatedMessageByMid(args.toString());
// messageDialogModel.removeMessage(args.toString());
// });
_controller = EasyRefreshController();
... ... @@ -59,7 +58,7 @@ class MessageOnlineCheckPageState extends State<MessageOnlineCheckPage> {
void dispose() {
// TODO: implement dispose
super.dispose();
// bus.off("remove_untreated_message");
// bus.off("remove_untreated_message_check");
}
//三种分类各自的未读消息数目
... ...
... ... @@ -40,12 +40,11 @@ class MessageOnlinePageState extends State<MessageOnlinePage> {
void initState() {
// TODO: implement initState
super.initState();
//移除在线预订消息
bus.on("remove_untreated_message", (args) {
messageModel.removeUntreatedMessageByMid(args.toString());
messageDialogModel.removeMessage(args.toString());
});
// //移除在线预订消息
// bus.on("remove_untreated_message", (args) {
// messageModel.removeUntreatedMessageByMid(args.toString());
// messageDialogModel.removeMessage(args.toString());
// });
_controller = EasyRefreshController();
WidgetsBinding.instance.addPostFrameCallback((_) {
// getMessage();
... ... @@ -59,7 +58,7 @@ class MessageOnlinePageState extends State<MessageOnlinePage> {
void dispose() {
// TODO: implement dispose
super.dispose();
bus.off("remove_untreated_message");
// bus.off("remove_untreated_message");
}
//三种分类各自的未读消息数目
... ...
... ... @@ -332,63 +332,69 @@ class _MessageHasOrderFoodPageState extends State<MessageHasOrderFoodPage> {
Widget build(BuildContext context) {
_orderFoodProvider = Provider.of<OrderFoodProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'已点菜品',
onTap: () {
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'已点菜品',
onTap: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
body: WillPopScope(child: Consumer<OrderFoodProvider>(
builder: (context, model, _) {
if (model.pageState != PageState.Success) {
return ExceptionPage(
pageState: model.pageState,
callback: () {
_getOrderFoodData();
_getTableInfoData();
},
emptyMsg: "暂时没有已选菜品哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Padding(
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(40)),
child: Column(
children: [
Expanded(
child: list(_orderFoodProvider.orderList),
),
RoundButton(
text: '分享',
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40)),
width: double.infinity,
height: 50,
fontSize: 34,
isBold: false,
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
radius: ScreenUtil().setWidth(10),
onPressed: () {
Utils.goShareOrderFoodToWeChat(context,
rid: widget.rid,
title: '菜品已点好,快来看看都点了什么~',
img:
'http://nosqn.colorcun.com/reserve/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_201911151148571.jpg');
},
)
],
),
);
}
},
), onWillPop: () async {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
body: Consumer<OrderFoodProvider>(
builder: (context, model, _) {
if (model.pageState != PageState.Success) {
return ExceptionPage(
pageState: model.pageState,
callback: () {
_getOrderFoodData();
_getTableInfoData();
},
emptyMsg: "暂时没有已选菜品哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Padding(
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(40)),
child: Column(
children: [
Expanded(
child: list(_orderFoodProvider.orderList),
),
RoundButton(
text: '分享',
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40)),
width: double.infinity,
height: 50,
fontSize: 34,
isBold: false,
gradientStart: MyColours.color_199095,
gradientEnd: MyColours.color_199095,
radius: ScreenUtil().setWidth(10),
onPressed: () {
Utils.goShareOrderFoodToWeChat(context,
rid: widget.rid,
title: '菜品已点好,快来看看都点了什么~',
img:
'http://nosqn.colorcun.com/reserve/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_201911151148571.jpg');
},
)
],
),
);
return true;
}
},
),
);
Navigator.of(context).pop();
return true;
}));
}
}
... ...
... ... @@ -48,19 +48,18 @@ class MessageOrderPageState extends State<MessageOrderPage> {
setState(() {
messageModel.pageState = PageState.Loading;
});
});
//从列表数据本地移除提前点餐消息
bus.on("remove_untreated_message_order", (args) {
messageModel.removeUntreatedMessageByMid(args.toString());
messageDialogModel.removeMessage(args.toString());
});
// bus.on("remove_untreated_message_order", (args) {
// messageModel.removeUntreatedMessageByMid(args.toString());
// messageDialogModel.removeMessage(args.toString());
// });
}
@override
void dispose() {
super.dispose();
bus.off("remove_untreated_message_order");
// bus.off("remove_untreated_message_order");
}
//三种分类各自的未读消息数目
... ...
... ... @@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/pages/message/message_online_check_page.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/message_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
... ... @@ -32,6 +33,7 @@ class MessagePageState extends State<MessagePage>
MessageModel messageModel;
UserModel userModel;
MessageDialogModel messageDialogModel;
@override
void initState() {
... ... @@ -50,6 +52,11 @@ class MessagePageState extends State<MessagePage>
bus.on("refresh_untreated_num", (arg) {
_getUnMsgNum();
});
//移除在线预订消息
bus.on("remove_untreated_message", (args) {
messageModel.removeUntreatedMessageByMid(args.toString());
messageDialogModel.removeMessage(args.toString());
});
}
//三种分类各自的未读消息数目
... ... @@ -83,6 +90,8 @@ class MessagePageState extends State<MessagePage>
Widget build(BuildContext context) {
messageModel = Provider.of<MessageModel>(context, listen: true);
userModel = Provider.of<UserModel>(context, listen: false);
messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
return Container(
width: double.infinity,
height: double.infinity,
... ... @@ -222,5 +231,6 @@ class MessagePageState extends State<MessagePage>
// TODO: implement dispose
super.dispose();
bus.off("refresh_untreated_num");
bus.off("remove_untreated_message");
}
}
... ...
... ... @@ -14,8 +14,7 @@ import 'package:provider/provider.dart';
class MessageItem extends StatelessWidget {
final Message message;
final bool isTreated;
final VoidCallback callback;
MessageItem(this.message, {this.isTreated = false, this.callback});
MessageItem(this.message, {this.isTreated = false});
@override
Widget build(BuildContext context) {
... ... @@ -80,7 +79,7 @@ class MessageItem extends StatelessWidget {
child: Stack(
children: <Widget>[
Container(
height: ScreenUtil().setWidth(290),
// height: ScreenUtil().setWidth(290),
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(39),
vertical: ScreenUtil().setWidth(12)),
... ... @@ -134,7 +133,7 @@ class MessageItem extends StatelessWidget {
),
VEmptyView(10),
Text(
"${subTitleTextSec}:${message.message_type != '12' ? message.ddateStr : message.cdateStr}",
"${subTitleTextSec}:${(message.message_type != '12' && message.message_type != '13' && message.message_type != '14') ? message.ddateStr : message.cdateStr}",
style: TextStyle(
color: textColor,
fontSize: ScreenUtil().setSp(28)),
... ... @@ -147,7 +146,8 @@ class MessageItem extends StatelessWidget {
fontSize: ScreenUtil().setSp(28)),
),
],
)
),
message.message_type == "11" ? VEmptyView(80) : VEmptyView(0)
],
),
),
... ... @@ -192,7 +192,7 @@ class MessageItem extends StatelessWidget {
//提前点餐
NavigatorUtil.goHasOrderFoodPage(context,
rid: message.rid);
bus.emit("remove_untreated_message_order", message.id);
bus.emit("remove_untreated_message", message.id);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false)
... ...
... ... @@ -11,9 +11,12 @@ import 'package:one_key/pages/online_check/progress.dart';
import 'package:one_key/provider/online_check_edit_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/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';
... ... @@ -258,8 +261,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
children: <Widget>[
InkWell(
onTap: () {
_getFromPictureOrCamera(ImageSource.camera);
Navigator.pop(context);
_getPickPermission(() {
_getFromPictureOrCamera(ImageSource.camera);
Navigator.pop(context);
}, PermissionGroup.camera);
},
child: Container(
width: double.infinity,
... ... @@ -281,9 +286,11 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
),
InkWell(
onTap: () {
pickAsset(PickType.onlyImage);
// _getFromPictureOrCamera(ImageSource.gallery);
Navigator.pop(context);
_getPickPermission(() {
pickAsset(PickType.onlyImage);
// _getFromPictureOrCamera(ImageSource.gallery);
Navigator.pop(context);
}, PermissionGroup.photos);
},
child: Container(
width: double.infinity,
... ... @@ -325,6 +332,45 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
});
}
///检测是否有相机或者相册权限
_getPickPermission(
VoidCallback callback, PermissionGroup permissionGroup) async {
if (!(await checkPermission(permissionGroup))) {
String title = '相册';
if (permissionGroup == PermissionGroup.camera) {
title = '相机';
}
PermissionStatus status = await permissionStatus(permissionGroup);
if (status == PermissionStatus.neverAskAgain) {
//用户选择不在弹出权限提示框
print('never');
Navigator.pop(context);
DialogUtil.openAlertDialog(
context, '未获得${title}权限', "请在手机的权限管理里,将${title}权限开启", '去设置', 340.0,
onTap: () {
openSetting();
Navigator.pop(context, '');
});
} else {
// 申请权限
bool canContacts = await requestPermission(permissionGroup);
if (canContacts) {
callback();
} else {
Navigator.pop(context);
//拒绝通讯录权限 , 苹果拒绝权限后,不再提示权限框,进入此处
DialogUtil.openAlertDialog(context, '未获得${title}权限',
"请在手机的权限管理里,将${title}权限开启。", '去设置', 340.0, onTap: () {
openSetting();
Navigator.pop(context, '');
});
}
}
} else {
callback();
}
}
//查看大图
_showPhotoView(BuildContext context, int index, List imgs,
{isShow = false, List dashName}) async {
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/online_check_edit_provider.dart';
import 'package:one_key/provider/order_food_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
... ... @@ -29,11 +31,28 @@ class _InvoiceDetailPageState extends State<InvoiceDetailPage> {
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (widget.fromNotify) {
_setMessageStatus();
}
_getTableInfoData();
_getOrderInfo();
});
}
_setMessageStatus() {
Future.delayed(Duration(milliseconds: 200), () async {
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": widget.rid,
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
bus.emit("refresh_untreated_num"); //刷新未读消息数目
});
}
///获取订单详情
_getOrderInfo() async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
... ... @@ -95,7 +114,6 @@ class _InvoiceDetailPageState extends State<InvoiceDetailPage> {
}
}
return Container(
height: ScreenUtil().setWidth(57 * 2),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(ScreenUtil().setWidth(10))),
... ... @@ -148,6 +166,7 @@ class _InvoiceDetailPageState extends State<InvoiceDetailPage> {
Offstage(
offstage: arrowStatus,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(14),
... ... @@ -415,15 +434,18 @@ class _InvoiceDetailPageState extends State<InvoiceDetailPage> {
style: TextStyle(
fontSize: ScreenUtil().setSp(28), color: MyColours.color_707070),
),
HEmptyView(176),
Text(
HEmptyView(60),
Expanded(
child: Text(
subTitle,
maxLines: 3,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.right,
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_707070,
fontWeight: FontWeight.bold),
)
))
],
);
}
... ... @@ -445,15 +467,24 @@ class _InvoiceDetailPageState extends State<InvoiceDetailPage> {
}
},
),
body: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(20)),
child: Column(children: [
_tableInfoWidget(),
VEmptyView(20),
_invoiceInfoWidget(),
VEmptyView(20),
_customInfoWidget()
]))));
body: WillPopScope(
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(20)),
child: Column(children: [
_tableInfoWidget(),
VEmptyView(20),
_invoiceInfoWidget(),
VEmptyView(20),
_customInfoWidget()
]))),
onWillPop: () async {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
return true;
}
Navigator.of(context).pop();
return true;
}));
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/pages/online_check/photo_view_wiget.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/online_check_edit_provider.dart';
import 'package:one_key/provider/order_food_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
... ... @@ -30,6 +32,9 @@ class _OnlineCheckDetailPageState extends State<OnlineCheckDetailPage> {
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (widget.fromNotify) {
_setMessageStatus();
}
_getQiniuInfo();
_getTableInfoData();
_getOrderInfo();
... ... @@ -43,6 +48,20 @@ class _OnlineCheckDetailPageState extends State<OnlineCheckDetailPage> {
super.dispose();
}
_setMessageStatus() {
Future.delayed(Duration(milliseconds: 200), () async {
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": widget.rid,
"status": "is_read"
};
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
await messageDialogModel.setMessageStatus(context, params);
bus.emit("refresh_untreated_num"); //刷新未读消息数目
});
}
///获取七牛云token
///
_getQiniuInfo() async {
... ... @@ -544,36 +563,46 @@ class _OnlineCheckDetailPageState extends State<OnlineCheckDetailPage> {
Provider.of<OnlineCheckEditProvider>(context, listen: true);
_orderFoodProvider = Provider.of<OrderFoodProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_f5f5f5,
appBar: SystemAppBar(
'买单申请详情',
onTap: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
body: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(20)),
child: Column(
children: [
_consumptionInfoWidget(),
VEmptyView(20),
_customerInfoWidget(),
VEmptyView(20),
Offstage(
offstage: _onlineCheckEditProvider.orderInfoSunModel != null
? _onlineCheckEditProvider.orderInfoSunModel.status == '2'
: true,
child: _orderInfoWidget(),
)
],
),
backgroundColor: MyColours.color_f5f5f5,
appBar: SystemAppBar(
'买单申请详情',
onTap: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
),
);
body: WillPopScope(
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(20)),
child: Column(
children: [
_consumptionInfoWidget(),
VEmptyView(20),
_customerInfoWidget(),
VEmptyView(20),
Offstage(
offstage: _onlineCheckEditProvider.orderInfoSunModel !=
null
? _onlineCheckEditProvider.orderInfoSunModel.status ==
'2'
: true,
child: _orderInfoWidget(),
)
],
),
),
),
onWillPop: () async {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
return true;
}
Navigator.of(context).pop();
return true;
}));
}
}
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/screenutil.dart';
import 'package:one_key/pages/online_check/img_picker_widget.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
import 'package:one_key/provider/online_check_edit_provider.dart';
import 'package:one_key/provider/order_food_provider.dart';
... ... @@ -102,6 +103,16 @@ class _OnlineCheckEditPageState extends State<OnlineCheckEditPage> {
///商家确认账单操作
_updateOrderInfo() async {
bus.emit("remove_untreated_message", widget.mid);
MessageDialogModel messageDialogModel =
Provider.of<MessageDialogModel>(context, listen: false);
Map<String, String> paramsSetMessageStatus = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": widget.mid,
"status": "is_handle"
};
await messageDialogModel.setMessageStatus(context, paramsSetMessageStatus);
bus.emit("refresh_untreated_num"); //刷新未读消息数目
String price = _editingController.text;
if (_editingController.text.startsWith('¥')) {
price = _editingController.text
... ... @@ -488,97 +499,115 @@ class _OnlineCheckEditPageState extends State<OnlineCheckEditPage> {
Provider.of<OnlineCheckEditProvider>(context, listen: true);
_orderFoodProvider = Provider.of<OrderFoodProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_f5f5f5,
appBar: SystemAppBar(
'提前买单',
onTap: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
body: InkWell(
onTap: () {
_focusNode.unfocus();
},
child: Padding(
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(20)),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(40),
//图标
_getLogoWidget(),
VEmptyView(40),
_getTabAndMoneyInfoWidget(),
VEmptyView(10),
// 备注信息
Offstage(
offstage:
_onlineCheckEditProvider.orderInfoSunModel !=
null
? _onlineCheckEditProvider
.orderInfoSunModel.orderRemark ==
''
: true,
child: Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20)),
child: Text(
_onlineCheckEditProvider.orderInfoSunModel !=
null
? _onlineCheckEditProvider
.orderInfoSunModel.orderRemark
: '',
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_FD5656),
),
),
),
VEmptyView(20),
ImgPickerWidget(
scrollController: _scrollController),
VEmptyView(20),
_customInfoWidget()
],
))),
Padding(
padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(16), 0,
ScreenUtil().setWidth(16), ScreenUtil().setWidth(40)),
child: CommonButton(
width: double.infinity,
height: 84,
fontSize: 34,
content: '发送给顾客',
state: btnState,
onPress: () async {
if (_editingController.text.startsWith('¥') &&
_editingController.text.length == 1) {
Utils.showToast('请输入金额');
setState(() {
btnState = -1;
});
return;
}
DialogUtil.confirmDialog(
context, _editingController.text, 426, onTap: () {
Navigator.pop(context);
_updateOrderInfo();
});
},
))
],
)),
),
);
backgroundColor: MyColours.color_f5f5f5,
appBar: SystemAppBar(
'提前买单',
onTap: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
body: WillPopScope(
child: InkWell(
onTap: () {
_focusNode.unfocus();
},
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(20)),
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
VEmptyView(40),
//图标
_getLogoWidget(),
VEmptyView(40),
_getTabAndMoneyInfoWidget(),
VEmptyView(10),
// 备注信息
Offstage(
offstage: _onlineCheckEditProvider
.orderInfoSunModel !=
null
? _onlineCheckEditProvider
.orderInfoSunModel
.orderRemark ==
''
: true,
child: Container(
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(20)),
child: Text(
_onlineCheckEditProvider
.orderInfoSunModel !=
null
? _onlineCheckEditProvider
.orderInfoSunModel.orderRemark
: '',
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: MyColours.color_FD5656),
),
),
),
VEmptyView(20),
ImgPickerWidget(
scrollController: _scrollController),
VEmptyView(20),
_customInfoWidget()
],
))),
Padding(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(16),
0,
ScreenUtil().setWidth(16),
ScreenUtil().setWidth(40)),
child: CommonButton(
width: double.infinity,
height: 84,
fontSize: 34,
content: '发送给顾客',
state: btnState,
onPress: () async {
if (btnState == 1) {
_focusNode.unfocus();
if (_editingController.text.startsWith('¥') &&
_editingController.text.length == 1) {
Utils.showToast('请输入金额');
setState(() {
btnState = -1;
});
return;
}
DialogUtil.confirmDialog(
context, _editingController.text, 438,
onTap: () {
Navigator.pop(context);
_updateOrderInfo();
});
}
},
))
],
)),
),
onWillPop: () async {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
return true;
}
Navigator.of(context).pop();
return true;
}));
}
}
... ...
... ... @@ -249,7 +249,7 @@ class SelectTablePageState extends State<SelectTablePage> {
}
},
canSelected: true,
canChoose: widget.canChoose,
fromPage: 'change',
tableMap: tableMap,
rid: widget.rid);
},
... ...
... ... @@ -20,8 +20,6 @@ import 'package:provider/provider.dart';
import 'dart:convert' as convert;
class TableManagerPage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
// TODO: implement createState
... ... @@ -30,7 +28,6 @@ class TableManagerPage extends StatefulWidget {
}
class TableManagerPageState extends State<TableManagerPage> {
TableManagerModel tableManagerModel;
@override
... ... @@ -38,10 +35,11 @@ class TableManagerPageState extends State<TableManagerPage> {
// TODO: implement initState
super.initState();
LogUtil.v("table_manager_page initState");
tableManagerModel=Provider.of<TableManagerModel>(context,listen: false);
tableManagerModel = Provider.of<TableManagerModel>(context, listen: false);
WidgetsBinding.instance.addPostFrameCallback((_) {
tableManagerModel.initTime(context);
EventBus().on("refresh_tablemanager", (arg) {//订座-完成预订 刷新管理桌位
EventBus().on("refresh_tablemanager", (arg) {
//订座-完成预订 刷新管理桌位
tableManagerModel.getReserveList(context);
});
});
... ... @@ -51,17 +49,15 @@ class TableManagerPageState extends State<TableManagerPage> {
Widget build(BuildContext context) {
return SafeArea(
child: Consumer<TableManagerModel>(
builder: (context,model,child){
builder: (context, model, child) {
return Column(
children: <Widget>[
MyAppBar(
"桌位",
showBack: false
),
MyAppBar("桌位", showBack: false),
Container(
color: MyColours.color_ffffff,
width: double.infinity,
padding: EdgeInsets.symmetric(vertical: ScreenUtil().setHeight(16)),
padding:
EdgeInsets.symmetric(vertical: ScreenUtil().setHeight(16)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
... ... @@ -69,10 +65,11 @@ class TableManagerPageState extends State<TableManagerPage> {
child: Center(
child: GestureDetector(
onTap: () {
DialogUtil.showCalendarDialog(context, tableManagerModel.dateTime)
DialogUtil.showCalendarDialog(
context, tableManagerModel.dateTime)
.then((day) {
if (day != null) {
tableManagerModel.createDateText(context,day);
tableManagerModel.createDateText(context, day);
}
});
},
... ... @@ -101,56 +98,77 @@ class TableManagerPageState extends State<TableManagerPage> {
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Offstage(
offstage: tableManagerModel.morning == "00:00-00:00" ? true : false,
offstage:
tableManagerModel.morning == "00:00-00:00"
? true
: false,
child: Padding(
padding: EdgeInsets.only(
right: ScreenUtil().setWidth(18)),
child: CommonButton(
content: "早市",
state: tableManagerModel.currTimeIndex == 1 ? 1 : 0,
state:
tableManagerModel.currTimeIndex == 1
? 1
: 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (tableManagerModel.currTimeIndex == 1) return;
if (tableManagerModel.currTimeIndex ==
1) return;
tableManagerModel.currTimeIndex = 1;
tableManagerModel.getReserveList(context);
tableManagerModel
.getReserveList(context);
},
))),
Offstage(
offstage: tableManagerModel.noon == "00:00-00:00" ? true : false,
offstage:
tableManagerModel.noon == "00:00-00:00"
? true
: false,
child: Padding(
padding: EdgeInsets.only(
right: ScreenUtil().setWidth(18)),
child: CommonButton(
content: "午市",
state: tableManagerModel.currTimeIndex == 2 ? 1 : 0,
state:
tableManagerModel.currTimeIndex == 2
? 1
: 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (tableManagerModel.currTimeIndex == 2) return;
if (tableManagerModel.currTimeIndex ==
2) return;
tableManagerModel.currTimeIndex = 2;
tableManagerModel.getReserveList(context);
tableManagerModel
.getReserveList(context);
},
))),
Offstage(
offstage: tableManagerModel.night == "00:00-00:00" ? true : false,
offstage: tableManagerModel.night == "00:00-00:00"
? true
: false,
child: Container(
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(10)),
// padding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(10)),
child: CommonButton(
content: "晚市",
state: tableManagerModel.currTimeIndex == 3 ? 1 : 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (tableManagerModel.currTimeIndex == 3) return;
tableManagerModel.currTimeIndex = 3;
tableManagerModel.getReserveList(context);
},
)),
content: "晚市",
state: tableManagerModel.currTimeIndex == 3
? 1
: 0,
width: 92,
height: 48,
fontSize: 32,
onPress: () {
if (tableManagerModel.currTimeIndex == 3)
return;
tableManagerModel.currTimeIndex = 3;
tableManagerModel.getReserveList(context);
},
)),
),
],
),
... ... @@ -166,138 +184,205 @@ class TableManagerPageState extends State<TableManagerPage> {
),
Expanded(
child: Consumer<TableManagerModel>(
builder: (context,model,child){
if (model.pageState != PageState.Success) {
return ExceptionPage(
pageState: model.pageState,
callback: () {
if(tableManagerModel.tableOuterList.isEmpty){
tableManagerModel.getTableList(context);
}else{
tableManagerModel.getReserveList(context);
}
},
emptyMsg: "暂时没有桌位哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
}else{
return Container(
color: MyColours.color_ffffff,
child: Row(
children: <Widget>[
Container(
width: ScreenUtil().setWidth(170),
height: double.infinity,
color: MyColours.color_f1f1f1,
child: ListView.builder(
itemBuilder: (context, index) {
return Selector<TableManagerModel,Area>(
selector: (context,model)=>model.areas[index],
builder: (context,area,_){
return AreaItem(area, tableManagerModel.currentArea,
(area) {
setState(() {
tableManagerModel.currentArea = (area as Area).name;
tableManagerModel.currentTables=tableManagerModel.areaTableMap[tableManagerModel.currentArea];
});
});
},
);
},
itemExtent: ScreenUtil().setHeight(207),
itemCount: tableManagerModel.areas.length,
),
),
Expanded(
child: Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setHeight(10),
horizontal: ScreenUtil().setWidth(9)),
child: Column(
children: [
builder: (context, model, child) {
if (model.pageState != PageState.Success) {
return ExceptionPage(
pageState: model.pageState,
callback: () {
if (tableManagerModel.tableOuterList.isEmpty) {
tableManagerModel.getTableList(context);
} else {
tableManagerModel.getReserveList(context);
}
},
emptyMsg: "暂时没有桌位哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Container(
color: MyColours.color_ffffff,
child: Row(
children: <Widget>[
Container(
width: ScreenUtil().setWidth(170),
height: double.infinity,
color: MyColours.color_f1f1f1,
child: ListView.builder(
itemBuilder: (context, index) {
return Selector<TableManagerModel, Area>(
selector: (context, model) =>
model.areas[index],
builder: (context, area, _) {
return AreaItem(
area, tableManagerModel.currentArea,
(area) {
setState(() {
tableManagerModel.currentArea =
(area as Area).name;
tableManagerModel.currentTables =
tableManagerModel.areaTableMap[
tableManagerModel
.currentArea];
});
});
},
);
},
itemExtent: ScreenUtil().setHeight(207),
itemCount: tableManagerModel.areas.length,
),
),
Expanded(
child: GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 8 / 9),
itemBuilder: (context, index) {
return Selector<TableManagerModel,t.Table>(
shouldRebuild: (pre,next)=>true,
selector: (context,model)=>model.currentTables[index],
builder: (context,table,_){
return TableItem(
table,
onSelected: (table) {
if ((table as t.Table).selected) {
tableManagerModel.selectTables.add(table);
} else {
tableManagerModel.selectTables.removeWhere(
(t) => t.id == table.id);
}
DialogUtil.showTableManagerDialog(context, table).then((value){
if(value!=null){
switch(value){
case 1://查看详情
NavigatorUtil.goNotebookDetailPage(context, tableManagerModel.tableMap[table.id].id);
break;
case 2://订座
NavigatorUtil.goNoteBookChangePage(context, NotebookDetail.fromTableManager(tableManagerModel.getCurrDdateStr(), tableManagerModel.currTimeIndex.toString(),table), "");
break;
case 3://停用,启用桌位
Map<String,String> params={
"id":(table as t.Table).id,
"status":(table as t.Table).enable=="1"?"0":"1"
};
tableManagerModel.setSwitchStatus(context, params).then((value){
if(value!=null){
(table as t.Table).enable=((int.parse((table as t.Table).enable)+1)%2).toString();
if((table as t.Table).enable=="1"){
for(Area area in tableManagerModel.areas){
if(area.name==tableManagerModel.currentArea){
if(table.sign != '5'&&table.sign != '1'){//已预订
area.count++;
child: Padding(
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setHeight(10),
horizontal: ScreenUtil().setWidth(9)),
child: Column(
children: [
Expanded(
child: GridView.builder(
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
childAspectRatio: 8 / 9),
itemBuilder: (context, index) {
return Selector<TableManagerModel,
t.Table>(
shouldRebuild: (pre, next) => true,
selector: (context, model) =>
model.currentTables[index],
builder: (context, table, _) {
return TableItem(table,
onSelected: (table) {
if ((table as t.Table)
.selected) {
tableManagerModel.selectTables
.add(table);
} else {
tableManagerModel.selectTables
.removeWhere((t) =>
t.id == table.id);
}
DialogUtil
.showTableManagerDialog(
context, table)
.then((value) {
if (value != null) {
switch (value) {
case 1: //查看详情
NavigatorUtil
.goNotebookDetailPage(
context,
tableManagerModel
.tableMap[
table
.id]
.id);
break;
case 2: //订座
NavigatorUtil.goNoteBookChangePage(
context,
NotebookDetail.fromTableManager(
tableManagerModel
.getCurrDdateStr(),
tableManagerModel
.currTimeIndex
.toString(),
table),
"");
break;
case 3: //停用,启用桌位
Map<String, String>
params = {
"id":
(table as t.Table)
.id,
"status": (table as t
.Table)
.enable ==
"1"
? "0"
: "1"
};
tableManagerModel
.setSwitchStatus(
context, params)
.then((value) {
if (value != null) {
(table as t.Table)
.enable =
((int.parse((table as t.Table).enable) +
1) %
2)
.toString();
if ((table as t
.Table)
.enable ==
"1") {
for (Area area
in tableManagerModel
.areas) {
if (area.name ==
tableManagerModel
.currentArea) {
if (table.sign !=
'5' &&
table.sign !=
'1') {
//已预订
area.count++;
}
break;
}
break;
}
}
}else{
for(Area area in tableManagerModel.areas){
if(area.name==tableManagerModel.currentArea){
if(table.sign != '5'&&table.sign != '1'){//已预订
area.count--;
} else {
for (Area area
in tableManagerModel
.areas) {
if (area.name ==
tableManagerModel
.currentArea) {
if (table.sign !=
'5' &&
table.sign !=
'1') {
//已预订
area.count--;
}
break;
}
break;
}
}
tableManagerModel
.notifyListeners();
}
tableManagerModel.notifyListeners();
}
});
break;
});
break;
}
}
}
});
});
},
canSelected: false,
fromPage: 'table_manage',
tableMap: tableManagerModel
.tableMap,
rid: "");
},
canSelected: false,
canChoose: false,
tableMap: tableManagerModel.tableMap,
rid: "");
},
);
},
itemCount: tableManagerModel.currentTables.length,
)),
);
},
itemCount: tableManagerModel
.currentTables.length,
)),
],
)),
)
],
)),
)
],
),
);
}
},
),
),
);
}
},
),
),
],
);
... ...
... ... @@ -32,6 +32,18 @@ class MessageDialogModel extends ChangeNotifier {
case "11": //取消在线预订
_player.play("tts_cancel.mp3");
break;
case "12":
//在线买单消息 去处理 跳转在线买单处理页面
_player.play("tts_pre_pay.mp3");
break;
case "13":
//在线买单消息 去查看 跳转在线买单详情页面
_player.play("tts_pay.mp3");
break;
case "14":
//发票详情页面跳转
_player.play("tts_invoice.mp3");
break;
case "1": //提前点餐
_player.play("tts_order.mp3");
break;
... ... @@ -76,24 +88,22 @@ class MessageDialogModel extends ChangeNotifier {
messagesTemp.removeWhere((message) {
if (message.message_type.toString() == "10") {
if (message.status == "4") {
//取消预定
///此状态移除,不展示
return true;
}
return false;
} else if (message.message_type.toString() == "11") {
return false;
} else if (message.message_type.toString() == "1") {
return false;
}
return true;
return false;
});
// if (params["type_id"] == '10') {
// unMessagesOnline = messagesTemp;
// } else if (params["type_id"] == '1') {
// unMessagesOrder = messagesTemp;
// }
messages.addAll(messagesTemp);
// messages.addAll(unMessagesOnline);
// messages.addAll(unMessagesOrder);
if (params["type_id"] == '10') {
unMessagesOnline = messagesTemp;
messages.addAll(unMessagesOnline);
} else if (params["type_id"] == '1') {
unMessagesOrder = messagesTemp;
messages = unMessagesOrder;
}
// messages.addAll(messagesTemp);
callback();
// if (messages.isNotEmpty) {
// //播放声音
... ...
... ... @@ -9,9 +9,6 @@ import 'package:one_key/net/http_url.dart';
class MessageModel extends ChangeNotifier {
List<Message> messages = []; //消息
List<Message> unMessagesOnline = []; //未读在线消息(取消预定和新的预订)
List<Message> unMessagesOrder = []; //未读提前点餐消息
PageState pageState = PageState.Loading;
// 未处理消息总数
int onlineTotal = 0; //在线消息
... ... @@ -21,8 +18,6 @@ class MessageModel extends ChangeNotifier {
initData() {
messages = []; //消息
unMessagesOnline = []; //未读在线消息(取消预定和新的预订)
unMessagesOrder = []; //未读提前点餐消息
pageState = PageState.Loading;
}
... ... @@ -64,15 +59,7 @@ class MessageModel extends ChangeNotifier {
return Message.fromJson(value);
}).toList());
}
if (params["status"] == '0') {
//未读消息数据
//1提前点餐2内部预订 在线预订展示包括取消预订和新的预定 "type_id"
if (params["type_id"] == '1') {
unMessagesOrder = messages;
} else {
unMessagesOnline = messages;
}
}
// if(params["type_id"]=="10"){//在线预订
// messages.removeWhere((message) {
// if (message.message_type.toString() == "10") {//在线预订
... ...
... ... @@ -673,7 +673,8 @@ class DialogUtil {
children: [
Offstage(
offstage: !(table.signStr == "已预订" ||
table.signStr == "用餐中"),
table.signStr == "用餐中" ||
table.signStr == "已买单"),
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
... ...
... ... @@ -11,6 +11,32 @@ Future<bool> checkContactPermission() async {
}
}
Future<bool> checkPermission(PermissionGroup permissionGroup) async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(permissionGroup);
if (permissionStatus == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<bool> requestPermission(PermissionGroup permissionGroup) async {
final permissions =
await PermissionHandler().requestPermissions([permissionGroup]);
if (permissions[permissionGroup] == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<PermissionStatus> permissionStatus(
PermissionGroup permissionGroup) async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(permissionGroup);
return permissionStatus;
}
Future<PermissionStatus> contactPermissionStatus() async {
PermissionStatus permissionStatus =
await PermissionHandler().checkPermissionStatus(PermissionGroup.contacts);
... ...
... ... @@ -45,9 +45,9 @@ class NavigatorUtil {
}
/// 处理在线预订
static void goHandleOnlinePage(BuildContext context, String rid, String mid,
static Future goHandleOnlinePage(BuildContext context, String rid, String mid,
{fromNotify = false, replace = false}) {
_navigateTo(context,
return _navigateTo(context,
"${Routes.handle_online_page}?rid=$rid&mid=$mid&fromNotify=$fromNotify",
replace: replace);
}
... ... @@ -130,9 +130,9 @@ class NavigatorUtil {
}
/// 提前买单编辑页面
static void goOnlineCheckEditPage(BuildContext context,
static Future goOnlineCheckEditPage(BuildContext context,
{String rid, String mid, fromNotify = false, replace = false}) {
_navigateTo(context,
return _navigateTo(context,
"${Routes.online_check_edit}?fromNotify=${fromNotify}&rid=${rid}&mid=$mid",
replace: replace);
}
... ...
... ... @@ -10,7 +10,7 @@ class TableItem extends StatefulWidget {
final t.Table table;
final bool canSelected; //是否能选中
final ValueChanged onSelected;
final bool canChoose; //从变更页面进来 = true
final String fromPage; // 变更、新建、桌位管理三个页面
final String rid;
final Map<String, Notebook> tableMap; //记录已预订桌位对应的订单
... ... @@ -20,7 +20,7 @@ class TableItem extends StatefulWidget {
{this.onSelected,
this.canSelected = false,
this.height = 185,
this.canChoose = false,
this.fromPage = 'new',
this.rid,
this.tableMap});
... ... @@ -45,7 +45,7 @@ class TableItemState extends State<TableItem> {
return GestureDetector(
onTap: () {
if (widget.canSelected && widget.canChoose) {
if (widget.canSelected && widget.fromPage == 'change') {
//从变更页面进来 canChoose = true
if (widget.canSelected && signStr.isEmpty) {
setState(() {
... ... @@ -71,17 +71,17 @@ class TableItemState extends State<TableItem> {
}
}
}
} else if (widget.canSelected && signStr.isEmpty) {
} else if (widget.fromPage == 'new' && widget.canSelected && signStr.isEmpty) {
//从安排桌位进来
setState(() {
table.selected = !(table.selected ?? false);
});
widget.onSelected(table);
}
// else {
// table.selected = !(table.selected ?? false);
// widget.onSelected(table);
// }
else if (widget.fromPage == 'table_manage'){
table.selected = !(table.selected ?? false);
widget.onSelected(table);
}
},
child: Stack(
children: <Widget>[
... ...