Commit 68afbdbb4689bb4a1dd005631fcb0c9ed267e538

Authored by “gaiyaguang”
2 parents fe4c61a2 4ecf9509

dev merge

Showing 90 changed files with 3358 additions and 568 deletions

Too many changes to show.

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

@@ -5,10 +5,16 @@ @@ -5,10 +5,16 @@
5 "version": "0.2.0", 5 "version": "0.2.0",
6 "configurations": [ 6 "configurations": [
7 { 7 {
  8 +<<<<<<< HEAD
8 "name": "Flutter", 9 "name": "Flutter",
9 "type": "dart", 10 "type": "dart",
10 "request": "launch", 11 "request": "launch",
11 "program": "lib/main.dart" 12 "program": "lib/main.dart"
  13 +=======
  14 + "name": "oneKey_wdn",
  15 + "request": "launch",
  16 + "type": "dart"
  17 +>>>>>>> v1.4+
12 } 18 }
13 ] 19 ]
14 } 20 }
1 { 1 {
  2 + "agcgw":{
  3 + "backurl":"connect-drcn.dbankcloud.cn",
  4 + "url":"connect-drcn.hispace.hicloud.com"
  5 + },
2 "client":{ 6 "client":{
3 - "cp_id":"260086000252264275",  
4 - "product_id":"9105385871708598142",  
5 - "client_id":"326681575729136832",  
6 - "client_secret":"A8D20078A192C1BD87C6B3EB5B597EF654901AE981E64701D66131A4E56A3AE9",  
7 - "app_id":"101934783", 7 + "cp_id":"890086000102028635",
  8 + "product_id":"736430079244628022",
  9 + "client_id":"447630859449664704",
  10 + "client_secret":"C7F0060C796F3C59EC7928525D6B09D66139F06EDA5C3C6B772583D34A946BBB",
  11 + "app_id":"102832405",
8 "package_name":"com.naji.one_key", 12 "package_name":"com.naji.one_key",
9 - "api_key":"CV6kBSEh4lAr9VF9v+geTdQebNtGEGQ4HcgN1igodItOCuGghaF1do+cxeVplpcEpe3pf3nwbkChLzCvkxtHvQOaPkTs" 13 + "api_key":"CgB6e3x9K3RbzJwcAdFaQxGHXy+cqz0hCk6o/By+YxTV++JZtUgxAHKZNq4t1vOpQFjD/FSlkuuPdEiHm5dQ7Cd0"
  14 + },
  15 + "service":{
  16 + "analytics":{
  17 + "collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
  18 + "resource_id":"p1",
  19 + "channel_id":""
  20 + },
  21 + "cloudstorage":{
  22 + "storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn"
  23 + },
  24 + "ml":{
  25 + "mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
  26 + }
10 }, 27 },
  28 + "region":"CN",
11 "configuration_version":"1.0" 29 "configuration_version":"1.0"
12 } 30 }
@@ -11,14 +11,14 @@ if (flutterRoot == null) { @@ -11,14 +11,14 @@ if (flutterRoot == null) {
11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 } 12 }
13 13
14 -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 14 +def flutterVersionCode = "146"
15 if (flutterVersionCode == null) { 15 if (flutterVersionCode == null) {
16 - flutterVersionCode = '1' 16 + flutterVersionCode = '146'
17 } 17 }
18 18
19 -def flutterVersionName = localProperties.getProperty('flutter.versionName') 19 +def flutterVersionName = "1.4.6"
20 if (flutterVersionName == null) { 20 if (flutterVersionName == null) {
21 - flutterVersionName = '1.0' 21 + flutterVersionName = '1.4.6'
22 } 22 }
23 23
24 apply plugin: 'com.android.application' 24 apply plugin: 'com.android.application'
@@ -41,7 +41,7 @@ android { @@ -41,7 +41,7 @@ android {
41 defaultConfig { 41 defaultConfig {
42 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 42 // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
43 applicationId "com.naji.one_key" 43 applicationId "com.naji.one_key"
44 - minSdkVersion 17 44 + minSdkVersion 21
45 targetSdkVersion 28 45 targetSdkVersion 28
46 versionCode flutterVersionCode.toInteger() 46 versionCode flutterVersionCode.toInteger()
47 versionName flutterVersionName 47 versionName flutterVersionName
@@ -49,21 +49,16 @@ android { @@ -49,21 +49,16 @@ android {
49 49
50 ndk { 50 ndk {
51 //选择要添加的对应 cpu 类型的 .so 库。 51 //选择要添加的对应 cpu 类型的 .so 库。
52 - abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a' 52 + abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
53 } 53 }
54 54
55 manifestPlaceholders = [ 55 manifestPlaceholders = [
56 - JPUSH_PKGNAME : applicationId,  
57 - JPUSH_APPKEY : "27ceb79c44af41ad99202f7a", // NOTE: JPush 上注册的包名对应的 Appkey.  
58 - JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.  
59 - HUAWEI_APPID:"101934783",//华为平台注册的appid  
60 - XIAOMI_APPKEY : "5811835841457", // 小米平台注册的appkey  
61 - XIAOMI_APPID : "2882303761518358457", // 小米平台注册的appid  
62 - OPPO_APPKEY : "94d77d10e7bb4c60bcf18a84c8ca8bdd", // OPPO平台注册的appkey  
63 - OPPO_APPID : "30260281", // OPPO平台注册的appid  
64 - OPPO_APPSECRET: "9b7e372f93794593953f93f118619570",//OPPO平台注册的appsecret  
65 -// VIVO_APPKEY : "5811835841457", // VIVO平台注册的appkey  
66 -// VIVO_APPID : "2882303761518358457", // VIVO平台注册的appid 56 + XG_ACCESS_ID : '1500012875',
  57 + XG_ACCESS_KEY : 'AVR2GJERH0HC',
  58 + HW_APPID : '102832405',
  59 + VIVO_APPID: "103886384",
  60 + VIVO_APPKEY:"5a04e5c3485c0b19a2911c95dcaff5d2",
  61 + PACKAGE_NAME : "com.naji.one_key",// 小米通道
67 ] 62 ]
68 } 63 }
69 64
@@ -86,12 +81,17 @@ android { @@ -86,12 +81,17 @@ android {
86 buildTypes { 81 buildTypes {
87 release { 82 release {
88 minifyEnabled true 83 minifyEnabled true
89 - proguardFiles 'proguard-rules.pro' 84 + // TODO: Add your own signing config for the release build.
  85 + // Signing with the debug keys for now, so `flutter run --release` works.
  86 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
90 signingConfig signingConfigs.release 87 signingConfig signingConfigs.release
91 } 88 }
92 debug{ 89 debug{
93 - minifyEnabled false  
94 - signingConfig signingConfigs.debug 90 + minifyEnabled true
  91 + // TODO: Add your own signing config for the release build.
  92 + // Signing with the debug keys for now, so `flutter run --release` works.
  93 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  94 + signingConfig signingConfigs.release
95 } 95 }
96 } 96 }
97 } 97 }
@@ -105,17 +105,8 @@ dependencies { @@ -105,17 +105,8 @@ dependencies {
105 testImplementation 'junit:junit:4.12' 105 testImplementation 'junit:junit:4.12'
106 androidTestImplementation 'androidx.test:runner:1.1.1' 106 androidTestImplementation 'androidx.test:runner:1.1.1'
107 androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' 107 androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
108 -  
109 - //华为推送  
110 - implementation 'cn.jiguang.sdk.plugin:huawei:3.5.4'  
111 - implementation 'com.huawei.hms:push:3.0.3.301'  
112 -  
113 - //小米推送  
114 - implementation 'cn.jiguang.sdk.plugin:xiaomi:3.5.4'  
115 -  
116 -// //OPPO推送  
117 -// implementation 'cn.jiguang.sdk.plugin:oppo:3.4.0'  
118 -//  
119 -// //vivo推送  
120 -// implementation 'cn.jiguang.sdk.plugin:vivo:3.5.4' 108 + implementation 'com.tencent.tpns:huawei:1.2.0.3-release'// 华为推送
  109 + implementation 'com.tencent.tpns:xiaomi:1.2.0.3-release' // 小米推送
  110 + implementation 'com.tencent.tpns:oppo:1.2.0.3-release' // OPPO 推送
  111 + implementation 'com.tencent.tpns:vivo:1.2.0.3-release' // vivo 推送
121 } 112 }
  1 +
  2 +-keep public class * extends android.app.Service
  3 +-keep public class * extends android.content.BroadcastReceiver
  4 +-keep class com.tencent.android.tpush.** {*;}
  5 +-keep class com.tencent.tpns.baseapi.** {*;}
  6 +-keep class com.tencent.tpns.mqttchannel.** {*;}
  7 +-keep class com.tencent.tpns.dataacquisition.** {*;}
  8 +
  9 +-keep class com.tencent.bigdata.baseapi.** {*;}
  10 +-keep class com.tencent.bigdata.mqttchannel.** {*;}
  11 +
  12 +#-ignorewarning
  13 +-keepattributes *Annotation*
  14 +-keepattributes Exceptions
  15 +-keepattributes InnerClasses
  16 +-keepattributes Signature
  17 +-keepattributes SourceFile,LineNumberTable
  18 +-keep class com.hianalytics.android.**{*;}
  19 +-keep class com.huawei.updatesdk.**{*;}
  20 +-keep class com.huawei.hms.**{*;}
  21 +-keep class com.huawei.android.hms.agent.**{*;}
  22 +
  23 +-keep class com.xiaomi.**{*;}
  24 +-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
  25 +
  26 +-dontwarn com.meizu.cloud.pushsdk.**
  27 +-keep class com.meizu.cloud.pushsdk.**{*;}
  28 +
  29 +-dontwarn com.vivo.push.**
  30 +-keep class com.vivo.push.**{*; }
  31 +-keep class com.vivo.vms.**{*; }
  32 +-keep class com.tencent.android.vivopush.VivoPushMessageReceiver{*;}
  33 +
  34 +-keep public class * extends android.app.Service
  35 +-keep class com.heytap.mcssdk.** {*;}
  36 +-keep class com.heytap.msp.push.** { *;}
  37 +
1 -<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
2 - package="com.naji.one_key">  
3 - <!-- Flutter needs it to communicate with the running application  
4 - to allow setting breakpoints, to provide hot reload, etc.  
5 - -->  
6 - <uses-permission android:name="android.permission.INTERNET"/>  
7 -</manifest>  
1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:tools="http://schemas.android.com/tools"
2 package="com.naji.one_key"> 3 package="com.naji.one_key">
3 <!-- io.flutter.app.FlutterApplication is an android.app.Application that 4 <!-- io.flutter.app.FlutterApplication is an android.app.Application that
4 calls FlutterMain.startInitialization(this); in its onCreate method. 5 calls FlutterMain.startInitialization(this); in its onCreate method.
5 In most cases you can leave this as-is, but you if you want to provide 6 In most cases you can leave this as-is, but you if you want to provide
6 additional functionality it is fine to subclass or reimplement 7 additional functionality it is fine to subclass or reimplement
7 FlutterApplication and put your custom class here. --> 8 FlutterApplication and put your custom class here. -->
  9 +
  10 + <uses-permission android:name="android.permission.READ_CONTACTS" />
  11 + <uses-permission android:name="android.permission.WRITE_CONTACTS" />
  12 + <uses-permission android:name="android.permission.READ_CONTACTS"/>
  13 + <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
8 <application 14 <application
9 android:name="io.flutter.app.FlutterApplication" 15 android:name="io.flutter.app.FlutterApplication"
10 android:label="一键订" 16 android:label="一键订"
  17 + tools:replace="android:label"
11 android:icon="@mipmap/ic_launcher"> 18 android:icon="@mipmap/ic_launcher">
12 <activity 19 <activity
13 android:name=".MainActivity" 20 android:name=".MainActivity"
@@ -18,25 +25,37 @@ @@ -18,25 +25,37 @@
18 android:windowSoftInputMode="adjustResize" 25 android:windowSoftInputMode="adjustResize"
19 android:exported="true" 26 android:exported="true"
20 > 27 >
  28 + <meta-data
  29 + android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
  30 + android:value="true" />
  31 +
  32 + <meta-data
  33 + android:name="io.flutter.embedding.android.SplashScreenDrawable"
  34 + android:resource="@drawable/launch_background" />
  35 +
21 <intent-filter> 36 <intent-filter>
22 <action android:name="android.intent.action.MAIN"/> 37 <action android:name="android.intent.action.MAIN"/>
23 <category android:name="android.intent.category.LAUNCHER"/> 38 <category android:name="android.intent.category.LAUNCHER"/>
24 <action android:name="android.intent.action.VIEW"/> 39 <action android:name="android.intent.action.VIEW"/>
25 <category android:name="android.intent.category.DEFAULT"/> 40 <category android:name="android.intent.category.DEFAULT"/>
26 </intent-filter> 41 </intent-filter>
27 - </activity>  
28 42
29 - <service  
30 - android:name="cn.jpush.android.service.PluginHuaweiPlatformsService"  
31 - android:exported="false"> 43 + <!-- 通知栏跳转intent -->
32 <intent-filter> 44 <intent-filter>
33 - <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> 45 + <action android:name="android.intent.action.VIEW"/>
  46 + <category android:name="android.intent.category.DEFAULT"/>
  47 + <data
  48 + android:scheme="xgscheme"
  49 + android:host="com.naji.book"
  50 + android:path="/book_detail" />
34 </intent-filter> 51 </intent-filter>
35 - </service> 52 + </activity>
  53 +
36 <!-- Don't delete the meta-data below. 54 <!-- Don't delete the meta-data below.
37 This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> 55 This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
38 <meta-data 56 <meta-data
39 android:name="flutterEmbedding" 57 android:name="flutterEmbedding"
40 android:value="2" /> 58 android:value="2" />
  59 +
41 </application> 60 </application>
42 </manifest> 61 </manifest>
1 package com.naji.one_key 1 package com.naji.one_key
2 2
3 -import android.os.Bundle  
4 -import android.os.PersistableBundle  
5 -import android.util.Log  
6 import androidx.annotation.NonNull; 3 import androidx.annotation.NonNull;
7 import io.flutter.embedding.android.FlutterActivity 4 import io.flutter.embedding.android.FlutterActivity
8 import io.flutter.embedding.engine.FlutterEngine 5 import io.flutter.embedding.engine.FlutterEngine
9 import io.flutter.plugins.GeneratedPluginRegistrant 6 import io.flutter.plugins.GeneratedPluginRegistrant
  7 +import android.os.Bundle
  8 +import android.util.Log
  9 +import io.flutter.plugin.common.MethodChannel
  10 +import io.flutter.plugin.common.MethodCall
10 11
11 class MainActivity: FlutterActivity() { 12 class MainActivity: FlutterActivity() {
12 13
13 - override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {  
14 - super.onCreate(savedInstanceState, persistentState)  
15 - Log.d("Push-Data",this.intent.data.toString());  
16 - } 14 + private var TAG = "| com.naji.book |"
  15 +
  16 + // 通道名称
  17 + private var CHANNEL = "com.naji/book"
  18 +
  19 + // native端的Intent数据
  20 + private var intentMap = mutableMapOf<String, String>()
17 21
18 override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { 22 override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
19 GeneratedPluginRegistrant.registerWith(flutterEngine); 23 GeneratedPluginRegistrant.registerWith(flutterEngine);
20 } 24 }
  25 +
  26 + override fun onCreate(savedInstanceState: Bundle?) {
  27 + super.onCreate(savedInstanceState)
  28 + // flutter版本更新后使用 getFlutterEngine().getDartExecutor().getBinaryMessenger()代替 getFlutterView()
  29 + val channel = MethodChannel(getFlutterEngine()?.getDartExecutor()?.getBinaryMessenger(), CHANNEL)
  30 +
  31 + // 这里要获取启动时的intent
  32 + val uri = intent.data
  33 + val paramsMap = mutableMapOf<String, String>()
  34 + if (uri != null) {
  35 + val set = uri.queryParameterNames
  36 + for (name in set) {
  37 + val value = uri.getQueryParameter(name)
  38 + paramsMap[name.toString()] = value.toString()
  39 + }
  40 + }
  41 +
  42 + intentMap = paramsMap
  43 +
  44 + channel.setMethodCallHandler { call, result ->
  45 + Log.i(TAG,intentMap.toString());
  46 + when (call.method) {
  47 + "getIntent" -> get_intent(call, result)
  48 + }
  49 + }
  50 + }
  51 +
  52 + // 获取intent
  53 + private fun get_intent(call: MethodCall, result: MethodChannel.Result) {
  54 + Log.i(TAG, "调用${call.method}方法")
  55 + result.success(intentMap)
  56 + }
21 } 57 }
No preview for this file type
No preview for this file type
  1 +{
  2 + "tpns": {
  3 + "access_id": "1500012875",
  4 + "access_key": "AVR2GJERH0HC"
  5 + },
  6 + "com.naji.one_key": {
  7 + "channel": {
  8 + "enable": true
  9 + }
  10 + },
  11 + "debug": false,
  12 + "version": "1.2.0.3"
  13 +}
  1 +include ':app'

1.91 KB | W: | H:

1.8 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.73 KB | W: | H:

1.93 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.58 KB | W: | H:

2.23 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.92 KB | W: | H:

2.17 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

2.22 KB | W: | H:

2.65 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.81 KB | W: | H:

1.11 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin

1.92 KB | W: | H:

1.21 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
No preview for this file type
No preview for this file type
  1 +7babc7873f8d177769b987ba4c6c2911
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>8.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
@@ -10,6 +10,7 @@ project 'Runner', { @@ -10,6 +10,7 @@ project 'Runner', {
10 'Release' => :release, 10 'Release' => :release,
11 } 11 }
12 12
  13 +<<<<<<< HEAD
13 def parse_KV_file(file, separator='=') 14 def parse_KV_file(file, separator='=')
14 file_abs_path = File.expand_path(file) 15 file_abs_path = File.expand_path(file)
15 if !File.exists? file_abs_path 16 if !File.exists? file_abs_path
@@ -86,5 +87,34 @@ post_install do |installer| @@ -86,5 +87,34 @@ post_install do |installer|
86 target.build_configurations.each do |config| 87 target.build_configurations.each do |config|
87 config.build_settings['ENABLE_BITCODE'] = 'NO' 88 config.build_settings['ENABLE_BITCODE'] = 'NO'
88 end 89 end
  90 +=======
  91 +def flutter_root
  92 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  93 + unless File.exist?(generated_xcode_build_settings_path)
  94 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  95 + end
  96 +
  97 + File.foreach(generated_xcode_build_settings_path) do |line|
  98 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  99 + return matches[1].strip if matches
  100 + end
  101 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
  102 +end
  103 +
  104 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  105 +
  106 +flutter_ios_podfile_setup
  107 +
  108 +target 'Runner' do
  109 + use_frameworks!
  110 + use_modular_headers!
  111 +
  112 + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  113 +end
  114 +
  115 +post_install do |installer|
  116 + installer.pods_project.targets.each do |target|
  117 + flutter_additional_ios_build_settings(target)
  118 +>>>>>>> v1.4+
89 end 119 end
90 end 120 end
1 PODS: 1 PODS:
2 - audioplayers (0.0.1): 2 - audioplayers (0.0.1):
3 - Flutter 3 - Flutter
  4 +<<<<<<< HEAD
4 - Bugly (2.5.5) 5 - Bugly (2.5.5)
5 - Flutter (1.0.0) 6 - Flutter (1.0.0)
  7 +=======
  8 + - Bugly (2.5.71)
  9 + - connectivity (0.0.1):
  10 + - Flutter
  11 + - Reachability
  12 + - contacts_service (0.2.2):
  13 + - Flutter
  14 + - device_info (0.0.1):
  15 + - Flutter
  16 + - easy_contact_picker (0.0.1):
  17 + - Flutter
  18 + - Flutter (1.0.0)
  19 + - flutter_app_badger (0.0.1):
  20 + - Flutter
  21 +>>>>>>> v1.4+
6 - flutter_bugly (0.0.1): 22 - flutter_bugly (0.0.1):
7 - Bugly 23 - Bugly
8 - Flutter 24 - Flutter
@@ -12,6 +28,7 @@ PODS: @@ -12,6 +28,7 @@ PODS:
12 - Flutter 28 - Flutter
13 - fluwx (0.0.1): 29 - fluwx (0.0.1):
14 - Flutter 30 - Flutter
  31 +<<<<<<< HEAD
15 - WechatOpenSDK (= 1.8.6.2) 32 - WechatOpenSDK (= 1.8.6.2)
16 - FMDB (2.7.5): 33 - FMDB (2.7.5):
17 - FMDB/standard (= 2.7.5) 34 - FMDB/standard (= 2.7.5)
@@ -27,10 +44,27 @@ PODS: @@ -27,10 +44,27 @@ PODS:
27 - shared_preferences_macos (0.0.1): 44 - shared_preferences_macos (0.0.1):
28 - Flutter 45 - Flutter
29 - shared_preferences_web (0.0.1): 46 - shared_preferences_web (0.0.1):
  47 +=======
  48 + - WechatOpenSDK (= 1.8.7.1)
  49 + - FMDB (2.7.5):
  50 + - FMDB/standard (= 2.7.5)
  51 + - FMDB/standard (2.7.5)
  52 + - install_plugin (0.0.1):
  53 + - Flutter
  54 + - package_info (0.0.1):
  55 + - Flutter
  56 + - path_provider (0.0.1):
  57 + - Flutter
  58 + - "permission_handler (4.4.0+hotfix.4)":
  59 + - Flutter
  60 + - Reachability (3.2)
  61 + - shared_preferences (0.0.1):
  62 +>>>>>>> v1.4+
30 - Flutter 63 - Flutter
31 - sqflite (0.0.1): 64 - sqflite (0.0.1):
32 - Flutter 65 - Flutter
33 - FMDB (~> 2.7.2) 66 - FMDB (~> 2.7.2)
  67 +<<<<<<< HEAD
34 - url_launcher (0.0.1): 68 - url_launcher (0.0.1):
35 - Flutter 69 - Flutter
36 - url_launcher_macos (0.0.1): 70 - url_launcher_macos (0.0.1):
@@ -42,10 +76,31 @@ PODS: @@ -42,10 +76,31 @@ PODS:
42 DEPENDENCIES: 76 DEPENDENCIES:
43 - audioplayers (from `.symlinks/plugins/audioplayers/ios`) 77 - audioplayers (from `.symlinks/plugins/audioplayers/ios`)
44 - Flutter (from `Flutter`) 78 - Flutter (from `Flutter`)
  79 +=======
  80 + - TPNS-iOS (1.2.7.2)
  81 + - tpns_flutter_plugin (1.0.4):
  82 + - Flutter
  83 + - TPNS-iOS (= 1.2.7.2)
  84 + - url_launcher (0.0.1):
  85 + - Flutter
  86 + - webview_flutter (0.0.1):
  87 + - Flutter
  88 + - WechatOpenSDK (1.8.7.1)
  89 +
  90 +DEPENDENCIES:
  91 + - audioplayers (from `.symlinks/plugins/audioplayers/ios`)
  92 + - connectivity (from `.symlinks/plugins/connectivity/ios`)
  93 + - contacts_service (from `.symlinks/plugins/contacts_service/ios`)
  94 + - device_info (from `.symlinks/plugins/device_info/ios`)
  95 + - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`)
  96 + - Flutter (from `Flutter`)
  97 + - flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
  98 +>>>>>>> v1.4+
45 - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`) 99 - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
46 - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`) 100 - flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`)
47 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) 101 - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
48 - fluwx (from `.symlinks/plugins/fluwx/ios`) 102 - fluwx (from `.symlinks/plugins/fluwx/ios`)
  103 +<<<<<<< HEAD
49 - path_provider (from `.symlinks/plugins/path_provider/ios`) 104 - path_provider (from `.symlinks/plugins/path_provider/ios`)
50 - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`) 105 - path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
51 - permission_handler (from `.symlinks/plugins/permission_handler/ios`) 106 - permission_handler (from `.symlinks/plugins/permission_handler/ios`)
@@ -56,18 +111,49 @@ DEPENDENCIES: @@ -56,18 +111,49 @@ DEPENDENCIES:
56 - url_launcher (from `.symlinks/plugins/url_launcher/ios`) 111 - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
57 - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`) 112 - url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`)
58 - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`) 113 - url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
  114 +=======
  115 + - install_plugin (from `.symlinks/plugins/install_plugin/ios`)
  116 + - package_info (from `.symlinks/plugins/package_info/ios`)
  117 + - path_provider (from `.symlinks/plugins/path_provider/ios`)
  118 + - permission_handler (from `.symlinks/plugins/permission_handler/ios`)
  119 + - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
  120 + - sqflite (from `.symlinks/plugins/sqflite/ios`)
  121 + - tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`)
  122 + - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
  123 + - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
  124 +>>>>>>> v1.4+
59 125
60 SPEC REPOS: 126 SPEC REPOS:
61 trunk: 127 trunk:
62 - Bugly 128 - Bugly
63 - FMDB 129 - FMDB
  130 +<<<<<<< HEAD
  131 +=======
  132 + - Reachability
  133 + - TPNS-iOS
  134 +>>>>>>> v1.4+
64 - WechatOpenSDK 135 - WechatOpenSDK
65 136
66 EXTERNAL SOURCES: 137 EXTERNAL SOURCES:
67 audioplayers: 138 audioplayers:
68 :path: ".symlinks/plugins/audioplayers/ios" 139 :path: ".symlinks/plugins/audioplayers/ios"
  140 +<<<<<<< HEAD
  141 + Flutter:
  142 + :path: Flutter
  143 +=======
  144 + connectivity:
  145 + :path: ".symlinks/plugins/connectivity/ios"
  146 + contacts_service:
  147 + :path: ".symlinks/plugins/contacts_service/ios"
  148 + device_info:
  149 + :path: ".symlinks/plugins/device_info/ios"
  150 + easy_contact_picker:
  151 + :path: ".symlinks/plugins/easy_contact_picker/ios"
69 Flutter: 152 Flutter:
70 :path: Flutter 153 :path: Flutter
  154 + flutter_app_badger:
  155 + :path: ".symlinks/plugins/flutter_app_badger/ios"
  156 +>>>>>>> v1.4+
71 flutter_bugly: 157 flutter_bugly:
72 :path: ".symlinks/plugins/flutter_bugly/ios" 158 :path: ".symlinks/plugins/flutter_bugly/ios"
73 flutter_statusbarcolor: 159 flutter_statusbarcolor:
@@ -76,14 +162,24 @@ EXTERNAL SOURCES: @@ -76,14 +162,24 @@ EXTERNAL SOURCES:
76 :path: ".symlinks/plugins/fluttertoast/ios" 162 :path: ".symlinks/plugins/fluttertoast/ios"
77 fluwx: 163 fluwx:
78 :path: ".symlinks/plugins/fluwx/ios" 164 :path: ".symlinks/plugins/fluwx/ios"
  165 +<<<<<<< HEAD
79 path_provider: 166 path_provider:
80 :path: ".symlinks/plugins/path_provider/ios" 167 :path: ".symlinks/plugins/path_provider/ios"
81 path_provider_macos: 168 path_provider_macos:
82 :path: ".symlinks/plugins/path_provider_macos/ios" 169 :path: ".symlinks/plugins/path_provider_macos/ios"
  170 +=======
  171 + install_plugin:
  172 + :path: ".symlinks/plugins/install_plugin/ios"
  173 + package_info:
  174 + :path: ".symlinks/plugins/package_info/ios"
  175 + path_provider:
  176 + :path: ".symlinks/plugins/path_provider/ios"
  177 +>>>>>>> v1.4+
83 permission_handler: 178 permission_handler:
84 :path: ".symlinks/plugins/permission_handler/ios" 179 :path: ".symlinks/plugins/permission_handler/ios"
85 shared_preferences: 180 shared_preferences:
86 :path: ".symlinks/plugins/shared_preferences/ios" 181 :path: ".symlinks/plugins/shared_preferences/ios"
  182 +<<<<<<< HEAD
87 shared_preferences_macos: 183 shared_preferences_macos:
88 :path: ".symlinks/plugins/shared_preferences_macos/ios" 184 :path: ".symlinks/plugins/shared_preferences_macos/ios"
89 shared_preferences_web: 185 shared_preferences_web:
@@ -119,5 +215,44 @@ SPEC CHECKSUMS: @@ -119,5 +215,44 @@ SPEC CHECKSUMS:
119 WechatOpenSDK: 8b3ba4239193d1112205c139c94e21934e8f369a 215 WechatOpenSDK: 8b3ba4239193d1112205c139c94e21934e8f369a
120 216
121 PODFILE CHECKSUM: e45c292f618eeca3034958d33b444b6e1249b55f 217 PODFILE CHECKSUM: e45c292f618eeca3034958d33b444b6e1249b55f
  218 +=======
  219 + sqflite:
  220 + :path: ".symlinks/plugins/sqflite/ios"
  221 + tpns_flutter_plugin:
  222 + :path: ".symlinks/plugins/tpns_flutter_plugin/ios"
  223 + url_launcher:
  224 + :path: ".symlinks/plugins/url_launcher/ios"
  225 + webview_flutter:
  226 + :path: ".symlinks/plugins/webview_flutter/ios"
  227 +
  228 +SPEC CHECKSUMS:
  229 + audioplayers: 84f968cea3f2deab00ec4f8ff53358b3c0b3992c
  230 + Bugly: fd066c75c4a0eca1440f9b6a84bd37d51bfc85ac
  231 + connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
  232 + contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
  233 + device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
  234 + easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
  235 + Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
  236 + flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
  237 + flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
  238 + flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259
  239 + fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b
  240 + fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902
  241 + FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
  242 + install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb
  243 + package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
  244 + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
  245 + permission_handler: 8278954f2382902f63f00dd8828769c0bd6d511b
  246 + Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
  247 + shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
  248 + sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0
  249 + TPNS-iOS: 9b35473a4a0d07f2c2730ea1e66c6749c2b98095
  250 + tpns_flutter_plugin: 8dbbee157aab91a878f64d056c1383726a6c5c4d
  251 + url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
  252 + webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96
  253 + WechatOpenSDK: 6a4d1436c15b3b5fe2a0bd383f3046010186da44
  254 +
  255 +PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa
  256 +>>>>>>> v1.4+
122 257
123 COCOAPODS: 1.9.3 258 COCOAPODS: 1.9.3
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 46;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  14 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  15 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  16 + A7F352227F0F121A53D9A543 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F11082C59A1D00E83E0934D /* Pods_Runner.framework */; };
  17 +/* End PBXBuildFile section */
  18 +
  19 +/* Begin PBXCopyFilesBuildPhase section */
  20 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  21 + isa = PBXCopyFilesBuildPhase;
  22 + buildActionMask = 2147483647;
  23 + dstPath = "";
  24 + dstSubfolderSpec = 10;
  25 + files = (
  26 + );
  27 + name = "Embed Frameworks";
  28 + runOnlyForDeploymentPostprocessing = 0;
  29 + };
  30 +/* End PBXCopyFilesBuildPhase section */
  31 +
  32 +/* Begin PBXFileReference section */
  33 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  34 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  35 + 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>"; };
  36 + 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>"; };
  37 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  38 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  39 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  40 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  41 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  42 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  43 + 97C146EE1CF9000F007C117D /* 一键订.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "一键订.app"; sourceTree = BUILT_PRODUCTS_DIR; };
  44 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  45 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  46 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  47 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  48 + 9F11082C59A1D00E83E0934D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  49 + CC19436D18202E6CAD07F931 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
  50 + EE6AF8FF2457DB720005E3B9 /* RunnerProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerProfile.entitlements; sourceTree = "<group>"; };
  51 + EE6AF9002457DC0C0005E3B9 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
  52 +/* End PBXFileReference section */
  53 +
  54 +/* Begin PBXFrameworksBuildPhase section */
  55 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  56 + isa = PBXFrameworksBuildPhase;
  57 + buildActionMask = 2147483647;
  58 + files = (
  59 + A7F352227F0F121A53D9A543 /* Pods_Runner.framework in Frameworks */,
  60 + );
  61 + runOnlyForDeploymentPostprocessing = 0;
  62 + };
  63 +/* End PBXFrameworksBuildPhase section */
  64 +
  65 +/* Begin PBXGroup section */
  66 + 5F6C37E5A77D3FF43D0DBCC2 /* Pods */ = {
  67 + isa = PBXGroup;
  68 + children = (
  69 + 22513BD076488FBD50F0303F /* Pods-Runner.debug.xcconfig */,
  70 + 2DCAB49DF131E02F3BAF38E1 /* Pods-Runner.release.xcconfig */,
  71 + CC19436D18202E6CAD07F931 /* Pods-Runner.profile.xcconfig */,
  72 + );
  73 + path = Pods;
  74 + sourceTree = "<group>";
  75 + };
  76 + 8074F3926F79FEBA9CA1E157 /* Frameworks */ = {
  77 + isa = PBXGroup;
  78 + children = (
  79 + 9F11082C59A1D00E83E0934D /* Pods_Runner.framework */,
  80 + );
  81 + name = Frameworks;
  82 + sourceTree = "<group>";
  83 + };
  84 + 9740EEB11CF90186004384FC /* Flutter */ = {
  85 + isa = PBXGroup;
  86 + children = (
  87 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  88 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  89 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  90 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  91 + );
  92 + name = Flutter;
  93 + sourceTree = "<group>";
  94 + };
  95 + 97C146E51CF9000F007C117D = {
  96 + isa = PBXGroup;
  97 + children = (
  98 + 9740EEB11CF90186004384FC /* Flutter */,
  99 + 97C146F01CF9000F007C117D /* Runner */,
  100 + 97C146EF1CF9000F007C117D /* Products */,
  101 + 5F6C37E5A77D3FF43D0DBCC2 /* Pods */,
  102 + 8074F3926F79FEBA9CA1E157 /* Frameworks */,
  103 + );
  104 + sourceTree = "<group>";
  105 + };
  106 + 97C146EF1CF9000F007C117D /* Products */ = {
  107 + isa = PBXGroup;
  108 + children = (
  109 + 97C146EE1CF9000F007C117D /* 一键订.app */,
  110 + );
  111 + name = Products;
  112 + sourceTree = "<group>";
  113 + };
  114 + 97C146F01CF9000F007C117D /* Runner */ = {
  115 + isa = PBXGroup;
  116 + children = (
  117 + EE6AF9002457DC0C0005E3B9 /* Runner.entitlements */,
  118 + EE6AF8FF2457DB720005E3B9 /* RunnerProfile.entitlements */,
  119 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  120 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  121 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  122 + 97C147021CF9000F007C117D /* Info.plist */,
  123 + 97C146F11CF9000F007C117D /* Supporting Files */,
  124 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  125 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  126 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  127 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  128 + );
  129 + path = Runner;
  130 + sourceTree = "<group>";
  131 + };
  132 + 97C146F11CF9000F007C117D /* Supporting Files */ = {
  133 + isa = PBXGroup;
  134 + children = (
  135 + );
  136 + name = "Supporting Files";
  137 + sourceTree = "<group>";
  138 + };
  139 +/* End PBXGroup section */
  140 +
  141 +/* Begin PBXNativeTarget section */
  142 + 97C146ED1CF9000F007C117D /* Runner */ = {
  143 + isa = PBXNativeTarget;
  144 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  145 + buildPhases = (
  146 + 9C09FB22D919B3DDAB7B4DE4 /* [CP] Check Pods Manifest.lock */,
  147 + 9740EEB61CF901F6004384FC /* Run Script */,
  148 + 97C146EA1CF9000F007C117D /* Sources */,
  149 + 97C146EB1CF9000F007C117D /* Frameworks */,
  150 + 97C146EC1CF9000F007C117D /* Resources */,
  151 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  152 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  153 + 9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */,
  154 + );
  155 + buildRules = (
  156 + );
  157 + dependencies = (
  158 + );
  159 + name = Runner;
  160 + productName = Runner;
  161 + productReference = 97C146EE1CF9000F007C117D /* 一键订.app */;
  162 + productType = "com.apple.product-type.application";
  163 + };
  164 +/* End PBXNativeTarget section */
  165 +
  166 +/* Begin PBXProject section */
  167 + 97C146E61CF9000F007C117D /* Project object */ = {
  168 + isa = PBXProject;
  169 + attributes = {
  170 + LastUpgradeCheck = 1020;
  171 + ORGANIZATIONNAME = "The Chromium Authors";
  172 + TargetAttributes = {
  173 + 97C146ED1CF9000F007C117D = {
  174 + CreatedOnToolsVersion = 7.3.1;
  175 + DevelopmentTeam = 8J59HM8B82;
  176 + LastSwiftMigration = 1100;
  177 + ProvisioningStyle = Automatic;
  178 + };
  179 + };
  180 + };
  181 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  182 + compatibilityVersion = "Xcode 3.2";
  183 + developmentRegion = en;
  184 + hasScannedForEncodings = 0;
  185 + knownRegions = (
  186 + en,
  187 + Base,
  188 + );
  189 + mainGroup = 97C146E51CF9000F007C117D;
  190 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  191 + projectDirPath = "";
  192 + projectRoot = "";
  193 + targets = (
  194 + 97C146ED1CF9000F007C117D /* Runner */,
  195 + );
  196 + };
  197 +/* End PBXProject section */
  198 +
  199 +/* Begin PBXResourcesBuildPhase section */
  200 + 97C146EC1CF9000F007C117D /* Resources */ = {
  201 + isa = PBXResourcesBuildPhase;
  202 + buildActionMask = 2147483647;
  203 + files = (
  204 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  205 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  206 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  207 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  208 + );
  209 + runOnlyForDeploymentPostprocessing = 0;
  210 + };
  211 +/* End PBXResourcesBuildPhase section */
  212 +
  213 +/* Begin PBXShellScriptBuildPhase section */
  214 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  215 + isa = PBXShellScriptBuildPhase;
  216 + buildActionMask = 2147483647;
  217 + files = (
  218 + );
  219 + inputPaths = (
  220 + );
  221 + name = "Thin Binary";
  222 + outputPaths = (
  223 + );
  224 + runOnlyForDeploymentPostprocessing = 0;
  225 + shellPath = /bin/sh;
  226 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  227 + };
  228 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  229 + isa = PBXShellScriptBuildPhase;
  230 + buildActionMask = 2147483647;
  231 + files = (
  232 + );
  233 + inputPaths = (
  234 + );
  235 + name = "Run Script";
  236 + outputPaths = (
  237 + );
  238 + runOnlyForDeploymentPostprocessing = 0;
  239 + shellPath = /bin/sh;
  240 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  241 + };
  242 + 9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */ = {
  243 + isa = PBXShellScriptBuildPhase;
  244 + buildActionMask = 2147483647;
  245 + files = (
  246 + );
  247 + inputPaths = (
  248 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
  249 + "${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
  250 + "${PODS_ROOT}/../Flutter/Flutter.framework",
  251 + "${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
  252 + "${BUILT_PRODUCTS_DIR}/audioplayers/audioplayers.framework",
  253 + "${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
  254 + "${BUILT_PRODUCTS_DIR}/contacts_service/contacts_service.framework",
  255 + "${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
  256 + "${BUILT_PRODUCTS_DIR}/easy_contact_picker/easy_contact_picker.framework",
  257 + "${BUILT_PRODUCTS_DIR}/flutter_app_badger/flutter_app_badger.framework",
  258 + "${BUILT_PRODUCTS_DIR}/flutter_statusbarcolor/flutter_statusbarcolor.framework",
  259 + "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
  260 + "${BUILT_PRODUCTS_DIR}/install_plugin/install_plugin.framework",
  261 + "${BUILT_PRODUCTS_DIR}/package_info/package_info.framework",
  262 + "${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
  263 + "${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
  264 + "${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
  265 + "${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework",
  266 + "${BUILT_PRODUCTS_DIR}/webview_flutter/webview_flutter.framework",
  267 + );
  268 + name = "[CP] Embed Pods Frameworks";
  269 + outputPaths = (
  270 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
  271 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
  272 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
  273 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers.framework",
  274 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
  275 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/contacts_service.framework",
  276 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
  277 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/easy_contact_picker.framework",
  278 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_app_badger.framework",
  279 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_statusbarcolor.framework",
  280 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
  281 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/install_plugin.framework",
  282 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework",
  283 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
  284 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
  285 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
  286 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework",
  287 + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/webview_flutter.framework",
  288 + );
  289 + runOnlyForDeploymentPostprocessing = 0;
  290 + shellPath = /bin/sh;
  291 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
  292 + showEnvVarsInLog = 0;
  293 + };
  294 + 9C09FB22D919B3DDAB7B4DE4 /* [CP] Check Pods Manifest.lock */ = {
  295 + isa = PBXShellScriptBuildPhase;
  296 + buildActionMask = 2147483647;
  297 + files = (
  298 + );
  299 + inputFileListPaths = (
  300 + );
  301 + inputPaths = (
  302 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  303 + "${PODS_ROOT}/Manifest.lock",
  304 + );
  305 + name = "[CP] Check Pods Manifest.lock";
  306 + outputFileListPaths = (
  307 + );
  308 + outputPaths = (
  309 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  310 + );
  311 + runOnlyForDeploymentPostprocessing = 0;
  312 + shellPath = /bin/sh;
  313 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  314 + showEnvVarsInLog = 0;
  315 + };
  316 +/* End PBXShellScriptBuildPhase section */
  317 +
  318 +/* Begin PBXSourcesBuildPhase section */
  319 + 97C146EA1CF9000F007C117D /* Sources */ = {
  320 + isa = PBXSourcesBuildPhase;
  321 + buildActionMask = 2147483647;
  322 + files = (
  323 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  324 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  325 + );
  326 + runOnlyForDeploymentPostprocessing = 0;
  327 + };
  328 +/* End PBXSourcesBuildPhase section */
  329 +
  330 +/* Begin PBXVariantGroup section */
  331 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  332 + isa = PBXVariantGroup;
  333 + children = (
  334 + 97C146FB1CF9000F007C117D /* Base */,
  335 + );
  336 + name = Main.storyboard;
  337 + sourceTree = "<group>";
  338 + };
  339 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  340 + isa = PBXVariantGroup;
  341 + children = (
  342 + 97C147001CF9000F007C117D /* Base */,
  343 + );
  344 + name = LaunchScreen.storyboard;
  345 + sourceTree = "<group>";
  346 + };
  347 +/* End PBXVariantGroup section */
  348 +
  349 +/* Begin XCBuildConfiguration section */
  350 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  351 + isa = XCBuildConfiguration;
  352 + buildSettings = {
  353 + ALWAYS_SEARCH_USER_PATHS = NO;
  354 + CLANG_ANALYZER_NONNULL = YES;
  355 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  356 + CLANG_CXX_LIBRARY = "libc++";
  357 + CLANG_ENABLE_MODULES = YES;
  358 + CLANG_ENABLE_OBJC_ARC = YES;
  359 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  360 + CLANG_WARN_BOOL_CONVERSION = YES;
  361 + CLANG_WARN_COMMA = YES;
  362 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  363 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  364 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  365 + CLANG_WARN_EMPTY_BODY = YES;
  366 + CLANG_WARN_ENUM_CONVERSION = YES;
  367 + CLANG_WARN_INFINITE_RECURSION = YES;
  368 + CLANG_WARN_INT_CONVERSION = YES;
  369 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  370 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  371 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  372 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  373 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  374 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  375 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  376 + CLANG_WARN_UNREACHABLE_CODE = YES;
  377 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  378 + CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
  379 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Naji (Beijing) Technology Co., Ltd. (8J59HM8B82)";
  380 + COPY_PHASE_STRIP = NO;
  381 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  382 + ENABLE_NS_ASSERTIONS = NO;
  383 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  384 + GCC_C_LANGUAGE_STANDARD = gnu99;
  385 + GCC_NO_COMMON_BLOCKS = YES;
  386 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  387 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  388 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  389 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  390 + GCC_WARN_UNUSED_FUNCTION = YES;
  391 + GCC_WARN_UNUSED_VARIABLE = YES;
  392 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  393 + MTL_ENABLE_DEBUG_INFO = NO;
  394 + PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
  395 + SDKROOT = iphoneos;
  396 + SUPPORTED_PLATFORMS = iphoneos;
  397 + TARGETED_DEVICE_FAMILY = "1,2";
  398 + VALIDATE_PRODUCT = YES;
  399 + };
  400 + name = Profile;
  401 + };
  402 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  403 + isa = XCBuildConfiguration;
  404 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  405 + buildSettings = {
  406 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  407 + CLANG_ENABLE_MODULES = YES;
  408 + CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
  409 + CODE_SIGN_IDENTITY = "iPhone Developer";
  410 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  411 + CODE_SIGN_STYLE = Automatic;
  412 + CURRENT_PROJECT_VERSION = 146;
  413 + DEVELOPMENT_TEAM = 8J59HM8B82;
  414 + ENABLE_BITCODE = NO;
  415 + FRAMEWORK_SEARCH_PATHS = (
  416 + "$(inherited)",
  417 + "$(PROJECT_DIR)/Flutter",
  418 + );
  419 + INFOPLIST_FILE = Runner/Info.plist;
  420 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  421 + LIBRARY_SEARCH_PATHS = (
  422 + "$(inherited)",
  423 + "$(PROJECT_DIR)/Flutter",
  424 + );
  425 + MARKETING_VERSION = 1.4.6;
  426 + PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
  427 + PRODUCT_NAME = "一键订";
  428 + PROVISIONING_PROFILE_SPECIFIER = "";
  429 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  430 + SWIFT_VERSION = 5.0;
  431 + VERSIONING_SYSTEM = "apple-generic";
  432 + };
  433 + name = Profile;
  434 + };
  435 + 97C147031CF9000F007C117D /* Debug */ = {
  436 + isa = XCBuildConfiguration;
  437 + buildSettings = {
  438 + ALWAYS_SEARCH_USER_PATHS = NO;
  439 + CLANG_ANALYZER_NONNULL = YES;
  440 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  441 + CLANG_CXX_LIBRARY = "libc++";
  442 + CLANG_ENABLE_MODULES = YES;
  443 + CLANG_ENABLE_OBJC_ARC = YES;
  444 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  445 + CLANG_WARN_BOOL_CONVERSION = YES;
  446 + CLANG_WARN_COMMA = YES;
  447 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  448 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  449 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  450 + CLANG_WARN_EMPTY_BODY = YES;
  451 + CLANG_WARN_ENUM_CONVERSION = YES;
  452 + CLANG_WARN_INFINITE_RECURSION = YES;
  453 + CLANG_WARN_INT_CONVERSION = YES;
  454 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  455 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  456 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  457 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  458 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  459 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  460 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  461 + CLANG_WARN_UNREACHABLE_CODE = YES;
  462 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  463 + CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
  464 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: 亚光 盖 (78U98359LM)";
  465 + COPY_PHASE_STRIP = NO;
  466 + DEBUG_INFORMATION_FORMAT = dwarf;
  467 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  468 + ENABLE_TESTABILITY = YES;
  469 + GCC_C_LANGUAGE_STANDARD = gnu99;
  470 + GCC_DYNAMIC_NO_PIC = NO;
  471 + GCC_NO_COMMON_BLOCKS = YES;
  472 + GCC_OPTIMIZATION_LEVEL = 0;
  473 + GCC_PREPROCESSOR_DEFINITIONS = (
  474 + "DEBUG=1",
  475 + "$(inherited)",
  476 + );
  477 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  478 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  479 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  480 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  481 + GCC_WARN_UNUSED_FUNCTION = YES;
  482 + GCC_WARN_UNUSED_VARIABLE = YES;
  483 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  484 + MTL_ENABLE_DEBUG_INFO = YES;
  485 + ONLY_ACTIVE_ARCH = YES;
  486 + PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
  487 + SDKROOT = iphoneos;
  488 + TARGETED_DEVICE_FAMILY = "1,2";
  489 + };
  490 + name = Debug;
  491 + };
  492 + 97C147041CF9000F007C117D /* Release */ = {
  493 + isa = XCBuildConfiguration;
  494 + buildSettings = {
  495 + ALWAYS_SEARCH_USER_PATHS = NO;
  496 + CLANG_ANALYZER_NONNULL = YES;
  497 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  498 + CLANG_CXX_LIBRARY = "libc++";
  499 + CLANG_ENABLE_MODULES = YES;
  500 + CLANG_ENABLE_OBJC_ARC = YES;
  501 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  502 + CLANG_WARN_BOOL_CONVERSION = YES;
  503 + CLANG_WARN_COMMA = YES;
  504 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  505 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  506 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  507 + CLANG_WARN_EMPTY_BODY = YES;
  508 + CLANG_WARN_ENUM_CONVERSION = YES;
  509 + CLANG_WARN_INFINITE_RECURSION = YES;
  510 + CLANG_WARN_INT_CONVERSION = YES;
  511 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  512 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  513 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  514 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  515 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  516 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  517 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  518 + CLANG_WARN_UNREACHABLE_CODE = YES;
  519 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  520 + CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
  521 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Naji (Beijing) Technology Co., Ltd. (8J59HM8B82)";
  522 + COPY_PHASE_STRIP = NO;
  523 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  524 + ENABLE_NS_ASSERTIONS = NO;
  525 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  526 + GCC_C_LANGUAGE_STANDARD = gnu99;
  527 + GCC_NO_COMMON_BLOCKS = YES;
  528 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  529 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  530 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  531 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  532 + GCC_WARN_UNUSED_FUNCTION = YES;
  533 + GCC_WARN_UNUSED_VARIABLE = YES;
  534 + IPHONEOS_DEPLOYMENT_TARGET = 8.0;
  535 + MTL_ENABLE_DEBUG_INFO = NO;
  536 + PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
  537 + SDKROOT = iphoneos;
  538 + SUPPORTED_PLATFORMS = iphoneos;
  539 + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
  540 + TARGETED_DEVICE_FAMILY = "1,2";
  541 + VALIDATE_PRODUCT = YES;
  542 + };
  543 + name = Release;
  544 + };
  545 + 97C147061CF9000F007C117D /* Debug */ = {
  546 + isa = XCBuildConfiguration;
  547 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  548 + buildSettings = {
  549 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  550 + CLANG_ENABLE_MODULES = YES;
  551 + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
  552 + CODE_SIGN_IDENTITY = "iPhone Developer";
  553 + CODE_SIGN_STYLE = Automatic;
  554 + CURRENT_PROJECT_VERSION = 146;
  555 + DEVELOPMENT_TEAM = 8J59HM8B82;
  556 + ENABLE_BITCODE = NO;
  557 + FRAMEWORK_SEARCH_PATHS = (
  558 + "$(inherited)",
  559 + "$(PROJECT_DIR)/Flutter",
  560 + );
  561 + INFOPLIST_FILE = Runner/Info.plist;
  562 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  563 + LIBRARY_SEARCH_PATHS = (
  564 + "$(inherited)",
  565 + "$(PROJECT_DIR)/Flutter",
  566 + );
  567 + MARKETING_VERSION = 1.4.6;
  568 + PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
  569 + PRODUCT_NAME = "一键订";
  570 + PROVISIONING_PROFILE_SPECIFIER = "";
  571 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  572 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  573 + SWIFT_VERSION = 5.0;
  574 + VERSIONING_SYSTEM = "apple-generic";
  575 + };
  576 + name = Debug;
  577 + };
  578 + 97C147071CF9000F007C117D /* Release */ = {
  579 + isa = XCBuildConfiguration;
  580 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  581 + buildSettings = {
  582 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  583 + CLANG_ENABLE_MODULES = YES;
  584 + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
  585 + CODE_SIGN_IDENTITY = "iPhone Developer";
  586 + CODE_SIGN_STYLE = Automatic;
  587 + CURRENT_PROJECT_VERSION = 146;
  588 + DEVELOPMENT_TEAM = 8J59HM8B82;
  589 + ENABLE_BITCODE = NO;
  590 + FRAMEWORK_SEARCH_PATHS = (
  591 + "$(inherited)",
  592 + "$(PROJECT_DIR)/Flutter",
  593 + );
  594 + INFOPLIST_FILE = Runner/Info.plist;
  595 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
  596 + LIBRARY_SEARCH_PATHS = (
  597 + "$(inherited)",
  598 + "$(PROJECT_DIR)/Flutter",
  599 + );
  600 + MARKETING_VERSION = 1.4.6;
  601 + PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
  602 + PRODUCT_NAME = "一键订";
  603 + PROVISIONING_PROFILE_SPECIFIER = "";
  604 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  605 + SWIFT_VERSION = 5.0;
  606 + VERSIONING_SYSTEM = "apple-generic";
  607 + };
  608 + name = Release;
  609 + };
  610 +/* End XCBuildConfiguration section */
  611 +
  612 +/* Begin XCConfigurationList section */
  613 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  614 + isa = XCConfigurationList;
  615 + buildConfigurations = (
  616 + 97C147031CF9000F007C117D /* Debug */,
  617 + 97C147041CF9000F007C117D /* Release */,
  618 + 249021D3217E4FDB00AE95B9 /* Profile */,
  619 + );
  620 + defaultConfigurationIsVisible = 0;
  621 + defaultConfigurationName = Release;
  622 + };
  623 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  624 + isa = XCConfigurationList;
  625 + buildConfigurations = (
  626 + 97C147061CF9000F007C117D /* Debug */,
  627 + 97C147071CF9000F007C117D /* Release */,
  628 + 249021D4217E4FDB00AE95B9 /* Profile */,
  629 + );
  630 + defaultConfigurationIsVisible = 0;
  631 + defaultConfigurationName = Release;
  632 + };
  633 +/* End XCConfigurationList section */
  634 + };
  635 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  636 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1020"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  34 + BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  57 + BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  74 + BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +import UIKit
  2 +import Flutter
  3 +
  4 +@UIApplicationMain
  5 +@objc class AppDelegate: FlutterAppDelegate {
  6 + override func application(
  7 + _ application: UIApplication,
  8 + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  9 + ) -> Bool {
  10 + let controller = self.window.rootViewController as! FlutterViewController
  11 + let channel = FlutterMethodChannel.init(name: "com.naji/book", binaryMessenger: controller as! FlutterBinaryMessenger)
  12 + channel.setMethodCallHandler { (call, result) in
  13 + if call.method == "getIntent" {
  14 + // let para = call.arguments
  15 + // print(para!)
  16 + let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification];
  17 +
  18 + result(userInfo);
  19 + }else{
  20 + result(FlutterMethodNotImplemented)
  21 + }
  22 + }
  23 + GeneratedPluginRegistrant.register(with: self)
  24 + return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  25 + }
  26 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleDisplayName</key>
  8 + <string>$(PRODUCT_NAME)</string>
  9 + <key>CFBundleExecutable</key>
  10 + <string>$(EXECUTABLE_NAME)</string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>com.naji.reserveLine</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>Runner</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(MARKETING_VERSION)</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleURLTypes</key>
  24 + <array>
  25 + <dict>
  26 + <key>CFBundleTypeRole</key>
  27 + <string>Editor</string>
  28 + <key>CFBundleURLName</key>
  29 + <string>weixin</string>
  30 + <key>CFBundleURLSchemes</key>
  31 + <array>
  32 + <string>wx85aa3cdd0f791e65</string>
  33 + </array>
  34 + </dict>
  35 + </array>
  36 + <key>CFBundleVersion</key>
  37 + <string>$(CURRENT_PROJECT_VERSION)</string>
  38 + <key>LSApplicationCategoryType</key>
  39 + <string></string>
  40 + <key>LSApplicationQueriesSchemes</key>
  41 + <array>
  42 + <string>weixinULAPI</string>
  43 + <string>wechat</string>
  44 + <string>weixin</string>
  45 + </array>
  46 + <key>LSRequiresIPhoneOS</key>
  47 + <true/>
  48 + <key>NSAppTransportSecurity</key>
  49 + <dict>
  50 + <key>NSAllowsArbitraryLoads</key>
  51 + <true/>
  52 + </dict>
  53 + <key>NSAppleMusicUsageDescription</key>
  54 + <string>需要您的同意,APP才能访问媒体资料库</string>
  55 + <key>NSCalendarsUsageDescription</key>
  56 + <string>需要您的同意,APP才能访问日历</string>
  57 + <key>NSContactsUsageDescription</key>
  58 + <string>需要您的同意,APP才能访问通讯录</string>
  59 + <key>NSLocationAlwaysUsageDescription</key>
  60 + <string>需要您的同意,APP才能始终访问位置</string>
  61 + <key>NSLocationWhenInUseUsageDescription</key>
  62 + <string>需要您的同意,APP才能在使用期间访问位置</string>
  63 + <key>NSMotionUsageDescription</key>
  64 + <string>需要您的同意,APP才能访问运动与健身</string>
  65 + <key>NSSpeechRecognitionUsageDescription</key>
  66 + <string>需要您的同意,APP才能访问语音识别</string>
  67 + <key>UILaunchStoryboardName</key>
  68 + <string>LaunchScreen</string>
  69 + <key>UIMainStoryboardFile</key>
  70 + <string>Main</string>
  71 + <key>UISupportedInterfaceOrientations</key>
  72 + <array>
  73 + <string>UIInterfaceOrientationPortrait</string>
  74 + <string>UIInterfaceOrientationLandscapeRight</string>
  75 + </array>
  76 + <key>UISupportedInterfaceOrientations~ipad</key>
  77 + <array>
  78 + <string>UIInterfaceOrientationPortrait</string>
  79 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  80 + <string>UIInterfaceOrientationLandscapeLeft</string>
  81 + <string>UIInterfaceOrientationLandscapeRight</string>
  82 + </array>
  83 + <key>UIViewControllerBasedStatusBarAppearance</key>
  84 + <false/>
  85 + <key>XG_ACCESS_ID</key>
  86 + <string>1600012876</string>
  87 + <key>XG_ACCESS_KEY</key>
  88 + <string>INUIMFK21WGH</string>
  89 + <key>io.flutter.embedded_views_preview</key>
  90 + <true/>
  91 +</dict>
  92 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>aps-environment</key>
  6 + <string>development</string>
  7 + <key>com.apple.developer.associated-domains</key>
  8 + <array>
  9 + <string>applinks:xt04.colorcun.com</string>
  10 + </array>
  11 +</dict>
  12 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>aps-environment</key>
  6 + <string>development</string>
  7 + <key>com.apple.developer.associated-domains</key>
  8 + <array>
  9 + <string>applinks:xt04.colorcun.com</string>
  10 + </array>
  11 +</dict>
  12 +</plist>
1 import 'package:fluro/fluro.dart'; 1 import 'package:fluro/fluro.dart';
2 -import 'package:flutter/material.dart'; 2 +import 'package:flutter/material.dart' hide Router;
3 import 'package:get_it/get_it.dart'; 3 import 'package:get_it/get_it.dart';
4 import 'package:shared_preferences/shared_preferences.dart'; 4 import 'package:shared_preferences/shared_preferences.dart';
5 5
@@ -23,4 +23,4 @@ class App{ @@ -23,4 +23,4 @@ class App{
23 getIt.registerSingleton(NavigateService()); 23 getIt.registerSingleton(NavigateService());
24 } 24 }
25 25
26 -}  
  26 +}
  1 +
  2 +class MyError extends Error{
  3 + final int type;
  4 +
  5 + MyError({this.type=1});//1 ConnectivityError 2 ConnectivityTimeOut
  6 +
  7 +
  8 +}
  1 +/**
  2 + * 页面状态
  3 + */
  4 +enum PageState{
  5 + Loading,//加载中
  6 + ConnectivityTimeOut,//请求超时
  7 + ConnectivityError,//请求错误
  8 + Empty,//空页面
  9 + First,
  10 + Success//成功
  11 +}
  1 +import 'dart:io';
  2 +
  3 +import 'package:common_utils/common_utils.dart';
1 import 'package:dio/dio.dart'; 4 import 'package:dio/dio.dart';
2 import 'package:fluro/fluro.dart'; 5 import 'package:fluro/fluro.dart';
3 -import 'package:flutter/material.dart'; 6 +import 'package:flutter/material.dart' hide Router;
  7 +import 'package:flutter_bugly/flutter_bugly.dart';
4 import 'package:flutter_easyrefresh/ball_pulse_footer.dart'; 8 import 'package:flutter_easyrefresh/ball_pulse_footer.dart';
5 import 'package:flutter_easyrefresh/easy_refresh.dart'; 9 import 'package:flutter_easyrefresh/easy_refresh.dart';
6 import 'package:flutter_easyrefresh/material_header.dart'; 10 import 'package:flutter_easyrefresh/material_header.dart';
7 import 'package:fluwx/fluwx.dart'; 11 import 'package:fluwx/fluwx.dart';
  12 +import 'package:one_key/pages/detail/handle_online_page.dart';
8 import 'package:one_key/provider/message_dialog_model.dart'; 13 import 'package:one_key/provider/message_dialog_model.dart';
9 import 'package:intl/date_symbol_data_local.dart'; 14 import 'package:intl/date_symbol_data_local.dart';
  15 +import 'package:one_key/provider/tools.dart';
  16 +import 'package:one_key/utils/navigator_util.dart';
10 import 'package:one_key/utils/utils.dart'; 17 import 'package:one_key/utils/utils.dart';
11 import 'package:provider/provider.dart'; 18 import 'package:provider/provider.dart';
  19 +import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';
12 20
13 import 'app.dart'; 21 import 'app.dart';
14 import 'net/dio_util.dart'; 22 import 'net/dio_util.dart';
@@ -17,28 +25,36 @@ import 'pages/login/login_page.dart'; @@ -17,28 +25,36 @@ import 'pages/login/login_page.dart';
17 import 'provider/user_model.dart'; 25 import 'provider/user_model.dart';
18 import 'route/navigate_service.dart'; 26 import 'route/navigate_service.dart';
19 import 'route/routes.dart'; 27 import 'route/routes.dart';
20 -import 'utils/log_util.dart';  
21 import 'package:flutter/services.dart'; 28 import 'package:flutter/services.dart';
22 29
23 Future<void> main() async { 30 Future<void> main() async {
24 - Router router = Router();  
25 - Routes.configureRoutes(router);  
26 - App.router = router;  
27 - App.setupLocator();  
28 - LogUtil.init(isDebug: true, tag: 'ONE_KEY');  
29 - Provider.debugCheckInvalidValueType = null;  
30 - await initializeDateFormatting();  
31 - runApp(MultiProvider(  
32 - providers: [  
33 - ChangeNotifierProvider<UserModel>(  
34 - create: (_) => UserModel(),  
35 - ),  
36 - ChangeNotifierProvider<MessageDialogModel>(  
37 - create: (_) => MessageDialogModel()..init(),  
38 - )  
39 - ],  
40 - child: MyApp(),  
41 - )); 31 + FlutterBugly.postCatchedException(() async {
  32 + WidgetsFlutterBinding.ensureInitialized();
  33 + Router router = Router();
  34 + Routes.configureRoutes(router);
  35 + App.router = router;
  36 + App.setupLocator();
  37 + LogUtil.init(isDebug: false, tag: 'ONE_KEY');
  38 + Provider.debugCheckInvalidValueType = null;
  39 + await initializeDateFormatting();
  40 + SystemChrome.setPreferredOrientations(
  41 + [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown])
  42 + .then((_) {
  43 + runApp(MultiProvider(
  44 + providers: [
  45 + ChangeNotifierProvider<UserModel>(
  46 + create: (_) => UserModel(),
  47 + ),
  48 + ChangeNotifierProvider<MessageDialogModel>(
  49 + create: (_) => MessageDialogModel()..init(),
  50 + ),
  51 + ],
  52 + child: MyApp(),
  53 + ));
  54 + });
  55 +
  56 + FlutterBugly.init(androidAppId: "f71a313f42", iOSAppId: "3089e4587e");
  57 + });
42 } 58 }
43 59
44 class MyApp extends StatefulWidget { 60 class MyApp extends StatefulWidget {
@@ -50,6 +66,8 @@ class MyApp extends StatefulWidget { @@ -50,6 +66,8 @@ class MyApp extends StatefulWidget {
50 } 66 }
51 67
52 class MyAppState extends State<MyApp> { 68 class MyAppState extends State<MyApp> {
  69 + int xgCount = 1; //注册信鸽次数,最多5次
  70 +
53 @override 71 @override
54 void initState() { 72 void initState() {
55 // TODO: implement initState 73 // TODO: implement initState
@@ -73,6 +91,7 @@ class MyAppState extends State<MyApp> { @@ -73,6 +91,7 @@ class MyAppState extends State<MyApp> {
73 LogUtil.v("is installed $result"); 91 LogUtil.v("is installed $result");
74 } 92 }
75 93
  94 +//初始化dio
76 initDio() { 95 initDio() {
77 DioUtil.openDebug(); 96 DioUtil.openDebug();
78 Options options = DioUtil.getDefOptions(); 97 Options options = DioUtil.getDefOptions();
@@ -13,7 +13,7 @@ class Manager{ @@ -13,7 +13,7 @@ class Manager{
13 } 13 }
14 14
15 String get userName{ 15 String get userName{
16 - return nick_name.isEmpty?user_name:nick_name; 16 + return (nick_name==null||nick_name.isEmpty)?user_name:nick_name;
17 } 17 }
18 18
19 factory Manager.fromJson(Map<String,dynamic> json)=> 19 factory Manager.fromJson(Map<String,dynamic> json)=>
1 import 'package:json_annotation/json_annotation.dart'; 1 import 'package:json_annotation/json_annotation.dart';
  2 +import 'package:one_key/utils/utils.dart';
2 3
3 part 'message.g.dart'; 4 part 'message.g.dart';
4 5
@@ -7,7 +8,7 @@ class Message { @@ -7,7 +8,7 @@ class Message {
7 Message(); 8 Message();
8 9
9 String id; 10 String id;
10 - String message_type; 11 + dynamic message_type;
11 String handle_time;//10在线预订 11取消预订 12 String handle_time;//10在线预订 11取消预订
12 String read_time; 13 String read_time;
13 String is_read; 14 String is_read;
@@ -26,20 +27,38 @@ class Message { @@ -26,20 +27,38 @@ class Message {
26 String get rnameStr{ 27 String get rnameStr{
27 switch(sex.toString()){ 28 switch(sex.toString()){
28 case "1"://先生 29 case "1"://先生
  30 + case "男":
29 return rname+"先生"; 31 return rname+"先生";
30 case "2"://女士 32 case "2"://女士
  33 + case "女":
31 return rname+"女士"; 34 return rname+"女士";
32 case "3"://公司 35 case "3"://公司
  36 + case "公司":
33 return rname+"公司"; 37 return rname+"公司";
34 } 38 }
35 } 39 }
36 40
  41 + String get ddateStr{
  42 + DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate_long.toString())*1000);
  43 + String ymd=dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day);
  44 + switch(ddate_solt){
  45 + case "1"://早餐
  46 + return ymd+" 早餐";
  47 + case "2"://午餐
  48 + return ymd+" 午餐";
  49 + case "3"://晚餐
  50 + return ymd+" 晚餐";
  51 + default:
  52 + return ymd;
  53 + }
  54 + }
  55 +
37 String get cdateStr{ 56 String get cdateStr{
38 DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString())*1000); 57 DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString())*1000);
39 if((DateTime.now().difference(dateTime)).inMilliseconds<60000){ 58 if((DateTime.now().difference(dateTime)).inMilliseconds<60000){
40 return "刚刚"; 59 return "刚刚";
41 }else{ 60 }else{
42 - return dateTime.year.toString()+"/"+(dateTime.month<10?"0"+dateTime.month.toString():dateTime.month.toString())+"/"+(dateTime.day<10?"0"+dateTime.day.toString():dateTime.day.toString()); 61 + return dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day)+" "+Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);
43 } 62 }
44 } 63 }
45 64
@@ -9,7 +9,7 @@ part of 'message.dart'; @@ -9,7 +9,7 @@ part of 'message.dart';
9 Message _$MessageFromJson(Map<String, dynamic> json) { 9 Message _$MessageFromJson(Map<String, dynamic> json) {
10 return Message() 10 return Message()
11 ..id = json['id'] as String 11 ..id = json['id'] as String
12 - ..message_type = json['message_type'] as String 12 + ..message_type = json['message_type']
13 ..handle_time = json['handle_time'] as String 13 ..handle_time = json['handle_time'] as String
14 ..read_time = json['read_time'] as String 14 ..read_time = json['read_time'] as String
15 ..is_read = json['is_read'] as String 15 ..is_read = json['is_read'] as String
1 import 'dart:convert'; 1 import 'dart:convert';
2 2
3 import 'package:json_annotation/json_annotation.dart'; 3 import 'package:json_annotation/json_annotation.dart';
4 -import 'package:one_key/utils/log_util.dart';  
5 import 'package:one_key/utils/utils.dart'; 4 import 'package:one_key/utils/utils.dart';
6 part 'notebook.g.dart'; 5 part 'notebook.g.dart';
7 6
  1 +import 'package:common_utils/common_utils.dart';
  2 +import 'package:flutter/cupertino.dart';
1 import 'package:json_annotation/json_annotation.dart'; 3 import 'package:json_annotation/json_annotation.dart';
  4 +import 'package:one_key/models/table.dart';
  5 +import 'package:one_key/provider/user_model.dart';
2 import 'package:one_key/utils/utils.dart'; 6 import 'package:one_key/utils/utils.dart';
  7 +import 'package:provider/provider.dart';
3 import 'dart:convert'; 8 import 'dart:convert';
4 import "table.dart"; 9 import "table.dart";
  10 +import 'package:one_key/models/table.dart' as t;
5 part 'notebook_detail.g.dart'; 11 part 'notebook_detail.g.dart';
6 12
7 @JsonSerializable() 13 @JsonSerializable()
8 class NotebookDetail { 14 class NotebookDetail {
9 - NotebookDetail();  
10 -  
11 - String id;  
12 - String tableinfo;  
13 - String pnum;  
14 - String rname;  
15 - String sex;  
16 - String phone;  
17 - String cusdem;  
18 - String cusman;//客户经理  
19 - String ddate;  
20 - String is_set_ddate;  
21 - String ddate_solt;  
22 - String status="0";//订单状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单  
23 - String action;  
24 - String type;//0 内部订单 1 在线预订  
25 - String note_name;  
26 - String channel;  
27 - String cdate;  
28 - List<Table> demands;//需求桌位  
29 - List<Table> tables;//预订桌位  
30 - Cancel cancel;  
31 -  
32 - String get statuImgAssets{  
33 - switch(status){  
34 - case "0":  
35 - return "assets/status_undeal.png";  
36 - case "1":  
37 - case "5":  
38 - return "assets/statu_booked.png";  
39 - case "2":  
40 - return "assets/statu_reached.png";  
41 - case "3":  
42 - return "assets/statu_finished.png";  
43 - case "4":  
44 - return "assets/statu_canceled.png";  
45 - case "6":  
46 - return "assets/statu_refuse.png";  
47 - } 15 + NotebookDetail();
  16 +
  17 + NotebookDetail.def(BuildContext context){
  18 + id="-1";
  19 + pnum="6";
  20 + rname="";
  21 + sex="1";
  22 + phone="";
  23 + cusdem="";
  24 + type="0";
  25 + ddate=(DateTime.now().millisecondsSinceEpoch/1000).floor().toString();
  26 + ddate_solt=defDdateSolt(context);
  27 + is_set_ddate="0";
  28 + tables=[];
  29 + }
  30 +
  31 + NotebookDetail.fromTableManager(String ddateStr,String ddatesolt,t.Table table){
  32 + id="-1";
  33 + pnum="6";
  34 + rname="";
  35 + sex="1";
  36 + phone="";
  37 + cusdem="";
  38 + type="0";
  39 + ddate=ddateStr;
  40 + ddate_solt=ddatesolt;
  41 + is_set_ddate="1";
  42 + tables=[table];
  43 + }
  44 +
  45 + String defDdateSolt(BuildContext context){
  46 + int millsNow=DateTime.now().millisecondsSinceEpoch;
  47 + UserModel userModel=Provider.of<UserModel>(context,listen: false);
  48 + String morning=userModel.user.morning==""?"00:00-00:00":userModel.user.morning;
  49 + String noon=userModel.user.noon==""?"00:00-00:00":userModel.user.noon;
  50 + String night=userModel.user.night==""?"00:00-00:00":userModel.user.night;
  51 + String endMorning=morning.split("-")[1];
  52 + String endNoon=noon.split("-")[1];
  53 + String endNight=night.split("-")[1];
  54 + int endMorningMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endMorning:00"));
  55 + int endNoonMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNoon:00"));
  56 + int endNightMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNight:00"));
  57 + if(millsNow<=endMorningMills){
  58 + return "1";
  59 + }else if(millsNow<=endNoonMills){
  60 + return "2";
  61 + }else if(millsNow<=endNightMills){
  62 + return "3";
  63 + }
  64 + }
  65 +
  66 +
  67 + String id;
  68 + String abolition;
  69 + String tableinfo;
  70 + String pnum;
  71 + String rname;
  72 + String sex;
  73 + String phone;
  74 + String cusdem;
  75 + String cusman; //客户经理
  76 + String ddate;
  77 + String is_set_ddate;
  78 + String ddate_solt;
  79 + String status = "0"; //订单状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
  80 + String action;
  81 + String type; //0 内部订单 1 在线预订
  82 + String note_name;
  83 + String channel;
  84 + String cdate;
  85 + List<t.Table> demands; //需求桌位
  86 + List<t.Table> tables; //预订桌位
  87 + Cancel cancel;
  88 +
  89 + String get statuImgAssets {
  90 + switch (status) {
  91 + case "0":
  92 + return "assets/status_undeal.png";
  93 + case "1":
  94 + case "5":
  95 + return "assets/statu_booked.png";
  96 + case "2":
  97 + return "assets/statu_reached.png";
  98 + case "3":
  99 + return "assets/statu_finished.png";
  100 + case "4":
  101 + return "assets/statu_canceled.png";
  102 + case "6":
  103 + return "assets/statu_refuse.png";
48 } 104 }
  105 + }
49 106
50 - String get ddateMd{  
51 - DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);  
52 - String md=Utils.addZeroNumber(dateTime.month)+"月"+Utils.addZeroNumber(dateTime.day)+"日";  
53 - switch (ddate_solt){  
54 - case "1":  
55 - md+=" 早餐";  
56 - break;  
57 - case "2":  
58 - md+=" 午餐";  
59 - break;  
60 - case "3":  
61 - md+=" 晚餐";  
62 - break;  
63 - }  
64 - return md; 107 + String get demandStr{
  108 + String demand="";
  109 + for(t.Table table in demands){
  110 + demand+=table.name+",";
65 } 111 }
  112 + return demand.substring(0,demand.length-1);
  113 + }
66 114
67 - String get ddateHm{  
68 - if(type=="0"||(type=="1"&&is_set_ddate=="1")){  
69 - DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);  
70 - String Hm=Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);  
71 - return Hm;  
72 - }else{  
73 - return "";  
74 - } 115 + String get ddateMd {
  116 + DateTime dateTime =
  117 + DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
  118 + String md = Utils.addZeroNumber(dateTime.month) +
  119 + "月" +
  120 + Utils.addZeroNumber(dateTime.day) +
  121 + "日";
  122 + switch (ddate_solt) {
  123 + case "1":
  124 + md += " 早餐";
  125 + break;
  126 + case "2":
  127 + md += " 午餐";
  128 + break;
  129 + case "3":
  130 + md += " 晚餐";
  131 + break;
75 } 132 }
  133 + return md;
  134 + }
76 135
77 - String get ddateStr{  
78 - String ddateStr;  
79 - if (type=="1"&&is_set_ddate=="0"){//在线预订,没有设置到店时间  
80 - switch (ddate_solt){  
81 - case "1":  
82 - ddateStr="早餐";  
83 - break;  
84 - case "2":  
85 - ddateStr="午餐";  
86 - break;  
87 - case "3":  
88 - ddateStr="晚餐";  
89 - break;  
90 - default:  
91 - ddateStr="";  
92 - break;  
93 - }  
94 - }else{  
95 - DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);  
96 - ddateStr=Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);  
97 - }  
98 - return ddateStr; 136 + String get ddateHm {
  137 + if (type == "0" || (type == "1" && is_set_ddate == "1")) {
  138 + DateTime dateTime =
  139 + DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
  140 + String Hm = Utils.addZeroNumber(dateTime.hour) +
  141 + ":" +
  142 + Utils.addZeroNumber(dateTime.minute);
  143 + return Hm;
  144 + } else {
  145 + return "";
99 } 146 }
  147 + }
100 148
101 - String get rnameStr{  
102 - if(rname.isEmpty)return "";  
103 - switch(sex){  
104 - case "1"://先生  
105 - return rname+"先生";  
106 - case "2"://女士  
107 - return rname+"女士";  
108 - case "3"://公司  
109 - return rname+"公司";  
110 - } 149 + String get ddateStr {
  150 + String ddateStr;
  151 + if (type == "1" && is_set_ddate == "0") {
  152 + //在线预订,没有设置到店时间
  153 + switch (ddate_solt) {
  154 + case "1":
  155 + ddateStr = "早餐";
  156 + break;
  157 + case "2":
  158 + ddateStr = "午餐";
  159 + break;
  160 + case "3":
  161 + ddateStr = "晚餐";
  162 + break;
  163 + default:
  164 + ddateStr = "";
  165 + break;
  166 + }
  167 + } else {
  168 + DateTime dateTime =
  169 + DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
  170 + ddateStr = Utils.addZeroNumber(dateTime.hour) +
  171 + ":" +
  172 + Utils.addZeroNumber(dateTime.minute);
111 } 173 }
  174 + return ddateStr;
  175 + }
112 176
113 - String get tableinfoStr{  
114 - return tables[0].name+ "\n"+(tables.length>=2?('等'+tables.length.toString()+'桌'):''); 177 + String get rnameStr {
  178 + if (rname.isEmpty) return "";
  179 + switch (sex) {
  180 + case "1": //先生
  181 + return rname + "先生";
  182 + case "2": //女士
  183 + return rname + "女士";
  184 + case "3": //公司
  185 + return rname + "公司";
115 } 186 }
  187 + }
  188 +
  189 + String get tableinfoStr {
  190 + return tables[0].name +
  191 + "\n" +
  192 + (tables.length >= 2 ? ('等' + tables.length.toString() + '桌') : '');
  193 + }
  194 +
  195 + factory NotebookDetail.fromJson(Map<String, dynamic> json) =>
  196 + _$NotebookDetailFromJson(json);
  197 + Map<String, dynamic> toJson() => _$NotebookDetailToJson(this);
  198 +
  199 + @override
  200 + String toString() {
  201 + 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}';
  202 + }
  203 +
116 204
117 - factory NotebookDetail.fromJson(Map<String,dynamic> json) => _$NotebookDetailFromJson(json);  
118 - Map<String, dynamic> toJson() => _$NotebookDetailToJson(this);  
119 } 205 }
120 206
121 @JsonSerializable() 207 @JsonSerializable()
122 class Cancel { 208 class Cancel {
123 - Cancel(); 209 + Cancel();
124 210
125 - String uname;  
126 - String desc;  
127 - String cdate; 211 + String uname;
  212 + String desc;
  213 + String cdate;
128 214
129 - String get cdateStr{  
130 - DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(cdate)*1000);  
131 - return dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day)+" "+Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);  
132 - } 215 + String get cdateStr {
  216 + DateTime dateTime =
  217 + DateTime.fromMillisecondsSinceEpoch(int.parse(cdate) * 1000);
  218 + return dateTime.year.toString() +
  219 + "/" +
  220 + Utils.addZeroNumber(dateTime.month) +
  221 + "/" +
  222 + Utils.addZeroNumber(dateTime.day) +
  223 + " " +
  224 + Utils.addZeroNumber(dateTime.hour) +
  225 + ":" +
  226 + Utils.addZeroNumber(dateTime.minute);
  227 + }
133 228
134 - factory Cancel.fromJson(Map<String,dynamic> json) => _$CancelFromJson(json);  
135 - Map<String, dynamic> toJson() => _$CancelToJson(this); 229 + factory Cancel.fromJson(Map<String, dynamic> json) => _$CancelFromJson(json);
  230 + Map<String, dynamic> toJson() => _$CancelToJson(this);
136 } 231 }
1 // GENERATED CODE - DO NOT MODIFY BY HAND 1 // GENERATED CODE - DO NOT MODIFY BY HAND
2 2
  3 +
3 part of 'notebook_detail.dart'; 4 part of 'notebook_detail.dart';
4 5
  6 +
5 // ************************************************************************** 7 // **************************************************************************
6 // JsonSerializableGenerator 8 // JsonSerializableGenerator
7 // ************************************************************************** 9 // **************************************************************************
@@ -10,6 +12,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) { @@ -10,6 +12,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
10 return NotebookDetail() 12 return NotebookDetail()
11 ..id = json['id'] as String 13 ..id = json['id'] as String
12 ..tableinfo = json['tableinfo'] as String 14 ..tableinfo = json['tableinfo'] as String
  15 + ..abolition = json['abolition'] as String
13 ..pnum = json['pnum'] as String 16 ..pnum = json['pnum'] as String
14 ..rname = json['rname'] as String 17 ..rname = json['rname'] as String
15 ..sex = json['sex'] as String 18 ..sex = json['sex'] as String
@@ -27,11 +30,11 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) { @@ -27,11 +30,11 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
27 ..cdate = json['cdate'] as String 30 ..cdate = json['cdate'] as String
28 ..demands = (json['demands'] as List) 31 ..demands = (json['demands'] as List)
29 ?.map( 32 ?.map(
30 - (e) => e == null ? null : Table.fromJson(e as Map<String, dynamic>)) 33 + (e) => e == null ? null : t.Table.fromJson(e as Map<String, dynamic>))
31 ?.toList() 34 ?.toList()
32 ..tables = (json['tables'] as List) 35 ..tables = (json['tables'] as List)
33 ?.map( 36 ?.map(
34 - (e) => e == null ? null : Table.fromJson(e as Map<String, dynamic>)) 37 + (e) => e == null ? null : t.Table.fromJson(e as Map<String, dynamic>))
35 ?.toList() 38 ?.toList()
36 ..cancel = json['cancel'] == null 39 ..cancel = json['cancel'] == null
37 ? null 40 ? null
@@ -42,6 +45,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) => @@ -42,6 +45,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
42 <String, dynamic>{ 45 <String, dynamic>{
43 'id': instance.id, 46 'id': instance.id,
44 'tableinfo': instance.tableinfo, 47 'tableinfo': instance.tableinfo,
  48 + 'abolition':instance.abolition,
45 'pnum': instance.pnum, 49 'pnum': instance.pnum,
46 'rname': instance.rname, 50 'rname': instance.rname,
47 'sex': instance.sex, 51 'sex': instance.sex,
  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'reserve_info_model.g.dart';
  4 +
  5 +
  6 +@JsonSerializable()
  7 + class ReserveInfoModel extends Object {
  8 +
  9 + @JsonKey(name: 'ret')
  10 + int ret;
  11 +
  12 + @JsonKey(name: 'data')
  13 + SunReserveInfoModel data;
  14 +
  15 + @JsonKey(name: 'msg')
  16 + String msg;
  17 +
  18 + ReserveInfoModel(this.ret,this.data,this.msg,);
  19 +
  20 + factory ReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$ReserveInfoModelFromJson(srcJson);
  21 +
  22 + Map<String, dynamic> toJson() => _$ReserveInfoModelToJson(this);
  23 +
  24 +}
  25 +
  26 +
  27 +@JsonSerializable()
  28 + class SunReserveInfoModel extends Object {
  29 +
  30 + @JsonKey(name: 'row')
  31 + RowModel row;
  32 +
  33 + @JsonKey(name: 'list')
  34 + List<dynamic> list;
  35 +
  36 + @JsonKey(name: 'table')
  37 + List<dynamic> table;
  38 +
  39 + SunReserveInfoModel(this.row,this.list,this.table,);
  40 +
  41 + factory SunReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$SunReserveInfoModelFromJson(srcJson);
  42 +
  43 + Map<String, dynamic> toJson() => _$SunReserveInfoModelToJson(this);
  44 +
  45 +}
  46 +
  47 +
  48 +@JsonSerializable()
  49 + class RowModel extends Object {
  50 +
  51 + @JsonKey(name: 'id')
  52 + String id;
  53 +
  54 + @JsonKey(name: 'tableinfo')
  55 + String tableinfo;
  56 +
  57 + @JsonKey(name: 'tid')
  58 + String tid;
  59 +
  60 + @JsonKey(name: 'rname')
  61 + String rname;
  62 +
  63 + @JsonKey(name: 'sex')
  64 + String sex;
  65 +
  66 + @JsonKey(name: 'phone')
  67 + String phone;
  68 +
  69 + @JsonKey(name: 'cusman')
  70 + String cusman;
  71 +
  72 + @JsonKey(name: 'ddate')
  73 + String ddate;
  74 +
  75 + @JsonKey(name: 'cdate')
  76 + String cdate;
  77 +
  78 + @JsonKey(name: 'cusdem')
  79 + String cusdem;
  80 +
  81 + @JsonKey(name: 'status')
  82 + String status;
  83 +
  84 + @JsonKey(name: 'action')
  85 + String action;
  86 +
  87 + @JsonKey(name: 'is_set_ddate')
  88 + String isSetDdate;
  89 +
  90 + @JsonKey(name: 'ddate_solt')
  91 + String ddateSolt;
  92 +
  93 + @JsonKey(name: 'type')
  94 + String type;
  95 +
  96 + @JsonKey(name: 'name')
  97 + String name;
  98 +
  99 + RowModel(this.id,this.tableinfo,this.tid,this.rname,this.sex,this.phone,this.cusman,this.ddate,this.cdate,this.cusdem,this.status,this.action,this.isSetDdate,this.ddateSolt,this.type,this.name,);
  100 +
  101 + factory RowModel.fromJson(Map<String, dynamic> srcJson) => _$RowModelFromJson(srcJson);
  102 +
  103 + Map<String, dynamic> toJson() => _$RowModelToJson(this);
  104 +
  105 +}
  106 +
  107 +
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'reserve_info_model.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +ReserveInfoModel _$ReserveInfoModelFromJson(Map<String, dynamic> json) {
  10 + return ReserveInfoModel(
  11 + json['ret'] as int,
  12 + json['data'] == null
  13 + ? null
  14 + : SunReserveInfoModel.fromJson(json['data'] as Map<String, dynamic>),
  15 + json['msg'] as String);
  16 +}
  17 +
  18 +Map<String, dynamic> _$ReserveInfoModelToJson(ReserveInfoModel instance) =>
  19 + <String, dynamic>{
  20 + 'ret': instance.ret,
  21 + 'data': instance.data,
  22 + 'msg': instance.msg
  23 + };
  24 +
  25 +SunReserveInfoModel _$SunReserveInfoModelFromJson(Map<String, dynamic> json) {
  26 + return SunReserveInfoModel(
  27 + json['row'] == null
  28 + ? null
  29 + : RowModel.fromJson(json['row'] as Map<String, dynamic>),
  30 + json['list'] as List,
  31 + json['table'] as List);
  32 +}
  33 +
  34 +Map<String, dynamic> _$SunReserveInfoModelToJson(
  35 + SunReserveInfoModel instance) =>
  36 + <String, dynamic>{
  37 + 'row': instance.row,
  38 + 'list': instance.list,
  39 + 'table': instance.table
  40 + };
  41 +
  42 +RowModel _$RowModelFromJson(Map<String, dynamic> json) {
  43 + return RowModel(
  44 + json['id'] as String,
  45 + json['tableinfo'] as String,
  46 + json['tid'] as String,
  47 + json['rname'] as String,
  48 + json['sex'] as String,
  49 + json['phone'] as String,
  50 + json['cusman'] as String,
  51 + json['ddate'] as String,
  52 + json['cdate'] as String,
  53 + json['cusdem'] as String,
  54 + json['status'] as String,
  55 + json['action'] as String,
  56 + json['is_set_ddate'] as String,
  57 + json['ddate_solt'] as String,
  58 + json['type'] as String,
  59 + json['name'] as String);
  60 +}
  61 +
  62 +Map<String, dynamic> _$RowModelToJson(RowModel instance) => <String, dynamic>{
  63 + 'id': instance.id,
  64 + 'tableinfo': instance.tableinfo,
  65 + 'tid': instance.tid,
  66 + 'rname': instance.rname,
  67 + 'sex': instance.sex,
  68 + 'phone': instance.phone,
  69 + 'cusman': instance.cusman,
  70 + 'ddate': instance.ddate,
  71 + 'cdate': instance.cdate,
  72 + 'cusdem': instance.cusdem,
  73 + 'status': instance.status,
  74 + 'action': instance.action,
  75 + 'is_set_ddate': instance.isSetDdate,
  76 + 'ddate_solt': instance.ddateSolt,
  77 + 'type': instance.type,
  78 + 'name': instance.name
  79 + };
  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'seller_info.g.dart';
  4 +
  5 +@JsonSerializable()
  6 +class SellerInfoModel extends Object {
  7 + @JsonKey(name: 'ret')
  8 + int ret;
  9 +
  10 + @JsonKey(name: 'data')
  11 + SunSellerInfoModel data;
  12 +
  13 + @JsonKey(name: 'msg')
  14 + String msg;
  15 +
  16 + SellerInfoModel(
  17 + this.ret,
  18 + this.data,
  19 + this.msg,
  20 + );
  21 +
  22 + factory SellerInfoModel.fromJson(Map<String, dynamic> srcJson) =>
  23 + _$SellerInfoModelFromJson(srcJson);
  24 +
  25 + Map<String, dynamic> toJson() => _$SellerInfoModelToJson(this);
  26 +}
  27 +
  28 +@JsonSerializable()
  29 +class SunSellerInfoModel extends Object {
  30 + @JsonKey(name: 'seller')
  31 + Seller seller;
  32 +
  33 + @JsonKey(name: 'manager')
  34 + List<Manager> manager;
  35 +
  36 + @JsonKey(name: 'seller_user')
  37 + SellerUser sellerUser;
  38 +
  39 + @JsonKey(name: 'daily')
  40 + Daily daily;
  41 +
  42 + @JsonKey(name: 'config')
  43 + List<dynamic> config;
  44 +
  45 + @JsonKey(name: 'setting')
  46 + Setting setting;
  47 +
  48 + @JsonKey(name: 'scatter')
  49 + int scatter;
  50 +
  51 + @JsonKey(name: 'room')
  52 + int room;
  53 +
  54 + @JsonKey(name: 'cassette')
  55 + int cassette;
  56 +
  57 + SunSellerInfoModel(
  58 + this.seller,
  59 + this.manager,
  60 + this.sellerUser,
  61 + this.daily,
  62 + this.config,
  63 + this.setting,
  64 + this.scatter,
  65 + this.room,
  66 + this.cassette,
  67 + );
  68 +
  69 + factory SunSellerInfoModel.fromJson(Map<String, dynamic> srcJson) =>
  70 + _$SunSellerInfoModelFromJson(srcJson);
  71 +
  72 + Map<String, dynamic> toJson() => _$SunSellerInfoModelToJson(this);
  73 +}
  74 +
  75 +@JsonSerializable()
  76 +class Seller extends Object {
  77 + @JsonKey(name: 'id')
  78 + String id;
  79 +
  80 + @JsonKey(name: 'sellername')
  81 + String sellername;
  82 +
  83 + @JsonKey(name: 'selleralias')
  84 + String selleralias;
  85 +
  86 + @JsonKey(name: 'seller_image')
  87 + String sellerImage;
  88 +
  89 + @JsonKey(name: 'map_address')
  90 + String mapAddress;
  91 +
  92 + @JsonKey(name: 'is_call_tel')
  93 + String isCallTel;
  94 +
  95 + @JsonKey(name: 'daily')
  96 + String daily;
  97 +
  98 + @JsonKey(name: 'lat')
  99 + String lat;
  100 +
  101 + @JsonKey(name: 'long')
  102 + String long;
  103 +
  104 + @JsonKey(name: 'is_sms')
  105 + String isSms;
  106 +
  107 + @JsonKey(name: 'is_open_order')
  108 + String isOpenOrder;
  109 +
  110 + @JsonKey(name: 'is_open_wine')
  111 + String isOpenWine;
  112 +
  113 + Seller(
  114 + this.id,
  115 + this.sellername,
  116 + this.selleralias,
  117 + this.sellerImage,
  118 + this.mapAddress,
  119 + this.isCallTel,
  120 + this.daily,
  121 + this.lat,
  122 + this.long,
  123 + this.isSms,
  124 + this.isOpenOrder,
  125 + this.isOpenWine,
  126 + );
  127 +
  128 + factory Seller.fromJson(Map<String, dynamic> srcJson) =>
  129 + _$SellerFromJson(srcJson);
  130 +
  131 + Map<String, dynamic> toJson() => _$SellerToJson(this);
  132 +}
  133 +
  134 +@JsonSerializable()
  135 +class Manager extends Object {
  136 + @JsonKey(name: 'role_name')
  137 + String roleName;
  138 +
  139 + @JsonKey(name: 'id')
  140 + dynamic id;
  141 +
  142 + @JsonKey(name: 'sellerid')
  143 + dynamic sellerid;
  144 +
  145 + @JsonKey(name: 'openid')
  146 + String openid;
  147 +
  148 + @JsonKey(name: 'receipt_code')
  149 + String receiptCode;
  150 +
  151 + @JsonKey(name: 'user_name')
  152 + String userName;
  153 +
  154 + @JsonKey(name: 'cdate')
  155 + String cdate;
  156 +
  157 + @JsonKey(name: 'status')
  158 + dynamic status;
  159 +
  160 + @JsonKey(name: 'is_first')
  161 + dynamic isFirst;
  162 +
  163 + @JsonKey(name: 'disting')
  164 + dynamic disting;
  165 +
  166 + @JsonKey(name: 'code')
  167 + dynamic code;
  168 +
  169 + @JsonKey(name: 'uid')
  170 + dynamic uid;
  171 +
  172 + @JsonKey(name: 'nick_name')
  173 + String nickName;
  174 +
  175 + Manager(
  176 + this.roleName,
  177 + this.id,
  178 + this.sellerid,
  179 + this.openid,
  180 + this.receiptCode,
  181 + this.userName,
  182 + this.cdate,
  183 + this.status,
  184 + this.isFirst,
  185 + this.disting,
  186 + this.code,
  187 + this.uid,
  188 + this.nickName,
  189 + );
  190 +
  191 + factory Manager.fromJson(Map<String, dynamic> srcJson) =>
  192 + _$ManagerFromJson(srcJson);
  193 +
  194 + Map<String, dynamic> toJson() => _$ManagerToJson(this);
  195 +}
  196 +
  197 +@JsonSerializable()
  198 +class SellerUser extends Object {
  199 + SellerUser();
  200 +
  201 + factory SellerUser.fromJson(Map<String, dynamic> srcJson) =>
  202 + _$SellerUserFromJson(srcJson);
  203 +
  204 + Map<String, dynamic> toJson() => _$SellerUserToJson(this);
  205 +}
  206 +
  207 +@JsonSerializable()
  208 +class Daily extends Object {
  209 + @JsonKey(name: 'morning')
  210 + String morning;
  211 +
  212 + @JsonKey(name: 'noon')
  213 + String noon;
  214 +
  215 + @JsonKey(name: 'night')
  216 + String night;
  217 +
  218 + Daily(
  219 + this.morning,
  220 + this.noon,
  221 + this.night,
  222 + );
  223 +
  224 + factory Daily.fromJson(Map<String, dynamic> srcJson) =>
  225 + _$DailyFromJson(srcJson);
  226 +
  227 + Map<String, dynamic> toJson() => _$DailyToJson(this);
  228 +
  229 + @override
  230 + String toString() {
  231 + return 'Daily{morning: $morning, noon: $noon, night: $night}';
  232 + }
  233 +
  234 +
  235 +}
  236 +
  237 +@JsonSerializable()
  238 +class Setting extends Object {
  239 + @JsonKey(name: 'template_code')
  240 + String templateCode;
  241 +
  242 + Setting(
  243 + this.templateCode,
  244 + );
  245 +
  246 + factory Setting.fromJson(Map<String, dynamic> srcJson) =>
  247 + _$SettingFromJson(srcJson);
  248 +
  249 + Map<String, dynamic> toJson() => _$SettingToJson(this);
  250 +}
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'seller_info.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +SellerInfoModel _$SellerInfoModelFromJson(Map<String, dynamic> json) {
  10 + return SellerInfoModel(
  11 + json['ret'] as int,
  12 + json['data'] == null
  13 + ? null
  14 + : SunSellerInfoModel.fromJson(json['data'] as Map<String, dynamic>),
  15 + json['msg'] as String);
  16 +}
  17 +
  18 +Map<String, dynamic> _$SellerInfoModelToJson(SellerInfoModel instance) =>
  19 + <String, dynamic>{
  20 + 'ret': instance.ret,
  21 + 'data': instance.data,
  22 + 'msg': instance.msg
  23 + };
  24 +
  25 +SunSellerInfoModel _$SunSellerInfoModelFromJson(Map<String, dynamic> json) {
  26 + return SunSellerInfoModel(
  27 + json['seller'] == null
  28 + ? null
  29 + : Seller.fromJson(json['seller'] as Map<String, dynamic>),
  30 + (json['manager'] as List)
  31 + ?.map((e) =>
  32 + e == null ? null : Manager.fromJson(e as Map<String, dynamic>))
  33 + ?.toList(),
  34 + json['seller_user'] == null
  35 + ? null
  36 + : SellerUser.fromJson(json['seller_user'] as Map<String, dynamic>),
  37 + json['daily'] == null
  38 + ? null
  39 + : Daily.fromJson(json['daily'] as Map<String, dynamic>),
  40 + json['config'] as List,
  41 + json['setting'] == null
  42 + ? null
  43 + : Setting.fromJson(json['setting'] as Map<String, dynamic>),
  44 + json['scatter'] as int,
  45 + json['room'] as int,
  46 + json['cassette'] as int);
  47 +}
  48 +
  49 +Map<String, dynamic> _$SunSellerInfoModelToJson(SunSellerInfoModel instance) =>
  50 + <String, dynamic>{
  51 + 'seller': instance.seller,
  52 + 'manager': instance.manager,
  53 + 'seller_user': instance.sellerUser,
  54 + 'daily': instance.daily,
  55 + 'config': instance.config,
  56 + 'setting': instance.setting,
  57 + 'scatter': instance.scatter,
  58 + 'room': instance.room,
  59 + 'cassette': instance.cassette
  60 + };
  61 +
  62 +Seller _$SellerFromJson(Map<String, dynamic> json) {
  63 + return Seller(
  64 + json['id'] as String,
  65 + json['sellername'] as String,
  66 + json['selleralias'] as String,
  67 + json['seller_image'] as String,
  68 + json['map_address'] as String,
  69 + json['is_call_tel'] as String,
  70 + json['daily'] as String,
  71 + json['lat'] as String,
  72 + json['long'] as String,
  73 + json['is_sms'] as String,
  74 + json['is_open_order'] as String,
  75 + json['is_open_wine'] as String);
  76 +}
  77 +
  78 +Map<String, dynamic> _$SellerToJson(Seller instance) => <String, dynamic>{
  79 + 'id': instance.id,
  80 + 'sellername': instance.sellername,
  81 + 'selleralias': instance.selleralias,
  82 + 'seller_image': instance.sellerImage,
  83 + 'map_address': instance.mapAddress,
  84 + 'is_call_tel': instance.isCallTel,
  85 + 'daily': instance.daily,
  86 + 'lat': instance.lat,
  87 + 'long': instance.long,
  88 + 'is_sms': instance.isSms,
  89 + 'is_open_order': instance.isOpenOrder,
  90 + 'is_open_wine': instance.isOpenWine
  91 + };
  92 +
  93 +Manager _$ManagerFromJson(Map<String, dynamic> json) {
  94 + return Manager(
  95 + json['role_name'] as String,
  96 + json['id'],
  97 + json['sellerid'],
  98 + json['openid'] as String,
  99 + json['receipt_code'] as String,
  100 + json['user_name'] as String,
  101 + json['cdate'] as String,
  102 + json['status'],
  103 + json['is_first'],
  104 + json['disting'],
  105 + json['code'],
  106 + json['uid'],
  107 + json['nick_name'] as String);
  108 +}
  109 +
  110 +Map<String, dynamic> _$ManagerToJson(Manager instance) => <String, dynamic>{
  111 + 'role_name': instance.roleName,
  112 + 'id': instance.id,
  113 + 'sellerid': instance.sellerid,
  114 + 'openid': instance.openid,
  115 + 'receipt_code': instance.receiptCode,
  116 + 'user_name': instance.userName,
  117 + 'cdate': instance.cdate,
  118 + 'status': instance.status,
  119 + 'is_first': instance.isFirst,
  120 + 'disting': instance.disting,
  121 + 'code': instance.code,
  122 + 'uid': instance.uid,
  123 + 'nick_name': instance.nickName
  124 + };
  125 +
  126 +SellerUser _$SellerUserFromJson(Map<String, dynamic> json) {
  127 + return SellerUser();
  128 +}
  129 +
  130 +Map<String, dynamic> _$SellerUserToJson(SellerUser instance) =>
  131 + <String, dynamic>{};
  132 +
  133 +Daily _$DailyFromJson(Map<String, dynamic> json) {
  134 + return Daily(json['morning'] as String, json['noon'] as String,
  135 + json['night'] as String);
  136 +}
  137 +
  138 +Map<String, dynamic> _$DailyToJson(Daily instance) => <String, dynamic>{
  139 + 'morning': instance.morning,
  140 + 'noon': instance.noon,
  141 + 'night': instance.night
  142 + };
  143 +
  144 +Setting _$SettingFromJson(Map<String, dynamic> json) {
  145 + return Setting(json['template_code'] as String);
  146 +}
  147 +
  148 +Map<String, dynamic> _$SettingToJson(Setting instance) =>
  149 + <String, dynamic>{'template_code': instance.templateCode};
  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'sms_info.g.dart';
  4 +
  5 +@JsonSerializable()
  6 +class SmsInfo extends Object {
  7 + @JsonKey(name: 'ret')
  8 + int ret;
  9 +
  10 + @JsonKey(name: 'data')
  11 + SmsInfoData data;
  12 +
  13 + @JsonKey(name: 'msg')
  14 + String msg;
  15 +
  16 + SmsInfo(
  17 + this.ret,
  18 + this.data,
  19 + this.msg,
  20 + );
  21 +
  22 + factory SmsInfo.fromJson(Map<String, dynamic> srcJson) =>
  23 + _$sms_infoFromJson(srcJson);
  24 +
  25 + Map<String, dynamic> toJson() => _$sms_infoToJson(this);
  26 +}
  27 +
  28 +@JsonSerializable()
  29 +class SmsInfoData extends Object {
  30 + @JsonKey(name: 'last_num')
  31 + String lastNum;
  32 +
  33 + @JsonKey(name: 'meals')
  34 + List<Meals> meals;
  35 +
  36 + SmsInfoData(
  37 + this.lastNum,
  38 + this.meals,
  39 + );
  40 +
  41 + factory SmsInfoData.fromJson(Map<String, dynamic> srcJson) =>
  42 + _$DataFromJson(srcJson);
  43 +
  44 + Map<String, dynamic> toJson() => _$DataToJson(this);
  45 +}
  46 +
  47 +@JsonSerializable()
  48 +class Meals extends Object {
  49 + @JsonKey(name: 'id')
  50 + String id;
  51 +
  52 + @JsonKey(name: 'package_name')
  53 + String packageName;
  54 +
  55 + @JsonKey(name: 'total')
  56 + String total;
  57 +
  58 + @JsonKey(name: 'price_ave')
  59 + String priceAve;
  60 +
  61 + @JsonKey(name: 'price_old')
  62 + String priceOld;
  63 +
  64 + @JsonKey(name: 'price')
  65 + String price;
  66 +
  67 + @JsonKey(name: 'discount')
  68 + String discount;
  69 +
  70 + Meals(
  71 + this.id,
  72 + this.packageName,
  73 + this.total,
  74 + this.priceAve,
  75 + this.priceOld,
  76 + this.price,
  77 + this.discount,
  78 + );
  79 +
  80 + factory Meals.fromJson(Map<String, dynamic> srcJson) =>
  81 + _$MealsFromJson(srcJson);
  82 +
  83 + Map<String, dynamic> toJson() => _$MealsToJson(this);
  84 +}
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'sms_info.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +SmsInfo _$sms_infoFromJson(Map<String, dynamic> json) {
  10 + return SmsInfo(
  11 + json['ret'] as int,
  12 + json['data'] == null
  13 + ? null
  14 + : SmsInfoData.fromJson(json['data'] as Map<String, dynamic>),
  15 + json['msg'] as String);
  16 +}
  17 +
  18 +Map<String, dynamic> _$sms_infoToJson(SmsInfo instance) => <String, dynamic>{
  19 + 'ret': instance.ret,
  20 + 'data': instance.data,
  21 + 'msg': instance.msg
  22 + };
  23 +
  24 +SmsInfoData _$DataFromJson(Map<String, dynamic> json) {
  25 + return SmsInfoData(
  26 + json['last_num'] as String,
  27 + (json['meals'] as List)
  28 + ?.map((e) =>
  29 + e == null ? null : Meals.fromJson(e as Map<String, dynamic>))
  30 + ?.toList());
  31 +}
  32 +
  33 +Map<String, dynamic> _$DataToJson(SmsInfoData instance) =>
  34 + <String, dynamic>{'last_num': instance.lastNum, 'meals': instance.meals};
  35 +
  36 +Meals _$MealsFromJson(Map<String, dynamic> json) {
  37 + return Meals(
  38 + json['id'] as String,
  39 + json['package_name'] as String,
  40 + json['total'] as String,
  41 + json['price_ave'] as String,
  42 + json['price_old'] as String,
  43 + json['price'] as String,
  44 + json['discount'] as String);
  45 +}
  46 +
  47 +Map<String, dynamic> _$MealsToJson(Meals instance) => <String, dynamic>{
  48 + 'id': instance.id,
  49 + 'package_name': instance.packageName,
  50 + 'total': instance.total,
  51 + 'price_ave': instance.priceAve,
  52 + 'price_old': instance.priceOld,
  53 + 'price': instance.price,
  54 + 'discount': instance.discount
  55 + };
@@ -4,84 +4,92 @@ part 'table.g.dart'; @@ -4,84 +4,92 @@ part 'table.g.dart';
4 4
5 @JsonSerializable() 5 @JsonSerializable()
6 class Table { 6 class Table {
  7 + Table();
7 8
8 - Table(); 9 + String id; //主键id
  10 + String rid; //关联区域id
  11 + String tid; //桌位类型 1散座 2包间 3卡座
  12 + String name; //桌位名称
  13 + String table_pnum; //桌位最少可做人数
  14 + String most_pnum; //桌位最多可做人数
  15 + String order_o; //桌位排序编号
  16 + String status; //桌位状态 0未使用 1使用中 2已删除
  17 + String tablestatus; //桌位状态 0未使用 1使用中 2已删除
  18 + String enable; //0禁用 1启用
  19 + String spell; //1拼桌
  20 + String rname; //关联区域名称
  21 + String max; //最多可做人数
  22 + String low; //最低消费
  23 + String sign; //标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
  24 + String reserver; //订餐人
  25 + String notebookId; //桌位对应的预订id
  26 + bool selected; //是否选中
9 27
10 - String id;//主键id  
11 - String rid;//关联区域id  
12 - String tid;//桌位类型 1散座 2包间 3卡座  
13 - String name;//桌位名称  
14 - String table_pnum;//桌位最少可做人数  
15 - String most_pnum;//桌位最多可做人数  
16 - String order_o;//桌位排序编号  
17 - String status;//桌位状态 0未使用 1使用中 2已删除  
18 - String tablestatus;//桌位状态 0未使用 1使用中 2已删除  
19 - String enable;//0禁用 1启用  
20 - String spell;//1拼桌  
21 - String rname;//关联区域名称  
22 - String max;//最多可做人数  
23 - String low;//最低消费  
24 - String sign;//标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单  
25 - String reserver;//订餐人  
26 - String notebookId;//桌位对应的预订id  
27 - bool selected;//是否选中  
28 -  
29 - //获取桌位类型  
30 - String get tidStr{  
31 - switch(tid){  
32 - case "1":  
33 - return "散座";  
34 - case "2":  
35 - return "包间";  
36 - case "3":  
37 - return "卡座";  
38 - } 28 + //获取桌位类型
  29 + String get tidStr {
  30 + switch (tid) {
  31 + case "1":
  32 + return "散座";
  33 + case "2":
  34 + return "包间";
  35 + case "3":
  36 + return "卡座";
39 } 37 }
  38 + }
40 39
41 - //获取桌位可坐人数  
42 - String get tableNum{  
43 - if(max!=null){  
44 - return "最多可坐$max人";  
45 - }else if(table_pnum==null){  
46 - return "";  
47 - }else{  
48 - if(table_pnum==most_pnum){  
49 - return "$table_pnum人";  
50 - }else{  
51 - return "$table_pnum-$most_pnum人";  
52 - }  
53 - } 40 + String get maxText {
  41 + if (max == null || max == "0" || max == "null") {
  42 + return "";
  43 + } else {
  44 + return "最多可坐" + max + "人";
54 } 45 }
  46 + }
55 47
56 - //获取最低消费  
57 - String get lowStr{  
58 - return low==null?"":"最低消费$low元"; 48 + //获取桌位可坐人数
  49 + String get tableNum {
  50 + if (table_pnum == null || table_pnum.isEmpty || table_pnum == "0") {
  51 + return "";
  52 + } else if (most_pnum != null &&
  53 + most_pnum.isNotEmpty &&
  54 + most_pnum != "0" &&
  55 + most_pnum != "null") {
  56 + if (table_pnum == most_pnum) {
  57 + return "$table_pnum人";
  58 + } else {
  59 + return "$table_pnum-$most_pnum人";
  60 + }
  61 + } else {
  62 + return "$table_pnum人";
59 } 63 }
  64 + }
  65 +
  66 + //获取最低消费
  67 + String get lowStr {
  68 + return (low == null || low.isEmpty || low == "0") ? "" : "最低消费\n$low元";
  69 + }
60 70
61 - String get signStr{  
62 - if(enable=="0")return "已停用";  
63 - if(sign!=null){  
64 - switch(sign){  
65 - case "1"://已预订  
66 - case "5"://已安排包间  
67 - return "已预订";  
68 - case "2"://用餐中  
69 - return "用餐中";  
70 - default:  
71 - return "";  
72 - }  
73 - }  
74 - return ""; 71 + String get signStr {
  72 + if (sign != null&&sign.isNotEmpty) {
  73 + switch (sign) {
  74 + case "1": //已预订
  75 + case "5": //已安排包间
  76 + return "已预订";
  77 + case "2": //用餐中
  78 + return "用餐中";
  79 + default:
  80 + return "";
  81 + }
75 } 82 }
  83 + if (enable == "0") return "已停用";
  84 + return "";
  85 + }
76 86
77 -  
78 - factory Table.fromJson(Map<String,dynamic> json) => _$TableFromJson(json);  
79 - Map<String, dynamic> toJson() => _$TableToJson(this); 87 + factory Table.fromJson(Map<String, dynamic> json) => _$TableFromJson(json);
  88 + Map<String, dynamic> toJson() => _$TableToJson(this);
80 89
81 - @override  
82 - String toString() {  
83 - return 'Table{id: $id, rid: $rid, tid: $tid, name: $name, table_pnum: $table_pnum, most_pnum: $most_pnum, order_o: $order_o, status: $status, tablestatus: $tablestatus, enable: $enable, spell: $spell, rname: $rname, max: $max, low: $low}';  
84 - } 90 + @override
  91 + String toString() {
  92 + return 'Table{id: $id, rid: $rid, tid: $tid, name: $name, table_pnum: $table_pnum, most_pnum: $most_pnum, order_o: $order_o, status: $status, tablestatus: $tablestatus, enable: $enable, spell: $spell, rname: $rname, max: $max, low: $low}';
  93 + }
85 94
86 } 95 }
87 -  
@@ -22,10 +22,10 @@ Table _$TableFromJson(Map<String, dynamic> json) { @@ -22,10 +22,10 @@ Table _$TableFromJson(Map<String, dynamic> json) {
22 ..rname = json['rname'] as String 22 ..rname = json['rname'] as String
23 ..max = json['max'] as String 23 ..max = json['max'] as String
24 ..low = json['low'] as String 24 ..low = json['low'] as String
25 - ..sign=json['sign'] as String  
26 - ..reserver=json['reserver'] as String  
27 - ..notebookId=json['notebookId'] as String  
28 - ..selected=json["selected"] as bool; 25 + ..sign = json['sign'] as String
  26 + ..reserver = json['reserver'] as String
  27 + ..notebookId = json['notebookId'] as String
  28 + ..selected = json['selected'] as bool;
29 } 29 }
30 30
31 Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{ 31 Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{
@@ -43,9 +43,8 @@ Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{ @@ -43,9 +43,8 @@ Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{
43 'rname': instance.rname, 43 'rname': instance.rname,
44 'max': instance.max, 44 'max': instance.max,
45 'low': instance.low, 45 'low': instance.low,
46 - 'sign':instance.sign,  
47 - 'reserver':instance.reserver,  
48 - 'notebookId':instance.notebookId,  
49 - 'selected':instance.selected 46 + 'sign': instance.sign,
  47 + 'reserver': instance.reserver,
  48 + 'notebookId': instance.notebookId,
  49 + 'selected': instance.selected
50 }; 50 };
51 -  
  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'table_list.g.dart';
  4 +
  5 +@JsonSerializable()
  6 +class TableListModel extends Object {
  7 + @JsonKey(name: 'ret')
  8 + int ret;
  9 +
  10 + @JsonKey(name: 'data')
  11 + List<TableListSunModel> data;
  12 +
  13 + @JsonKey(name: 'msg')
  14 + String msg;
  15 +
  16 + TableListModel(
  17 + this.ret,
  18 + this.data,
  19 + this.msg,
  20 + );
  21 +
  22 + factory TableListModel.fromJson(Map<String, dynamic> srcJson) =>
  23 + _$TableListModelFromJson(srcJson);
  24 +
  25 + Map<String, dynamic> toJson() => _$TableListModelToJson(this);
  26 +}
  27 +
  28 +@JsonSerializable()
  29 +class TableListSunModel extends Object {
  30 + @JsonKey(name: 'name')
  31 + String name;
  32 +
  33 + @JsonKey(name: 'list')
  34 + List<TableList> list;
  35 +
  36 + TableListSunModel(
  37 + this.name,
  38 + this.list,
  39 + );
  40 +
  41 + factory TableListSunModel.fromJson(Map<String, dynamic> srcJson) =>
  42 + _$TableListSunModelFromJson(srcJson);
  43 +
  44 + Map<String, dynamic> toJson() => _$TableListSunModelToJson(this);
  45 +}
  46 +
  47 +@JsonSerializable()
  48 +class TableList extends Object {
  49 + @JsonKey(name: 'id')
  50 + String id;
  51 +
  52 + @JsonKey(name: 'rid')
  53 + String rid;
  54 +
  55 + @JsonKey(name: 'sellerid')
  56 + String sellerid;
  57 +
  58 + @JsonKey(name: 'name')
  59 + String name;
  60 +
  61 + @JsonKey(name: 'qrcode')
  62 + String qrcode;
  63 +
  64 + @JsonKey(name: 'table_pnum')
  65 + String tablePnum;
  66 +
  67 + @JsonKey(name: 'most_pnum')
  68 + String mostPnum;
  69 +
  70 + @JsonKey(name: 'tid')
  71 + String tid;
  72 +
  73 + @JsonKey(name: 'hot')
  74 + String hot;
  75 +
  76 + @JsonKey(name: 'order_o')
  77 + String orderO;
  78 +
  79 + @JsonKey(name: 'status')
  80 + String status;
  81 +
  82 + @JsonKey(name: 'enable')
  83 + String enable;
  84 +
  85 + @JsonKey(name: 'spell')
  86 + String spell;
  87 +
  88 + @JsonKey(name: 'cdate')
  89 + String cdate;
  90 +
  91 + @JsonKey(name: 'rname')
  92 + String rname;
  93 +
  94 + @JsonKey(name: 'region_name')
  95 + String regionName;
  96 +
  97 + String table_pnum; //桌位最少可做人数
  98 + String most_pnum; //桌位最多可做人数
  99 + String low; //最低消费
  100 +
  101 + //获取桌位类型
  102 + String get tidStr {
  103 + switch (tid) {
  104 + case "1":
  105 + return "散座";
  106 + case "2":
  107 + return "包间";
  108 + case "3":
  109 + return "卡座";
  110 + }
  111 + }
  112 +
  113 + String reserver; //订餐人
  114 + // String notebookId; //桌位对应的预订id
  115 + bool selected = false; //是否选中
  116 + // String max; //最多可做人数
  117 + String sign; //标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
  118 +
  119 + // String get maxText {
  120 + // if (max == null || max == "0" || max == "null") {
  121 + // return "";
  122 + // } else {
  123 + // return "最多可坐" + max + "人";
  124 + // }
  125 + // }
  126 +
  127 + //获取桌位可坐人数
  128 + String get tableNum {
  129 + if (table_pnum == null || table_pnum.isEmpty || table_pnum == "0") {
  130 + return "";
  131 + } else if (most_pnum != null &&
  132 + most_pnum.isNotEmpty &&
  133 + most_pnum != "0" &&
  134 + most_pnum != "null") {
  135 + if (table_pnum == most_pnum) {
  136 + return "$table_pnum人";
  137 + } else {
  138 + return "$table_pnum-$most_pnum人";
  139 + }
  140 + } else {
  141 + return "$table_pnum人";
  142 + }
  143 + }
  144 +
  145 + //获取最低消费
  146 + String get lowStr {
  147 + return (low == null || low.isEmpty || low == "0") ? "" : "最低消费\n$low元";
  148 + }
  149 +
  150 + String get signStr {
  151 + if (enable == "0") return "已停用";
  152 + if (sign != null) {
  153 + switch (sign) {
  154 + case "1": //已预订
  155 + case "5": //已安排包间
  156 + return "已预订";
  157 + case "2": //用餐中
  158 + return "用餐中";
  159 + default:
  160 + return "";
  161 + }
  162 + }
  163 + return "";
  164 + }
  165 +
  166 + TableList(
  167 + this.id,
  168 + this.rid,
  169 + this.sellerid,
  170 + this.name,
  171 + this.qrcode,
  172 + this.tablePnum,
  173 + this.mostPnum,
  174 + this.tid,
  175 + this.hot,
  176 + this.orderO,
  177 + this.status,
  178 + this.enable,
  179 + this.spell,
  180 + this.cdate,
  181 + this.rname,this.regionName);
  182 +
  183 + factory TableList.fromJson(Map<String, dynamic> srcJson) =>
  184 + _$TableListFromJson(srcJson);
  185 +
  186 + Map<String, dynamic> toJson() => _$TableListToJson(this);
  187 +}
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'table_list.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +TableListModel _$TableListModelFromJson(Map<String, dynamic> json) {
  10 + return TableListModel(
  11 + json['ret'] as int,
  12 + (json['data'] as List)
  13 + ?.map((e) => e == null
  14 + ? null
  15 + : TableListSunModel.fromJson(e as Map<String, dynamic>))
  16 + ?.toList(),
  17 + json['msg'] as String);
  18 +}
  19 +
  20 +Map<String, dynamic> _$TableListModelToJson(TableListModel instance) =>
  21 + <String, dynamic>{
  22 + 'ret': instance.ret,
  23 + 'data': instance.data,
  24 + 'msg': instance.msg
  25 + };
  26 +
  27 +TableListSunModel _$TableListSunModelFromJson(Map<String, dynamic> json) {
  28 + return TableListSunModel(
  29 + json['name'] as String,
  30 + (json['list'] as List)
  31 + ?.map((e) =>
  32 + e == null ? null : TableList.fromJson(e as Map<String, dynamic>))
  33 + ?.toList());
  34 +}
  35 +
  36 +Map<String, dynamic> _$TableListSunModelToJson(TableListSunModel instance) =>
  37 + <String, dynamic>{'name': instance.name, 'list': instance.list};
  38 +
  39 +TableList _$TableListFromJson(Map<String, dynamic> json) {
  40 + return TableList(
  41 + json['id'] as String,
  42 + json['rid'] as String,
  43 + json['sellerid'] as String,
  44 + json['name'] as String,
  45 + json['qrcode'] as String,
  46 + json['table_pnum'] as String,
  47 + json['most_pnum'] as String,
  48 + json['tid'] as String,
  49 + json['hot'] as String,
  50 + json['order_o'] as String,
  51 + json['status'] as String,
  52 + json['enable'] as String,
  53 + json['spell'] as String,
  54 + json['cdate'] as String,
  55 + json['rname'] as String,
  56 + json['region_name'] as String);
  57 +}
  58 +
  59 +Map<String, dynamic> _$TableListToJson(TableList instance) => <String, dynamic>{
  60 + 'id': instance.id,
  61 + 'rid': instance.rid,
  62 + 'sellerid': instance.sellerid,
  63 + 'name': instance.name,
  64 + 'qrcode': instance.qrcode,
  65 + 'table_pnum': instance.tablePnum,
  66 + 'most_pnum': instance.mostPnum,
  67 + 'tid': instance.tid,
  68 + 'hot': instance.hot,
  69 + 'order_o': instance.orderO,
  70 + 'status': instance.status,
  71 + 'enable': instance.enable,
  72 + 'spell': instance.spell,
  73 + 'cdate': instance.cdate,
  74 + 'rname': instance.rname,
  75 + 'region_name': instance.regionName
  76 + };
  1 +/**
  2 + * 更新版本
  3 + */
  4 +class Version{
  5 + String name;//更新版本号
  6 + String version;//构建版本号
  7 + String file_url;//安装包下载地址
  8 + String content;//更新内容
  9 +
  10 + Version();
  11 +
  12 + factory Version.fromJson(Map<String,dynamic> json)=>Version()..name=json["name"]..version=json["version"]..file_url=json["file_url"]..content=json["content"];
  13 +
  14 + Map<String,dynamic> toJson()=><String,dynamic>{name:"name","version":version,"file_url":file_url,"content":content};
  15 +}
@@ -6,8 +6,9 @@ class BaseResp<T> { @@ -6,8 +6,9 @@ class BaseResp<T> {
6 int code; 6 int code;
7 String msg; 7 String msg;
8 T data; 8 T data;
  9 + Map responseData;
9 10
10 - BaseResp(this.status, this.code, this.msg, this.data); 11 + BaseResp(this.status, this.code, this.msg, this.data,this.responseData);
11 12
12 @override 13 @override
13 String toString() { 14 String toString() {
@@ -3,11 +3,12 @@ import 'dart:io'; @@ -3,11 +3,12 @@ import 'dart:io';
3 3
4 import 'package:dio/dio.dart'; 4 import 'package:dio/dio.dart';
5 import 'package:flutter/material.dart'; 5 import 'package:flutter/material.dart';
  6 +import 'package:one_key/constant/error.dart';
  7 +import 'package:one_key/utils/utils.dart';
6 import 'package:one_key/widgets/loading.dart'; 8 import 'package:one_key/widgets/loading.dart';
7 9
8 import 'base_resp.dart'; 10 import 'base_resp.dart';
9 11
10 -  
11 /** 12 /**
12 * @Author: thl 13 * @Author: thl
13 * @GitHub: https://github.com/Sky24n 14 * @GitHub: https://github.com/Sky24n
@@ -165,58 +166,83 @@ class DioUtil { @@ -165,58 +166,83 @@ class DioUtil {
165 /// [data] The request data 166 /// [data] The request data
166 /// [options] The request options. 167 /// [options] The request options.
167 /// <BaseResp<T> 返回 status code msg data . 168 /// <BaseResp<T> 返回 status code msg data .
168 - Future<BaseResp<T>> request<T>(BuildContext context,String method, String path,  
169 - {data, Options options, CancelToken cancelToken,bool showLoading=true}) async {  
170 - if(showLoading)Loading.showLoading(context);  
171 - Response response = await _dio.request(path,  
172 - data: data,  
173 - options: _checkOptions(method, options),  
174 - cancelToken: cancelToken);  
175 - _printHttpLog(response);  
176 - String _status;  
177 - int _code;  
178 - String _msg;  
179 - T _data;  
180 - if (response.statusCode == HttpStatus.ok ||  
181 - response.statusCode == HttpStatus.created) {  
182 - try {  
183 - if (response.data is Map) {  
184 - _status = (response.data[_statusKey] is int)  
185 - ? response.data[_statusKey].toString()  
186 - : response.data[_statusKey];  
187 - _code = (response.data[_codeKey] is String)  
188 - ? int.tryParse(response.data[_codeKey])  
189 - : response.data[_codeKey];  
190 - _msg = response.data[_msgKey];  
191 - _data = response.data[_dataKey];  
192 - } else {  
193 - Map<String, dynamic> _dataMap = _decodeData(response);  
194 - _status = (_dataMap[_statusKey] is int)  
195 - ? _dataMap[_statusKey].toString()  
196 - : _dataMap[_statusKey];  
197 - _code = (_dataMap[_codeKey] is String)  
198 - ? int.tryParse(_dataMap[_codeKey])  
199 - : _dataMap[_codeKey];  
200 - _msg = _dataMap[_msgKey];  
201 - _data = _dataMap[_dataKey]; 169 + Future<BaseResp<T>> request<T>(
  170 + BuildContext context, String method, String path,
  171 + {data,
  172 + Options options,
  173 + CancelToken cancelToken,
  174 + bool showLoading = true}) async {
  175 + bool connectivity = await Utils.checkConnectiviy();
  176 + if (!connectivity) {
  177 +// Utils.showToast("网络错误,请稍后重试");
  178 + throw MyError(type: 1);
  179 + }
  180 + if (showLoading) Loading.showLoading(context);
  181 + try {
  182 + print('--------' + path + '---------');
  183 + Response response = await _dio.request(path,
  184 + data: data,
  185 + options: _checkOptions(method, options),
  186 + cancelToken: cancelToken);
  187 + _printHttpLog(response);
  188 + String _status;
  189 + int _code;
  190 + String _msg;
  191 + T _data;
  192 + Map _responseData;
  193 + if (response.statusCode == HttpStatus.ok ||
  194 + response.statusCode == HttpStatus.created) {
  195 + try {
  196 + if (response.data is Map) {
  197 + _status = (response.data[_statusKey] is int)
  198 + ? response.data[_statusKey].toString()
  199 + : response.data[_statusKey];
  200 + _code = (response.data[_codeKey] is String)
  201 + ? int.tryParse(response.data[_codeKey])
  202 + : response.data[_codeKey];
  203 + _msg = response.data[_msgKey];
  204 + _data = response.data[_dataKey];
  205 + _responseData = response.data;
  206 + } else {
  207 + Map<String, dynamic> _dataMap = _decodeData(response);
  208 + _status = (_dataMap[_statusKey] is int)
  209 + ? _dataMap[_statusKey].toString()
  210 + : _dataMap[_statusKey];
  211 + _code = (_dataMap[_codeKey] is String)
  212 + ? int.tryParse(_dataMap[_codeKey])
  213 + : _dataMap[_codeKey];
  214 + _msg = _dataMap[_msgKey];
  215 + _data = _dataMap[_dataKey];
  216 + _responseData = _dataMap;
  217 + }
  218 + Loading.hideLoading(context);
  219 + return new BaseResp(_status, _code, _msg, _data, _responseData);
  220 + } catch (e) {
  221 + Loading.hideLoading(context);
  222 + return new Future.error(new DioError(
  223 + response: response,
  224 + message: "data parsing exception...",
  225 + type: DioErrorType.RESPONSE,
  226 + ));
202 } 227 }
  228 + }
  229 + Loading.hideLoading(context);
  230 + return new Future.error(new DioError(
  231 + response: response,
  232 + message: "statusCode: $response.statusCode, service error",
  233 + type: DioErrorType.RESPONSE,
  234 + ));
  235 + } on DioError catch (error) {
  236 + if (showLoading) {
203 Loading.hideLoading(context); 237 Loading.hideLoading(context);
204 - return new BaseResp(_status, _code, _msg, _data);  
205 - } catch (e) {  
206 - Loading.hideLoading(context);  
207 - return new Future.error(new DioError(  
208 - response: response,  
209 - message: "data parsing exception...",  
210 - type: DioErrorType.RESPONSE,  
211 - )); 238 + }
  239 + if (error is DioError && error.type == DioErrorType.CONNECT_TIMEOUT) {
  240 +// Utils.showToast("网络链接超时,请稍后重试");
  241 + }
  242 + if (error.type != DioErrorType.CANCEL) {
  243 + throw MyError(type: 2);
212 } 244 }
213 } 245 }
214 - Loading.hideLoading(context);  
215 - return new Future.error(new DioError(  
216 - response: response,  
217 - message: "statusCode: $response.statusCode, service error",  
218 - type: DioErrorType.RESPONSE,  
219 - ));  
220 } 246 }
221 247
222 /// Make http request with options. 248 /// Make http request with options.
@@ -387,8 +413,8 @@ class DioUtil { @@ -387,8 +413,8 @@ class DioUtil {
387 Options options = new Options(); 413 Options options = new Options();
388 options.contentType = 414 options.contentType =
389 ContentType.parse("application/x-www-form-urlencoded"); 415 ContentType.parse("application/x-www-form-urlencoded");
390 - options.connectTimeout = 1000 * 30;  
391 - options.receiveTimeout = 1000 * 30; 416 + options.connectTimeout = 1000 * 10; //默认10s
  417 + options.receiveTimeout = 1000 * 10; //默认10s
392 return options; 418 return options;
393 } 419 }
394 } 420 }
1 -class HttpUrl{  
2 - static const String server_address = "https://xt04.colorcun.com/";//服务端请求地址  
3 - static const String app_user_login="?service=Android.User.AppUserLogin";//登录地址  
4 - static const String user_token_init="?service=Android.User.UserTokenInit";//初始化推送token  
5 - static const String sellerinfo="?service=Android.Reserve.SellerInfo";//获取商家信息  
6 - static const String login_out="?service=Android.User.AppLoginOut";//退出登录  
7 - static const String get_message_list="?service=Android.Reserve.GetMessageList";//获取消息列表  
8 - static const String get_reserve_list="?service=Android.Reserve.NewGetReserveList";//获取已预订列表  
9 - static const String reserve_count_day="?service=Android.Reserve.NewReservesCountDay";//获取一天订单统计数目  
10 - static const String reserve_detail="?service=Android.Reserve.Detail";//订单详情  
11 - static const String set_reserve_cusman="?service=Android.Reserve.SetReserveCusman";//设置客户经理  
12 - static const String table_list="?service=Android.Tables.GetTableListsBySellerId";//桌位列表  
13 - static const String set_reserve_status="?service=Android.Customer.SetReserveStatus";//设置订单状态  
14 - static const String set_message_status="?service=Android.Advance.SetMessageStatus";//设置消息状态  
15 - static const String get_sms_content="?service=App.SendSMS.GetSmsContent";//获取短信内容  
16 - static const String send_sms="?service=App.SendSMS.NewMessage";//发送短信  
17 -}  
  1 +class HttpUrl {
  2 + static const String server_address = "https://xt04.colorcun.com/"; //服务端请求地址
  3 + static const String app_user_login =
  4 + "?service=Android.User.AppUserLogin"; //登录地址
  5 + static const String user_token_init =
  6 + "?service=Android.User.UserTokenInit"; //初始化推送token
  7 + static const String sellerinfo =
  8 + "?service=Android.Reserve.SellerInfo"; //获取商家信息
  9 + static const String login_out = "?service=Android.User.AppLoginOut"; //退出登录
  10 + static const String get_message_list =
  11 + "?service=Android.Reserve.GetMessageList"; //获取消息列表
  12 + static const String get_reserve_list =
  13 + "?service=Android.Reserve.NewGetReserveList"; //获取已预订列表
  14 + static const String reserve_count_day =
  15 + "?service=Android.Reserve.NewReservesCountDay"; //获取一天订单统计数目
  16 + static const String reserve_detail = "?service=Android.Reserve.Detail"; //订单详情
  17 + static const String set_reserve_cusman =
  18 + "?service=Android.Reserve.SetReserveCusman"; //设置客户经理
  19 + static const String table_list =
  20 + "?service=Android.Tables.GetTableListsBySellerId"; //桌位列表
  21 + static const String set_reserve_status =
  22 + "?service=Android.Customer.SetReserveStatus"; //设置订单状态
  23 + static const String set_message_status =
  24 + "?service=Android.Advance.SetMessageStatus"; //设置消息状态
  25 + static const String get_sms_content =
  26 + "?service=App.SendSMS.GetSmsContent"; //获取短信内容
  27 + static const String send_sms = "?service=App.SendSMS.NewMessage"; //发送短信
  28 + static const String check_update =
  29 + "http://xt03.colorcun.com/admin/api/compareversion?flat=3";
  30 + static const String upload_contact =
  31 + "?service=App.Seller.SaveCallRecord"; //上传通讯录
  32 + static const String get_table_list =
  33 + "?service=Android.Reserve.NewGetTableList"; //根据商家ID 获取桌位信息列表: 1:散座 2:包间 默认:获取所有数据
  34 + static const String set_reserve_info =
  35 + "?service=Android.Reserve.SetReserveInfo"; //录入/更改内部预订
  36 + static const String set_customer_info =
  37 + "?service=Android.Customer.SetReserveInfo"; //更改在线预订
  38 + static const String set_switch_status =
  39 + "?service=App.Reserve.SetSwitchStatus"; //启用/停用桌位
  40 + static const String sms_info = "?service=App.SendSMS.SmsInfo"; //短信余量查询及套餐查询接口
  41 +}
@@ -2,6 +2,7 @@ import 'dart:convert'; @@ -2,6 +2,7 @@ import 'dart:convert';
2 2
3 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
4 import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 import 'package:flutter_screenutil/flutter_screenutil.dart';
  5 +import 'package:one_key/constant/state.dart';
5 import 'package:one_key/models/manager.dart'; 6 import 'package:one_key/models/manager.dart';
6 import 'package:one_key/models/notebook_detail.dart'; 7 import 'package:one_key/models/notebook_detail.dart';
7 import 'package:one_key/provider/notebook_detail_model.dart'; 8 import 'package:one_key/provider/notebook_detail_model.dart';
@@ -13,17 +14,24 @@ import 'package:one_key/utils/utils.dart'; @@ -13,17 +14,24 @@ import 'package:one_key/utils/utils.dart';
13 import 'package:one_key/widgets/MyDivider.dart'; 14 import 'package:one_key/widgets/MyDivider.dart';
14 import 'package:one_key/widgets/app_bar.dart'; 15 import 'package:one_key/widgets/app_bar.dart';
15 import 'package:one_key/widgets/common_button.dart'; 16 import 'package:one_key/widgets/common_button.dart';
  17 +import 'package:one_key/widgets/h_empty_view.dart';
  18 +import 'package:one_key/widgets/need_item.dart';
  19 +import 'package:one_key/widgets/page_exception.dart';
16 import 'package:one_key/widgets/row_multi_text.dart'; 20 import 'package:one_key/widgets/row_multi_text.dart';
17 import 'package:one_key/widgets/table_item.dart'; 21 import 'package:one_key/widgets/table_item.dart';
18 import 'package:one_key/models/table.dart' as t; 22 import 'package:one_key/models/table.dart' as t;
19 import 'package:one_key/widgets/v_empty_view.dart'; 23 import 'package:one_key/widgets/v_empty_view.dart';
20 import 'package:provider/provider.dart'; 24 import 'package:provider/provider.dart';
  25 +import 'package:one_key/utils/event_bus.dart';
21 26
22 -class HandleOnlinePage extends StatefulWidget { 27 +import '../../app.dart';
23 28
  29 +class HandleOnlinePage extends StatefulWidget {
24 final String rid; 30 final String rid;
25 final String mid; 31 final String mid;
26 - HandleOnlinePage(this.rid,this.mid); 32 + final bool fromNotify;
  33 +
  34 + HandleOnlinePage(this.rid, this.mid, {this.fromNotify = false});
27 35
28 @override 36 @override
29 State<StatefulWidget> createState() { 37 State<StatefulWidget> createState() {
@@ -32,282 +40,648 @@ class HandleOnlinePage extends StatefulWidget { @@ -32,282 +40,648 @@ class HandleOnlinePage extends StatefulWidget {
32 } 40 }
33 } 41 }
34 42
35 -  
36 class HandleOnlinePageState extends State<HandleOnlinePage> { 43 class HandleOnlinePageState extends State<HandleOnlinePage> {
37 -  
38 - NotebookDetailModel detailModel= NotebookDetailModel(); 44 + NotebookDetailModel detailModel;
39 45
40 NotebookDetail detailEntity; 46 NotebookDetail detailEntity;
41 47
42 - String cusmanText=""; 48 + String cusmanText = "";
  49 +
  50 + List<Manager> managers = []; //客户经理
  51 +
  52 + Manager manager = Manager();
  53 +
  54 + bool isCallTel = false;
43 55
44 - List<Manager> managers=[];//客户经理 56 + String formatPhone = ""; //格式客户号码
45 57
46 - Manager manager=Manager(); 58 + bool isRefused = false; //是否已拒绝
  59 + bool isPause = false; //是否暂停预订
  60 + StateSetter refuseDialogState; //决绝弹框setState
47 61
48 @override 62 @override
49 void initState() { 63 void initState() {
50 // TODO: implement initState 64 // TODO: implement initState
51 super.initState(); 65 super.initState();
52 - WidgetsBinding.instance.addPostFrameCallback((_) async {  
53 - detailEntity=await detailModel.getReserveDetail(context, {  
54 - "rid":widget.rid,  
55 - });  
56 - if(detailEntity.status!="0"){//已处理  
57 - setMessageStatus();  
58 - NavigatorUtil.goNotebookDetailPage(context, detailEntity.id,replace: true);  
59 - }else{  
60 - setState(() {//未处理  
61 - cusmanText=detailEntity.cusman.isEmpty?"请选择":detailEntity.cusman;  
62 - });  
63 - managers=await detailModel.getManagers(context); 66 + WidgetsBinding.instance.addPostFrameCallback((_) {
  67 + _getOrderListData();
  68 + });
  69 + }
  70 +
  71 + /// 获取当前预订订单详情
  72 + _getOrderListData() async {
  73 + detailEntity = await detailModel.getReserveDetail(context, {
  74 + "rid": widget.rid,
  75 + });
  76 + setState(() {
  77 + //未处理
  78 + cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
  79 + formatPhone = detailEntity.phone;
  80 + if (App.sp.getString("is_call_tel") != null &&
  81 + App.sp.getString("is_call_tel") == "1") {
  82 + isCallTel = true;
  83 + } else {
  84 + isCallTel = false;
  85 + if (detailEntity.phone.isNotEmpty &&
  86 + detailEntity.phone.length == 11 &&
  87 + (detailEntity.status == "0" || detailEntity.status == "6")) {
  88 + formatPhone = detailEntity.phone.substring(0, 3) +
  89 + "****" +
  90 + detailEntity.phone.substring(7);
  91 + }
64 } 92 }
65 }); 93 });
  94 + if (detailEntity.status != "0" && !isPause) {
  95 + //已处理
  96 + Future.delayed(Duration(milliseconds: 200), () {
  97 + NavigatorUtil.goNotebookDetailPage(context, detailEntity.id,
  98 + fromNotify: widget.fromNotify, replace: true);
  99 + });
  100 + setMessageStatus();
  101 + } else {
  102 + managers = await detailModel.getManagers(context);
  103 + }
66 } 104 }
67 105
68 //设置当前客户经理 106 //设置当前客户经理
69 - _setCurrManager(){  
70 - manager=managers.firstWhere((manager)=>manager.userName==cusmanText,orElse: ()=>Manager());  
71 - if(manager.id==null||manager.id.toString().isEmpty)return;  
72 - Map<String,String> params={  
73 - "rid":detailEntity.id,  
74 - "cusman_id":manager.id.toString(),  
75 - "cusman":manager.userName 107 + _setCurrManager() {
  108 + manager = managers.firstWhere((manager) => manager.userName == cusmanText,
  109 + orElse: () => Manager());
  110 + if (manager.id == null || manager.id.toString().isEmpty) return;
  111 + Map<String, String> params = {
  112 + "rid": detailEntity.id,
  113 + "cusman_id": manager.id.toString(),
  114 + "cusman": manager.userName
76 }; 115 };
77 detailModel.setReserveCusmnan(context, params); 116 detailModel.setReserveCusmnan(context, params);
78 } 117 }
79 118
80 //拒绝订单弹框 119 //拒绝订单弹框
81 - _showRefuseDialog(){  
82 - showDialog(context: context,builder: (context){  
83 - return AlertDialog(  
84 - title: Text("确定拒绝订单吗?\n拒绝后无法联系客户"),  
85 - titleTextStyle: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(26)),  
86 - content: Text("如果包间类型订满,请及时停用"),  
87 - contentTextStyle:TextStyle(color: MyColours.color_828282,fontSize: ScreenUtil().setSp(22)),  
88 - actions: <Widget>[  
89 - FlatButton(  
90 - child: Text("拒绝订单"),  
91 - onPressed: (){  
92 - Navigator.of(context).pop();  
93 - setReserveStatus("6");  
94 - }, 120 + _showRefuseDialog2() {
  121 + Widget dialogContent = StatefulBuilder(
  122 + builder: (context, setState) {
  123 + refuseDialogState = setState;
  124 + Container container = Container(
  125 + child: Stack(
  126 + alignment: AlignmentDirectional.topCenter,
  127 + children: [
  128 + Positioned(
  129 + right: 0,
  130 + top: ScreenUtil().setWidth(6),
  131 + child: GestureDetector(
  132 + child: Container(
  133 + padding: EdgeInsets.all(ScreenUtil().setWidth(21)),
  134 + child: Image.asset(
  135 + "assets/close.png",
  136 + width: ScreenUtil().setWidth(28),
  137 + height: ScreenUtil().setWidth(28),
  138 + ),
  139 + ),
  140 + onTap: () {
  141 + Navigator.of(context).pop();
  142 + },
  143 + ),
  144 + ),
  145 + Offstage(
  146 + offstage: isRefused,
  147 + child: Column(
  148 + mainAxisSize: MainAxisSize.min,
  149 + children: [
  150 + VEmptyView(40),
  151 + Text(
  152 + "拒绝订单",
  153 + style: TextStyle(
  154 + fontSize: ScreenUtil().setSp(32),
  155 + color: MyColours.color_353535,
  156 + fontWeight: FontWeight.bold),
  157 + ),
  158 + VEmptyView(60),
  159 + Text(
  160 + "确定要拒绝订单吗?一旦拒绝无法恢复。",
  161 + style: TextStyle(
  162 + fontSize: ScreenUtil().setSp(32),
  163 + color: MyColours.color_353535),
  164 + ),
  165 + VEmptyView(80),
  166 + GestureDetector(
  167 + onTap: () {
  168 + setReserveStatus("6", ac: "1");
  169 + },
  170 + child: Container(
  171 + width: ScreenUtil().setWidth(336),
  172 + height: ScreenUtil().setWidth(80),
  173 + alignment: Alignment.center,
  174 + color: MyColours.color_199095,
  175 + child: Text(
  176 + "拒绝并暂停预订",
  177 + style: TextStyle(
  178 + fontSize: ScreenUtil().setSp(34),
  179 + color: MyColours.color_ffffff),
  180 + ),
  181 + ),
  182 + ),
  183 + VEmptyView(20),
  184 + GestureDetector(
  185 + onTap: () {
  186 + Navigator.of(context).pop();
  187 + setReserveStatus("6");
  188 + },
  189 + child: Container(
  190 + width: ScreenUtil().setWidth(336),
  191 + height: ScreenUtil().setWidth(80),
  192 + alignment: Alignment.center,
  193 + decoration: BoxDecoration(
  194 + color: MyColours.color_ffffff,
  195 + border: Border.all(
  196 + color: MyColours.color_199095,
  197 + width: ScreenUtil().setWidth(2))),
  198 + child: Text(
  199 + "直接拒绝",
  200 + style: TextStyle(
  201 + fontSize: ScreenUtil().setSp(34),
  202 + color: MyColours.color_199095),
  203 + ),
  204 + ),
  205 + ),
  206 + VEmptyView(20),
  207 + GestureDetector(
  208 + onTap: () async {
  209 + Navigator.of(context).pop();
  210 + Map temp = await NavigatorUtil.goSelectTablePage(
  211 + context,
  212 + widget.rid,
  213 + int.parse(detailEntity.ddate) * 1000,
  214 + detailEntity.ddate_solt);
  215 + if (temp != null && temp['tid'] != null) {
  216 + setReserveStatus("5", tid: temp['tid']);
  217 + }
  218 + },
  219 + child: Container(
  220 + width: ScreenUtil().setWidth(336),
  221 + height: ScreenUtil().setWidth(80),
  222 + alignment: Alignment.center,
  223 + color: MyColours.color_ffffff,
  224 + child: Text(
  225 + "去安排包间",
  226 + style: TextStyle(
  227 + fontSize: ScreenUtil().setSp(34),
  228 + color: MyColours.color_199095),
  229 + ),
  230 + ),
  231 + ),
  232 + VEmptyView(44),
  233 + ],
  234 + ),
  235 + ),
  236 + Offstage(
  237 + offstage: !isRefused,
  238 + child: Column(
  239 + mainAxisSize: MainAxisSize.min,
  240 + children: [
  241 + VEmptyView(98),
  242 + Row(
  243 + mainAxisSize: MainAxisSize.min,
  244 + crossAxisAlignment: CrossAxisAlignment.center,
  245 + children: [
  246 + Image.asset(
  247 + "assets/icon_refuse_book.png",
  248 + width: ScreenUtil().setWidth(56),
  249 + height: ScreenUtil().setWidth(56),
  250 + ),
  251 + HEmptyView(10),
  252 + Text(
  253 + "订单已拒绝",
  254 + style: TextStyle(
  255 + fontSize: ScreenUtil().setSp(34),
  256 + color: MyColours.color_353535),
  257 + )
  258 + ],
  259 + ),
  260 + Offstage(
  261 + offstage: !isPause,
  262 + child: Column(
  263 + mainAxisSize: MainAxisSize.min,
  264 + children: [
  265 + VEmptyView(20),
  266 + Text(
  267 + "并已将${detailEntity.ddateMd}的${detailEntity.demandStr}置满",
  268 + style: TextStyle(
  269 + fontSize: ScreenUtil().setSp(34),
  270 + color: MyColours.color_353535),
  271 + ),
  272 + ],
  273 + ),
  274 + ),
  275 + VEmptyView(120),
  276 + Text(
  277 + "如果有包间空出来或其他包间也满了,你可以:",
  278 + style: TextStyle(
  279 + fontSize: ScreenUtil().setSp(26),
  280 + color: MyColours.color_353535),
  281 + ),
  282 + VEmptyView(20),
  283 + GestureDetector(
  284 + onTap: () {
  285 + Utils.goMiniProgramZm(context, "roomtype/roomtype");
  286 + },
  287 + child: Container(
  288 + width: ScreenUtil().setWidth(336),
  289 + height: ScreenUtil().setWidth(80),
  290 + alignment: Alignment.center,
  291 + color: MyColours.color_199095,
  292 + child: Text(
  293 + "去管理包间",
  294 + style: TextStyle(
  295 + fontSize: ScreenUtil().setSp(34),
  296 + color: MyColours.color_ffffff),
  297 + ),
  298 + ),
  299 + ),
  300 + VEmptyView(60)
  301 + ],
  302 + ),
  303 + )
  304 + ],
95 ), 305 ),
96 - FlatButton(  
97 - child: Text("去安排"),  
98 - onPressed: () async {  
99 - Navigator.of(context).pop();  
100 - String tid=await NavigatorUtil.goSelectTablePage(context,widget.rid,DateTime.fromMillisecondsSinceEpoch(int.parse(detailEntity.ddate)*1000),detailEntity.ddate_solt);  
101 - setReserveStatus("5",tid:tid);  
102 - },  
103 - )  
104 - ],  
105 - );  
106 - }); 306 + );
  307 + return container;
  308 + },
  309 + );
  310 + Widget dialog = Container(
  311 + width: double.infinity,
  312 + decoration: BoxDecoration(
  313 + color: MyColours.color_ffffff,
  314 + borderRadius: BorderRadius.only(
  315 + topLeft: Radius.circular(ScreenUtil().setWidth(40)),
  316 + topRight: Radius.circular(ScreenUtil().setWidth(40)))),
  317 + child: dialogContent);
  318 + showModalBottomSheet(
  319 + context: context,
  320 + backgroundColor: Colors.transparent,
  321 + builder: (context) {
  322 + return Stack(
  323 + children: <Widget>[dialog],
  324 + );
  325 + });
107 } 326 }
108 327
109 //处理在线预订 328 //处理在线预订
110 - setReserveStatus(String status,{String tid=""}){  
111 - UserModel userModel=Provider.of<UserModel>(context,listen: false);  
112 - Map<String,String> causeMap={  
113 - "uid":userModel.user.openid,  
114 - "uname":userModel.user.account,  
115 - "desc":"", 329 + setReserveStatus(String status, {String tid = "", String ac = ""}) async {
  330 + bus.emit("remove_untreated_message", widget.mid);
  331 + UserModel userModel = Provider.of<UserModel>(context, listen: false);
  332 + Map<String, String> causeMap = {
  333 + "uid": userModel.user.openid,
  334 + "uname": userModel.user.account,
  335 + "desc": "",
116 }; 336 };
117 - Map<String,String> params={  
118 - "rid":widget.rid,  
119 - "status":status,//5安排包间 6 拒绝订单  
120 - "tid":tid,  
121 - "mid":widget.mid,  
122 - "cause":json.encode(causeMap) 337 + Map<String, String> params = {
  338 + "rid": widget.rid,
  339 + "status": status, //5安排包间 6 拒绝订单
  340 + "tid": tid,
  341 + "mid": widget.mid,
  342 + "cause": json.encode(causeMap)
123 }; 343 };
124 - detailModel.setReserveStatus(context, params); 344 + if (status == "6") {
  345 + isPause = true;
  346 + params['ac'] = ac; //0=直接拒绝 1=拒绝并暂停预订
  347 + }
  348 + bool success = await detailModel.setReserveStatus(context, params,
  349 + ifPush: (isPause ? false : true), showLoading: true);
  350 + if (success != null && success) {
  351 + bus.emit("refresh_book_list");
  352 + if (status == "6") {
  353 + isRefused = true;
  354 + }
  355 + if (isPause) {
  356 + _getOrderListData();
  357 + refuseDialogState(() {});
  358 + }
  359 + }
125 } 360 }
126 361
127 //处理在线预订 362 //处理在线预订
128 - setMessageStatus(){  
129 - Map<String,String> params={  
130 - "sid":Provider.of<UserModel>(context,listen: false).user.sellerid,  
131 - "id":widget.mid,  
132 - "status":"is_handle" 363 + setMessageStatus() {
  364 + bus.emit("remove_untreated_message", widget.mid);
  365 + Map<String, String> params = {
  366 + "sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  367 + "id": widget.mid,
  368 + "status": "is_handle"
133 }; 369 };
134 detailModel.setMessageStatus(context, params); 370 detailModel.setMessageStatus(context, params);
135 } 371 }
136 372
137 @override 373 @override
138 Widget build(BuildContext context) { 374 Widget build(BuildContext context) {
139 - // TODO: implement build  
140 - return detailEntity==null?Container():SafeArea( 375 + detailModel = Provider.of<NotebookDetailModel>(context, listen: true);
  376 + return Scaffold(
  377 + body: SafeArea(
  378 + child: WillPopScope(
141 child: Column( 379 child: Column(
142 children: <Widget>[ 380 children: <Widget>[
143 MyAppBar( 381 MyAppBar(
144 "在线预订详情", 382 "在线预订详情",
145 showBack: true, 383 showBack: true,
  384 + callback: () {
  385 + if (widget.fromNotify) {
  386 + NavigatorUtil.goHomePage(context, initialIndex: 0);
  387 + } else {
  388 + Navigator.of(context).pop();
  389 + }
  390 + },
146 ), 391 ),
147 - Expanded(  
148 - child: DefaultTextStyle(style: TextStyle(decoration: TextDecoration.none), child: Container(  
149 - color: MyColours.color_ffffff,  
150 - child: SingleChildScrollView(  
151 - child: Container(  
152 - color: MyColours.color_ffffff,  
153 - padding:  
154 - EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(43)),  
155 - child: Column(  
156 - children: <Widget>[  
157 - RowMultiText("用餐时段", detailEntity.ddateMd),  
158 - Stack(  
159 - alignment: Alignment.center,  
160 - children: <Widget>[  
161 - Column(  
162 - children: <Widget>[  
163 - RowMultiText("用餐时间", detailEntity.ddateHm),  
164 - Offstage(  
165 - offstage: detailEntity.type=="0"?false:true,  
166 - child: RowMultiText("用餐人数", detailEntity.pnum),  
167 - )  
168 - ],  
169 - ),  
170 - Image.asset(detailEntity.statuImgAssets,width: ScreenUtil().setWidth(100),height: ScreenUtil().setWidth(30),)  
171 - ],  
172 - ),  
173 - RowMultiText("包间需求", (detailEntity.demands.length.toString()+"个")??""),  
174 - Align(  
175 - alignment: Alignment.centerRight,  
176 - child: Row(  
177 - mainAxisSize: MainAxisSize.min,  
178 - children: detailEntity.demands.map((table){  
179 - return TableItem(table);  
180 - }).toList(),  
181 - ),  
182 - ),  
183 - RowMultiText("客户姓名", detailEntity.rnameStr),  
184 - RowMultiText("客户电话", detailEntity.phone),  
185 - MyDivider(double.infinity, ScreenUtil().setHeight(2)),  
186 - Container( 392 + Expanded(child: Consumer<NotebookDetailModel>(
  393 + builder: (context, model, _) {
  394 + if (model.pageState != PageState.Success) {
  395 + return ExceptionPage(
  396 + pageState: model.pageState,
  397 + callback: () {
  398 + _getOrderListData();
  399 + },
  400 + emptyMsg: "暂时没有预订列表信息哦",
  401 + emptyImg: "empty_search",
  402 + showMsg: "加载中,请稍后...",
  403 + );
  404 + } else {
  405 + return Expanded(
  406 + child: DefaultTextStyle(
  407 + style: TextStyle(decoration: TextDecoration.none),
  408 + child: Container(
187 color: MyColours.color_ffffff, 409 color: MyColours.color_ffffff,
188 - width: double.infinity,  
189 - height: ScreenUtil().setHeight(80),  
190 - padding: EdgeInsets.symmetric(  
191 - vertical: ScreenUtil().setHeight(26)),  
192 - child: Stack(  
193 - alignment: Alignment.center,  
194 - children: <Widget>[  
195 - Positioned(  
196 - left: 0,  
197 - child: Text(  
198 - "客户经理",  
199 - style: TextStyle(  
200 - color: MyColours.color_828282,  
201 - fontSize: ScreenUtil().setSp(22)),  
202 - ),  
203 - ),  
204 - Positioned(  
205 - right: 0,  
206 - child: GestureDetector(  
207 - onTap: () async {  
208 - List<String> list=[];  
209 - for(Manager manager in managers){  
210 - list.add(manager.roleUserName);  
211 - }  
212 - DialogUtil.showSelectCusmanDialog(context,list).then((value){  
213 - setState(() {  
214 - cusmanText=managers[value.first].userName;  
215 - });  
216 - _setCurrManager();  
217 - });  
218 - },  
219 - child: Text(  
220 - cusmanText,  
221 - style: TextStyle(  
222 - color: MyColours.color_353535,  
223 - fontSize: ScreenUtil().setSp(26),  
224 - decoration: TextDecoration.underline,  
225 - ),  
226 - ),  
227 - ),  
228 - )  
229 - ],  
230 - ),  
231 - ),  
232 - MyDivider(double.infinity, ScreenUtil().setHeight(2)),  
233 - Container(  
234 - margin: EdgeInsets.only(top: ScreenUtil().setHeight(206)),  
235 child: Column( 410 child: Column(
236 children: <Widget>[ 411 children: <Widget>[
237 - CommonButton(  
238 - content: "安排包间",  
239 - width: 669,  
240 - height: 76,  
241 - fontSize: 26,  
242 - onPress: () async {  
243 - String tid=await NavigatorUtil.goSelectTablePage(context,widget.rid,DateTime.fromMillisecondsSinceEpoch(int.parse(detailEntity.ddate)*1000),detailEntity.ddate_solt);  
244 - if(tid!=null){  
245 - setReserveStatus("5",tid:tid);  
246 - }  
247 - },  
248 - ),  
249 - VEmptyView(20),  
250 - Container(  
251 - width: ScreenUtil().setWidth(669),  
252 - height: ScreenUtil().setHeight(76),  
253 - decoration: BoxDecoration(  
254 - border: Border.all(color: MyColours.color_199095),  
255 - borderRadius: BorderRadius.circular(  
256 - ScreenUtil().setWidth(5)),  
257 - ),  
258 - child: Row(  
259 - crossAxisAlignment: CrossAxisAlignment.center,  
260 - children: <Widget>[  
261 - Expanded(  
262 - child: GestureDetector(  
263 - child: Center(  
264 - child: Text(  
265 - "拒绝订单",  
266 - style: TextStyle(  
267 - color: MyColours.color_199095,  
268 - fontSize: ScreenUtil().setSp(26)),  
269 - ), 412 + Expanded(
  413 + child: SingleChildScrollView(
  414 + child: Container(
  415 + color: MyColours.color_ffffff,
  416 + padding: EdgeInsets.symmetric(
  417 + horizontal:
  418 + ScreenUtil().setWidth(43)),
  419 + child: Column(
  420 + children: <Widget>[
  421 + RowMultiText(
  422 + "用餐时段", detailEntity.ddateMd),
  423 + Stack(
  424 + alignment: Alignment.center,
  425 + children: <Widget>[
  426 + Column(
  427 + children: <Widget>[
  428 + RowMultiText("用餐时间",
  429 + detailEntity.ddateHm),
  430 + Offstage(
  431 + offstage:
  432 + detailEntity.type == "0"
  433 + ? false
  434 + : true,
  435 + child: RowMultiText("用餐人数",
  436 + detailEntity.pnum),
  437 + )
  438 + ],
  439 + ),
  440 + Image.asset(
  441 + detailEntity.statuImgAssets,
  442 + width:
  443 + ScreenUtil().setWidth(100),
  444 + height:
  445 + ScreenUtil().setWidth(30),
  446 + )
  447 + ],
270 ), 448 ),
271 - onTap: () {  
272 - _showRefuseDialog();  
273 - },  
274 - )),  
275 - MyDivider(  
276 - ScreenUtil().setWidth(1),  
277 - ScreenUtil().setHeight(52),  
278 - color: MyColours.color_199095,  
279 - ),  
280 - Expanded(  
281 - child: GestureDetector(  
282 - child: Center(  
283 - child: Text(  
284 - "联系顾客",  
285 - style: TextStyle(  
286 - color: MyColours.color_199095,  
287 - fontSize: ScreenUtil().setSp(26)), 449 + RowMultiText(
  450 + "包间需求",
  451 + (detailEntity.demands.length
  452 + .toString() +
  453 + "个") ??
  454 + ""),
  455 + Align(
  456 + alignment: Alignment.centerRight,
  457 + child: Offstage(
  458 + offstage: detailEntity
  459 + .demands.length >
  460 + 0
  461 + ? false
  462 + : true,
  463 + child: Container(
  464 + height: ScreenUtil()
  465 + .setHeight(210),
  466 + child: ListView.builder(
  467 + itemBuilder:
  468 + (BuildContext contxt,
  469 + int index) {
  470 + return NeedItem(
  471 + detailEntity
  472 + .demands[index]);
  473 + },
  474 + itemCount: detailEntity
  475 + .demands.length,
  476 + shrinkWrap: true,
  477 + scrollDirection:
  478 + Axis.horizontal,
  479 + ),
  480 + ),
  481 + )),
  482 + RowMultiText(
  483 + "客户姓名", detailEntity.rnameStr),
  484 + RowMultiText("客户电话", formatPhone),
  485 + RowMultiText("备注信息",
  486 + detailEntity.cusdem ?? ""),
  487 + MyDivider(double.infinity,
  488 + ScreenUtil().setHeight(1)),
  489 + Container(
  490 + color: MyColours.color_ffffff,
  491 + width: double.infinity,
  492 + height: ScreenUtil().setHeight(80),
  493 + alignment: Alignment.center,
  494 + child: Stack(
  495 + alignment: Alignment.center,
  496 + children: <Widget>[
  497 + Positioned(
  498 + left: 0,
  499 + child: Text(
  500 + "客户经理",
  501 + style: TextStyle(
  502 + color: MyColours
  503 + .color_828282,
  504 + fontSize: ScreenUtil()
  505 + .setSp(30)),
  506 + ),
  507 + ),
  508 + Positioned(
  509 + right: 0,
  510 + child: GestureDetector(
  511 + onTap: () async {
  512 + List<String> list = [];
  513 + for (Manager manager
  514 + in managers) {
  515 + list.add(manager
  516 + .roleUserName);
  517 + }
  518 + DialogUtil
  519 + .showSelectCusmanDialog(
  520 + context, list,
  521 + (value) {
  522 + if (value != null) {
  523 + setState(() {
  524 + cusmanText =
  525 + managers[value
  526 + .first]
  527 + .userName;
  528 + });
  529 + _setCurrManager();
  530 + }
  531 + }).then((value) {});
  532 + },
  533 + child: Text(
  534 + cusmanText,
  535 + style: TextStyle(
  536 + color: MyColours
  537 + .color_353535,
  538 + fontSize: ScreenUtil()
  539 + .setSp(30),
  540 + decoration:
  541 + TextDecoration
  542 + .underline,
  543 + ),
  544 + ),
  545 + ),
  546 + )
  547 + ],
288 ), 548 ),
289 ), 549 ),
290 - onTap: () {  
291 - if(detailEntity.phone!=null&&detailEntity.phone.isNotEmpty){  
292 - Utils.goPhone(detailEntity.phone);  
293 - }else{  
294 - Utils.showToast("没有客户电话!");  
295 - }  
296 - },  
297 - )),  
298 - ], 550 + ],
  551 + )),
  552 + ),
  553 + ),
  554 + Offstage(
  555 + offstage: detailEntity.status != "0",
  556 + child: Container(
  557 + margin: EdgeInsets.only(
  558 + top: ScreenUtil().setHeight(30),
  559 + bottom: ScreenUtil().setHeight(30)),
  560 + child: Column(
  561 + children: <Widget>[
  562 + CommonButton(
  563 + content: "安排包间",
  564 + width: 669,
  565 + height: 84,
  566 + fontSize: 34,
  567 + onPress: () async {
  568 + Map map = await NavigatorUtil
  569 + .goSelectTablePage(
  570 + context,
  571 + widget.rid,
  572 + int.parse(
  573 + detailEntity.ddate) *
  574 + 1000,
  575 + detailEntity.ddate_solt);
  576 + if (map != null &&
  577 + map['tid'] != null) {
  578 + setReserveStatus("5",
  579 + tid: map['tid']);
  580 + }
  581 + },
  582 + ),
  583 + VEmptyView(20),
  584 + Container(
  585 + width: ScreenUtil().setWidth(669),
  586 + height: ScreenUtil().setWidth(84),
  587 + decoration: BoxDecoration(
  588 + border: Border.all(
  589 + color: MyColours.color_199095),
  590 + borderRadius: BorderRadius.circular(
  591 + ScreenUtil().setWidth(10)),
  592 + ),
  593 + child: Row(
  594 + crossAxisAlignment:
  595 + CrossAxisAlignment.center,
  596 + children: <Widget>[
  597 + Expanded(
  598 + child: GestureDetector(
  599 + child: Center(
  600 + child: Text(
  601 + "拒绝订单",
  602 + style: TextStyle(
  603 + color: MyColours
  604 + .color_199095,
  605 + fontSize: ScreenUtil()
  606 + .setSp(34)),
  607 + ),
  608 + ),
  609 + onTap: () {
  610 + _showRefuseDialog2();
  611 + },
  612 + )),
  613 + Offstage(
  614 + offstage: !isCallTel,
  615 + child: SizedBox(
  616 + width:
  617 + ScreenUtil().setWidth(335),
  618 + height:
  619 + ScreenUtil().setWidth(84),
  620 + child: Row(
  621 + children: [
  622 + MyDivider(
  623 + ScreenUtil().setWidth(2),
  624 + ScreenUtil()
  625 + .setHeight(52),
  626 + color: MyColours
  627 + .color_199095,
  628 + ),
  629 + Expanded(
  630 + child: GestureDetector(
  631 + child: Center(
  632 + child: Text(
  633 + "联系顾客",
  634 + style: TextStyle(
  635 + color: MyColours
  636 + .color_199095,
  637 + fontSize:
  638 + ScreenUtil()
  639 + .setSp(
  640 + 34)),
  641 + ),
  642 + ),
  643 + onTap: () {
  644 + if (detailEntity
  645 + .phone !=
  646 + null &&
  647 + detailEntity.phone
  648 + .isNotEmpty) {
  649 + Utils.goPhone(
  650 + detailEntity
  651 + .phone);
  652 + } else {
  653 + Utils.showToast(
  654 + "没有客户电话!");
  655 + }
  656 + },
  657 + )),
  658 + ],
  659 + ),
  660 + ),
  661 + )
  662 + ],
  663 + ),
  664 + )
  665 + ],
  666 + ),
299 ), 667 ),
300 ) 668 )
301 ], 669 ],
302 - ),  
303 - )  
304 - ],  
305 - )),  
306 - ),  
307 - )),  
308 - ) 670 + ))),
  671 + );
  672 + }
  673 + },
  674 + ))
309 ], 675 ],
310 ), 676 ),
311 - ); 677 + onWillPop: () async {
  678 + if (widget.fromNotify) {
  679 + NavigatorUtil.goHomePage(context, initialIndex: 0);
  680 + return true;
  681 + }
  682 + Navigator.of(context).pop();
  683 + return true;
  684 + },
  685 + )));
312 } 686 }
313 } 687 }