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 @@
"version": "0.2.0",
"configurations": [
{
<<<<<<< HEAD
"name": "Flutter",
"type": "dart",
"request": "launch",
"program": "lib/main.dart"
=======
"name": "oneKey_wdn",
"request": "launch",
"type": "dart"
>>>>>>> v1.4+
}
]
}
\ No newline at end of file
... ...
{
"agcgw":{
"backurl":"connect-drcn.dbankcloud.cn",
"url":"connect-drcn.hispace.hicloud.com"
},
"client":{
"cp_id":"260086000252264275",
"product_id":"9105385871708598142",
"client_id":"326681575729136832",
"client_secret":"A8D20078A192C1BD87C6B3EB5B597EF654901AE981E64701D66131A4E56A3AE9",
"app_id":"101934783",
"cp_id":"890086000102028635",
"product_id":"736430079244628022",
"client_id":"447630859449664704",
"client_secret":"C7F0060C796F3C59EC7928525D6B09D66139F06EDA5C3C6B772583D34A946BBB",
"app_id":"102832405",
"package_name":"com.naji.one_key",
"api_key":"CV6kBSEh4lAr9VF9v+geTdQebNtGEGQ4HcgN1igodItOCuGghaF1do+cxeVplpcEpe3pf3nwbkChLzCvkxtHvQOaPkTs"
"api_key":"CgB6e3x9K3RbzJwcAdFaQxGHXy+cqz0hCk6o/By+YxTV++JZtUgxAHKZNq4t1vOpQFjD/FSlkuuPdEiHm5dQ7Cd0"
},
"service":{
"analytics":{
"collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
"resource_id":"p1",
"channel_id":""
},
"cloudstorage":{
"storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn"
},
"ml":{
"mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn"
}
},
"region":"CN",
"configuration_version":"1.0"
}
\ No newline at end of file
... ...
... ... @@ -11,14 +11,14 @@ if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
def flutterVersionCode = "146"
if (flutterVersionCode == null) {
flutterVersionCode = '1'
flutterVersionCode = '146'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
def flutterVersionName = "1.4.6"
if (flutterVersionName == null) {
flutterVersionName = '1.0'
flutterVersionName = '1.4.6'
}
apply plugin: 'com.android.application'
... ... @@ -41,7 +41,7 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.naji.one_key"
minSdkVersion 17
minSdkVersion 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
... ... @@ -49,21 +49,16 @@ android {
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "27ceb79c44af41ad99202f7a", // NOTE: JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
HUAWEI_APPID:"101934783",//华为平台注册的appid
XIAOMI_APPKEY : "5811835841457", // 小米平台注册的appkey
XIAOMI_APPID : "2882303761518358457", // 小米平台注册的appid
OPPO_APPKEY : "94d77d10e7bb4c60bcf18a84c8ca8bdd", // OPPO平台注册的appkey
OPPO_APPID : "30260281", // OPPO平台注册的appid
OPPO_APPSECRET: "9b7e372f93794593953f93f118619570",//OPPO平台注册的appsecret
// VIVO_APPKEY : "5811835841457", // VIVO平台注册的appkey
// VIVO_APPID : "2882303761518358457", // VIVO平台注册的appid
XG_ACCESS_ID : '1500012875',
XG_ACCESS_KEY : 'AVR2GJERH0HC',
HW_APPID : '102832405',
VIVO_APPID: "103886384",
VIVO_APPKEY:"5a04e5c3485c0b19a2911c95dcaff5d2",
PACKAGE_NAME : "com.naji.one_key",// 小米通道
]
}
... ... @@ -86,12 +81,17 @@ android {
buildTypes {
release {
minifyEnabled true
proguardFiles 'proguard-rules.pro'
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug{
minifyEnabled false
signingConfig signingConfigs.debug
minifyEnabled true
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
... ... @@ -105,17 +105,8 @@ dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
//华为推送
implementation 'cn.jiguang.sdk.plugin:huawei:3.5.4'
implementation 'com.huawei.hms:push:3.0.3.301'
//小米推送
implementation 'cn.jiguang.sdk.plugin:xiaomi:3.5.4'
// //OPPO推送
// implementation 'cn.jiguang.sdk.plugin:oppo:3.4.0'
//
// //vivo推送
// implementation 'cn.jiguang.sdk.plugin:vivo:3.5.4'
implementation 'com.tencent.tpns:huawei:1.2.0.3-release'// 华为推送
implementation 'com.tencent.tpns:xiaomi:1.2.0.3-release' // 小米推送
implementation 'com.tencent.tpns:oppo:1.2.0.3-release' // OPPO 推送
implementation 'com.tencent.tpns:vivo:1.2.0.3-release' // vivo 推送
}
... ...
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.android.tpush.** {*;}
-keep class com.tencent.tpns.baseapi.** {*;}
-keep class com.tencent.tpns.mqttchannel.** {*;}
-keep class com.tencent.tpns.dataacquisition.** {*;}
-keep class com.tencent.bigdata.baseapi.** {*;}
-keep class com.tencent.bigdata.mqttchannel.** {*;}
#-ignorewarning
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.android.hms.agent.**{*;}
-keep class com.xiaomi.**{*;}
-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
-dontwarn com.meizu.cloud.pushsdk.**
-keep class com.meizu.cloud.pushsdk.**{*;}
-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*; }
-keep class com.vivo.vms.**{*; }
-keep class com.tencent.android.vivopush.VivoPushMessageReceiver{*;}
-keep public class * extends android.app.Service
-keep class com.heytap.mcssdk.** {*;}
-keep class com.heytap.msp.push.** { *;}
... ...
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.naji.one_key">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.naji.one_key">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
<application
android:name="io.flutter.app.FlutterApplication"
android:label="一键订"
tools:replace="android:label"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
... ... @@ -18,25 +25,37 @@
android:windowSoftInputMode="adjustResize"
android:exported="true"
>
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<meta-data
android:name="io.flutter.embedding.android.SplashScreenDrawable"
android:resource="@drawable/launch_background" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<service
android:name="cn.jpush.android.service.PluginHuaweiPlatformsService"
android:exported="false">
<!-- 通知栏跳转intent -->
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:scheme="xgscheme"
android:host="com.naji.book"
android:path="/book_detail" />
</intent-filter>
</service>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
... ...
package com.naji.one_key
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import android.os.Bundle
import android.util.Log
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodCall
class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
Log.d("Push-Data",this.intent.data.toString());
}
private var TAG = "| com.naji.book |"
// 通道名称
private var CHANNEL = "com.naji/book"
// native端的Intent数据
private var intentMap = mutableMapOf<String, String>()
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// flutter版本更新后使用 getFlutterEngine().getDartExecutor().getBinaryMessenger()代替 getFlutterView()
val channel = MethodChannel(getFlutterEngine()?.getDartExecutor()?.getBinaryMessenger(), CHANNEL)
// 这里要获取启动时的intent
val uri = intent.data
val paramsMap = mutableMapOf<String, String>()
if (uri != null) {
val set = uri.queryParameterNames
for (name in set) {
val value = uri.getQueryParameter(name)
paramsMap[name.toString()] = value.toString()
}
}
intentMap = paramsMap
channel.setMethodCallHandler { call, result ->
Log.i(TAG,intentMap.toString());
when (call.method) {
"getIntent" -> get_intent(call, result)
}
}
}
// 获取intent
private fun get_intent(call: MethodCall, result: MethodChannel.Result) {
Log.i(TAG, "调用${call.method}方法")
result.success(intentMap)
}
}
... ...
No preview for this file type
No preview for this file type
{
"tpns": {
"access_id": "1500012875",
"access_key": "AVR2GJERH0HC"
},
"com.naji.one_key": {
"channel": {
"enable": true
}
},
"debug": false,
"version": "1.2.0.3"
}
\ No newline at end of file
... ...
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
7babc7873f8d177769b987ba4c6c2911
\ No newline at end of file
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>
... ...
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
... ...
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
... ...
... ... @@ -10,6 +10,7 @@ project 'Runner', {
'Release' => :release,
}
<<<<<<< HEAD
def parse_KV_file(file, separator='=')
file_abs_path = File.expand_path(file)
if !File.exists? file_abs_path
... ... @@ -86,5 +87,34 @@ post_install do |installer|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
=======
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
>>>>>>> v1.4+
end
end
... ...
PODS:
- audioplayers (0.0.1):
- Flutter
<<<<<<< HEAD
- Bugly (2.5.5)
- Flutter (1.0.0)
=======
- Bugly (2.5.71)
- connectivity (0.0.1):
- Flutter
- Reachability
- contacts_service (0.2.2):
- Flutter
- device_info (0.0.1):
- Flutter
- easy_contact_picker (0.0.1):
- Flutter
- Flutter (1.0.0)
- flutter_app_badger (0.0.1):
- Flutter
>>>>>>> v1.4+
- flutter_bugly (0.0.1):
- Bugly
- Flutter
... ... @@ -12,6 +28,7 @@ PODS:
- Flutter
- fluwx (0.0.1):
- Flutter
<<<<<<< HEAD
- WechatOpenSDK (= 1.8.6.2)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
... ... @@ -27,10 +44,27 @@ PODS:
- shared_preferences_macos (0.0.1):
- Flutter
- shared_preferences_web (0.0.1):
=======
- WechatOpenSDK (= 1.8.7.1)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- install_plugin (0.0.1):
- Flutter
- package_info (0.0.1):
- Flutter
- path_provider (0.0.1):
- Flutter
- "permission_handler (4.4.0+hotfix.4)":
- Flutter
- Reachability (3.2)
- shared_preferences (0.0.1):
>>>>>>> v1.4+
- Flutter
- sqflite (0.0.1):
- Flutter
- FMDB (~> 2.7.2)
<<<<<<< HEAD
- url_launcher (0.0.1):
- Flutter
- url_launcher_macos (0.0.1):
... ... @@ -42,10 +76,31 @@ PODS:
DEPENDENCIES:
- audioplayers (from `.symlinks/plugins/audioplayers/ios`)
- Flutter (from `Flutter`)
=======
- TPNS-iOS (1.2.7.2)
- tpns_flutter_plugin (1.0.4):
- Flutter
- TPNS-iOS (= 1.2.7.2)
- url_launcher (0.0.1):
- Flutter
- webview_flutter (0.0.1):
- Flutter
- WechatOpenSDK (1.8.7.1)
DEPENDENCIES:
- audioplayers (from `.symlinks/plugins/audioplayers/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`)
- contacts_service (from `.symlinks/plugins/contacts_service/ios`)
- device_info (from `.symlinks/plugins/device_info/ios`)
- easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`)
- Flutter (from `Flutter`)
- flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
>>>>>>> v1.4+
- flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
- flutter_statusbarcolor (from `.symlinks/plugins/flutter_statusbarcolor/ios`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- fluwx (from `.symlinks/plugins/fluwx/ios`)
<<<<<<< HEAD
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- path_provider_macos (from `.symlinks/plugins/path_provider_macos/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
... ... @@ -56,18 +111,49 @@ DEPENDENCIES:
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
- url_launcher_macos (from `.symlinks/plugins/url_launcher_macos/ios`)
- url_launcher_web (from `.symlinks/plugins/url_launcher_web/ios`)
=======
- install_plugin (from `.symlinks/plugins/install_plugin/ios`)
- package_info (from `.symlinks/plugins/package_info/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`)
- url_launcher (from `.symlinks/plugins/url_launcher/ios`)
- webview_flutter (from `.symlinks/plugins/webview_flutter/ios`)
>>>>>>> v1.4+
SPEC REPOS:
trunk:
- Bugly
- FMDB
<<<<<<< HEAD
=======
- Reachability
- TPNS-iOS
>>>>>>> v1.4+
- WechatOpenSDK
EXTERNAL SOURCES:
audioplayers:
:path: ".symlinks/plugins/audioplayers/ios"
<<<<<<< HEAD
Flutter:
:path: Flutter
=======
connectivity:
:path: ".symlinks/plugins/connectivity/ios"
contacts_service:
:path: ".symlinks/plugins/contacts_service/ios"
device_info:
:path: ".symlinks/plugins/device_info/ios"
easy_contact_picker:
:path: ".symlinks/plugins/easy_contact_picker/ios"
Flutter:
:path: Flutter
flutter_app_badger:
:path: ".symlinks/plugins/flutter_app_badger/ios"
>>>>>>> v1.4+
flutter_bugly:
:path: ".symlinks/plugins/flutter_bugly/ios"
flutter_statusbarcolor:
... ... @@ -76,14 +162,24 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/fluttertoast/ios"
fluwx:
:path: ".symlinks/plugins/fluwx/ios"
<<<<<<< HEAD
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
path_provider_macos:
:path: ".symlinks/plugins/path_provider_macos/ios"
=======
install_plugin:
:path: ".symlinks/plugins/install_plugin/ios"
package_info:
:path: ".symlinks/plugins/package_info/ios"
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
>>>>>>> v1.4+
permission_handler:
:path: ".symlinks/plugins/permission_handler/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
<<<<<<< HEAD
shared_preferences_macos:
:path: ".symlinks/plugins/shared_preferences_macos/ios"
shared_preferences_web:
... ... @@ -119,5 +215,44 @@ SPEC CHECKSUMS:
WechatOpenSDK: 8b3ba4239193d1112205c139c94e21934e8f369a
PODFILE CHECKSUM: e45c292f618eeca3034958d33b444b6e1249b55f
=======
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
tpns_flutter_plugin:
:path: ".symlinks/plugins/tpns_flutter_plugin/ios"
url_launcher:
:path: ".symlinks/plugins/url_launcher/ios"
webview_flutter:
:path: ".symlinks/plugins/webview_flutter/ios"
SPEC CHECKSUMS:
audioplayers: 84f968cea3f2deab00ec4f8ff53358b3c0b3992c
Bugly: fd066c75c4a0eca1440f9b6a84bd37d51bfc85ac
connectivity: c4130b2985d4ef6fd26f9702e886bd5260681467
contacts_service: 849e1f84281804c8bfbec1b4c3eedcb23c5d3eca
device_info: d7d233b645a32c40dfdc212de5cf646ca482f175
easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
flutter_statusbarcolor: 8afb1071ed8c58be929f1e32b36c629771fd2259
fluttertoast: b644586ef3b16f67fae9a1f8754cef6b2d6b634b
fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
install_plugin: a13e7ddd2bab0c701b48cd359c26d0394125b6fb
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c
permission_handler: 8278954f2382902f63f00dd8828769c0bd6d511b
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0
TPNS-iOS: 9b35473a4a0d07f2c2730ea1e66c6749c2b98095
tpns_flutter_plugin: 8dbbee157aab91a878f64d056c1383726a6c5c4d
url_launcher: 6fef411d543ceb26efce54b05a0a40bfd74cbbef
webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96
WechatOpenSDK: 6a4d1436c15b3b5fe2a0bd383f3046010186da44
PODFILE CHECKSUM: a75497545d4391e2d394c3668e20cfb1c2bbd4aa
>>>>>>> v1.4+
COCOAPODS: 1.9.3
... ...
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
A7F352227F0F121A53D9A543 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F11082C59A1D00E83E0934D /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
22513BD076488FBD50F0303F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
2DCAB49DF131E02F3BAF38E1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* 一键订.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "一键订.app"; sourceTree = BUILT_PRODUCTS_DIR; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9F11082C59A1D00E83E0934D /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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>"; };
EE6AF8FF2457DB720005E3B9 /* RunnerProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerProfile.entitlements; sourceTree = "<group>"; };
EE6AF9002457DC0C0005E3B9 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A7F352227F0F121A53D9A543 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
5F6C37E5A77D3FF43D0DBCC2 /* Pods */ = {
isa = PBXGroup;
children = (
22513BD076488FBD50F0303F /* Pods-Runner.debug.xcconfig */,
2DCAB49DF131E02F3BAF38E1 /* Pods-Runner.release.xcconfig */,
CC19436D18202E6CAD07F931 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
8074F3926F79FEBA9CA1E157 /* Frameworks */ = {
isa = PBXGroup;
children = (
9F11082C59A1D00E83E0934D /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
5F6C37E5A77D3FF43D0DBCC2 /* Pods */,
8074F3926F79FEBA9CA1E157 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* 一键订.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
EE6AF9002457DC0C0005E3B9 /* Runner.entitlements */,
EE6AF8FF2457DB720005E3B9 /* RunnerProfile.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9C09FB22D919B3DDAB7B4DE4 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* 一键订.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = 8J59HM8B82;
LastSwiftMigration = 1100;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
9B9871E299FA5648CFE77D1A /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${PODS_ROOT}/../Flutter/Flutter.framework",
"${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
"${BUILT_PRODUCTS_DIR}/audioplayers/audioplayers.framework",
"${BUILT_PRODUCTS_DIR}/connectivity/connectivity.framework",
"${BUILT_PRODUCTS_DIR}/contacts_service/contacts_service.framework",
"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
"${BUILT_PRODUCTS_DIR}/easy_contact_picker/easy_contact_picker.framework",
"${BUILT_PRODUCTS_DIR}/flutter_app_badger/flutter_app_badger.framework",
"${BUILT_PRODUCTS_DIR}/flutter_statusbarcolor/flutter_statusbarcolor.framework",
"${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework",
"${BUILT_PRODUCTS_DIR}/install_plugin/install_plugin.framework",
"${BUILT_PRODUCTS_DIR}/package_info/package_info.framework",
"${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/url_launcher/url_launcher.framework",
"${BUILT_PRODUCTS_DIR}/webview_flutter/webview_flutter.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/audioplayers.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/contacts_service.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/easy_contact_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_app_badger.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_statusbarcolor.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/install_plugin.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/webview_flutter.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9C09FB22D919B3DDAB7B4DE4 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Naji (Beijing) Technology Co., Ltd. (8J59HM8B82)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 146;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.4.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: 亚光 盖 (78U98359LM)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer: 亚光 盖 (78U98359LM)";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Naji (Beijing) Technology Co., Ltd. (8J59HM8B82)";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
PROVISIONING_PROFILE_SPECIFIER = "Push Development Profile";
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 146;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.4.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 146;
DEVELOPMENT_TEAM = 8J59HM8B82;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
MARKETING_VERSION = 1.4.6;
PRODUCT_BUNDLE_IDENTIFIER = com.naji.reserveLine;
PRODUCT_NAME = "一键订";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
... ...
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "&#x4e00;&#x952e;&#x8ba2;.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
... ...
import UIKit
import Flutter
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let controller = self.window.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel.init(name: "com.naji/book", binaryMessenger: controller as! FlutterBinaryMessenger)
channel.setMethodCallHandler { (call, result) in
if call.method == "getIntent" {
// let para = call.arguments
// print(para!)
let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification];
result(userInfo);
}else{
result(FlutterMethodNotImplemented)
}
}
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>com.naji.reserveLine</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Runner</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>weixin</string>
<key>CFBundleURLSchemes</key>
<array>
<string>wx85aa3cdd0f791e65</string>
</array>
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSApplicationCategoryType</key>
<string></string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixinULAPI</string>
<string>wechat</string>
<string>weixin</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSAppleMusicUsageDescription</key>
<string>需要您的同意,APP才能访问媒体资料库</string>
<key>NSCalendarsUsageDescription</key>
<string>需要您的同意,APP才能访问日历</string>
<key>NSContactsUsageDescription</key>
<string>需要您的同意,APP才能访问通讯录</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要您的同意,APP才能始终访问位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要您的同意,APP才能在使用期间访问位置</string>
<key>NSMotionUsageDescription</key>
<string>需要您的同意,APP才能访问运动与健身</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要您的同意,APP才能访问语音识别</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>XG_ACCESS_ID</key>
<string>1600012876</string>
<key>XG_ACCESS_KEY</key>
<string>INUIMFK21WGH</string>
<key>io.flutter.embedded_views_preview</key>
<true/>
</dict>
</plist>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:xt04.colorcun.com</string>
</array>
</dict>
</plist>
... ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:xt04.colorcun.com</string>
</array>
</dict>
</plist>
... ...
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide Router;
import 'package:get_it/get_it.dart';
import 'package:shared_preferences/shared_preferences.dart';
... ... @@ -23,4 +23,4 @@ class App{
getIt.registerSingleton(NavigateService());
}
}
\ No newline at end of file
}
... ...
class MyError extends Error{
final int type;
MyError({this.type=1});//1 ConnectivityError 2 ConnectivityTimeOut
}
... ...
/**
* 页面状态
*/
enum PageState{
Loading,//加载中
ConnectivityTimeOut,//请求超时
ConnectivityError,//请求错误
Empty,//空页面
First,
Success//成功
}
... ...
import 'dart:io';
import 'package:common_utils/common_utils.dart';
import 'package:dio/dio.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' hide Router;
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:flutter_easyrefresh/ball_pulse_footer.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_easyrefresh/material_header.dart';
import 'package:fluwx/fluwx.dart';
import 'package:one_key/pages/detail/handle_online_page.dart';
import 'package:one_key/provider/message_dialog_model.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:one_key/provider/tools.dart';
import 'package:one_key/utils/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';
import 'app.dart';
import 'net/dio_util.dart';
... ... @@ -17,28 +25,36 @@ import 'pages/login/login_page.dart';
import 'provider/user_model.dart';
import 'route/navigate_service.dart';
import 'route/routes.dart';
import 'utils/log_util.dart';
import 'package:flutter/services.dart';
Future<void> main() async {
Router router = Router();
Routes.configureRoutes(router);
App.router = router;
App.setupLocator();
LogUtil.init(isDebug: true, tag: 'ONE_KEY');
Provider.debugCheckInvalidValueType = null;
await initializeDateFormatting();
runApp(MultiProvider(
providers: [
ChangeNotifierProvider<UserModel>(
create: (_) => UserModel(),
),
ChangeNotifierProvider<MessageDialogModel>(
create: (_) => MessageDialogModel()..init(),
)
],
child: MyApp(),
));
FlutterBugly.postCatchedException(() async {
WidgetsFlutterBinding.ensureInitialized();
Router router = Router();
Routes.configureRoutes(router);
App.router = router;
App.setupLocator();
LogUtil.init(isDebug: false, tag: 'ONE_KEY');
Provider.debugCheckInvalidValueType = null;
await initializeDateFormatting();
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown])
.then((_) {
runApp(MultiProvider(
providers: [
ChangeNotifierProvider<UserModel>(
create: (_) => UserModel(),
),
ChangeNotifierProvider<MessageDialogModel>(
create: (_) => MessageDialogModel()..init(),
),
],
child: MyApp(),
));
});
FlutterBugly.init(androidAppId: "f71a313f42", iOSAppId: "3089e4587e");
});
}
class MyApp extends StatefulWidget {
... ... @@ -50,6 +66,8 @@ class MyApp extends StatefulWidget {
}
class MyAppState extends State<MyApp> {
int xgCount = 1; //注册信鸽次数,最多5次
@override
void initState() {
// TODO: implement initState
... ... @@ -73,6 +91,7 @@ class MyAppState extends State<MyApp> {
LogUtil.v("is installed $result");
}
//初始化dio
initDio() {
DioUtil.openDebug();
Options options = DioUtil.getDefOptions();
... ...
... ... @@ -13,7 +13,7 @@ class Manager{
}
String get userName{
return nick_name.isEmpty?user_name:nick_name;
return (nick_name==null||nick_name.isEmpty)?user_name:nick_name;
}
factory Manager.fromJson(Map<String,dynamic> json)=>
... ...
import 'package:json_annotation/json_annotation.dart';
import 'package:one_key/utils/utils.dart';
part 'message.g.dart';
... ... @@ -7,7 +8,7 @@ class Message {
Message();
String id;
String message_type;
dynamic message_type;
String handle_time;//10在线预订 11取消预订
String read_time;
String is_read;
... ... @@ -26,20 +27,38 @@ class Message {
String get rnameStr{
switch(sex.toString()){
case "1"://先生
case "男":
return rname+"先生";
case "2"://女士
case "女":
return rname+"女士";
case "3"://公司
case "公司":
return rname+"公司";
}
}
String get ddateStr{
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate_long.toString())*1000);
String ymd=dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day);
switch(ddate_solt){
case "1"://早餐
return ymd+" 早餐";
case "2"://午餐
return ymd+" 午餐";
case "3"://晚餐
return ymd+" 晚餐";
default:
return ymd;
}
}
String get cdateStr{
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString())*1000);
if((DateTime.now().difference(dateTime)).inMilliseconds<60000){
return "刚刚";
}else{
return dateTime.year.toString()+"/"+(dateTime.month<10?"0"+dateTime.month.toString():dateTime.month.toString())+"/"+(dateTime.day<10?"0"+dateTime.day.toString():dateTime.day.toString());
return dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day)+" "+Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);
}
}
... ...
... ... @@ -9,7 +9,7 @@ part of 'message.dart';
Message _$MessageFromJson(Map<String, dynamic> json) {
return Message()
..id = json['id'] as String
..message_type = json['message_type'] as String
..message_type = json['message_type']
..handle_time = json['handle_time'] as String
..read_time = json['read_time'] as String
..is_read = json['is_read'] as String
... ...
import 'dart:convert';
import 'package:json_annotation/json_annotation.dart';
import 'package:one_key/utils/log_util.dart';
import 'package:one_key/utils/utils.dart';
part 'notebook.g.dart';
... ...
import 'package:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:one_key/models/table.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import 'dart:convert';
import "table.dart";
import 'package:one_key/models/table.dart' as t;
part 'notebook_detail.g.dart';
@JsonSerializable()
class NotebookDetail {
NotebookDetail();
String id;
String tableinfo;
String pnum;
String rname;
String sex;
String phone;
String cusdem;
String cusman;//客户经理
String ddate;
String is_set_ddate;
String ddate_solt;
String status="0";//订单状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
String action;
String type;//0 内部订单 1 在线预订
String note_name;
String channel;
String cdate;
List<Table> demands;//需求桌位
List<Table> tables;//预订桌位
Cancel cancel;
String get statuImgAssets{
switch(status){
case "0":
return "assets/status_undeal.png";
case "1":
case "5":
return "assets/statu_booked.png";
case "2":
return "assets/statu_reached.png";
case "3":
return "assets/statu_finished.png";
case "4":
return "assets/statu_canceled.png";
case "6":
return "assets/statu_refuse.png";
}
NotebookDetail();
NotebookDetail.def(BuildContext context){
id="-1";
pnum="6";
rname="";
sex="1";
phone="";
cusdem="";
type="0";
ddate=(DateTime.now().millisecondsSinceEpoch/1000).floor().toString();
ddate_solt=defDdateSolt(context);
is_set_ddate="0";
tables=[];
}
NotebookDetail.fromTableManager(String ddateStr,String ddatesolt,t.Table table){
id="-1";
pnum="6";
rname="";
sex="1";
phone="";
cusdem="";
type="0";
ddate=ddateStr;
ddate_solt=ddatesolt;
is_set_ddate="1";
tables=[table];
}
String defDdateSolt(BuildContext context){
int millsNow=DateTime.now().millisecondsSinceEpoch;
UserModel userModel=Provider.of<UserModel>(context,listen: false);
String morning=userModel.user.morning==""?"00:00-00:00":userModel.user.morning;
String noon=userModel.user.noon==""?"00:00-00:00":userModel.user.noon;
String night=userModel.user.night==""?"00:00-00:00":userModel.user.night;
String endMorning=morning.split("-")[1];
String endNoon=noon.split("-")[1];
String endNight=night.split("-")[1];
int endMorningMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endMorning:00"));
int endNoonMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNoon:00"));
int endNightMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNight:00"));
if(millsNow<=endMorningMills){
return "1";
}else if(millsNow<=endNoonMills){
return "2";
}else if(millsNow<=endNightMills){
return "3";
}
}
String id;
String abolition;
String tableinfo;
String pnum;
String rname;
String sex;
String phone;
String cusdem;
String cusman; //客户经理
String ddate;
String is_set_ddate;
String ddate_solt;
String status = "0"; //订单状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
String action;
String type; //0 内部订单 1 在线预订
String note_name;
String channel;
String cdate;
List<t.Table> demands; //需求桌位
List<t.Table> tables; //预订桌位
Cancel cancel;
String get statuImgAssets {
switch (status) {
case "0":
return "assets/status_undeal.png";
case "1":
case "5":
return "assets/statu_booked.png";
case "2":
return "assets/statu_reached.png";
case "3":
return "assets/statu_finished.png";
case "4":
return "assets/statu_canceled.png";
case "6":
return "assets/statu_refuse.png";
}
}
String get ddateMd{
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);
String md=Utils.addZeroNumber(dateTime.month)+"月"+Utils.addZeroNumber(dateTime.day)+"日";
switch (ddate_solt){
case "1":
md+=" 早餐";
break;
case "2":
md+=" 午餐";
break;
case "3":
md+=" 晚餐";
break;
}
return md;
String get demandStr{
String demand="";
for(t.Table table in demands){
demand+=table.name+",";
}
return demand.substring(0,demand.length-1);
}
String get ddateHm{
if(type=="0"||(type=="1"&&is_set_ddate=="1")){
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);
String Hm=Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);
return Hm;
}else{
return "";
}
String get ddateMd {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
String md = Utils.addZeroNumber(dateTime.month) +
"月" +
Utils.addZeroNumber(dateTime.day) +
"日";
switch (ddate_solt) {
case "1":
md += " 早餐";
break;
case "2":
md += " 午餐";
break;
case "3":
md += " 晚餐";
break;
}
return md;
}
String get ddateStr{
String ddateStr;
if (type=="1"&&is_set_ddate=="0"){//在线预订,没有设置到店时间
switch (ddate_solt){
case "1":
ddateStr="早餐";
break;
case "2":
ddateStr="午餐";
break;
case "3":
ddateStr="晚餐";
break;
default:
ddateStr="";
break;
}
}else{
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(ddate)*1000);
ddateStr=Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);
}
return ddateStr;
String get ddateHm {
if (type == "0" || (type == "1" && is_set_ddate == "1")) {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
String Hm = Utils.addZeroNumber(dateTime.hour) +
":" +
Utils.addZeroNumber(dateTime.minute);
return Hm;
} else {
return "";
}
}
String get rnameStr{
if(rname.isEmpty)return "";
switch(sex){
case "1"://先生
return rname+"先生";
case "2"://女士
return rname+"女士";
case "3"://公司
return rname+"公司";
}
String get ddateStr {
String ddateStr;
if (type == "1" && is_set_ddate == "0") {
//在线预订,没有设置到店时间
switch (ddate_solt) {
case "1":
ddateStr = "早餐";
break;
case "2":
ddateStr = "午餐";
break;
case "3":
ddateStr = "晚餐";
break;
default:
ddateStr = "";
break;
}
} else {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
ddateStr = Utils.addZeroNumber(dateTime.hour) +
":" +
Utils.addZeroNumber(dateTime.minute);
}
return ddateStr;
}
String get tableinfoStr{
return tables[0].name+ "\n"+(tables.length>=2?('等'+tables.length.toString()+'桌'):'');
String get rnameStr {
if (rname.isEmpty) return "";
switch (sex) {
case "1": //先生
return rname + "先生";
case "2": //女士
return rname + "女士";
case "3": //公司
return rname + "公司";
}
}
String get tableinfoStr {
return tables[0].name +
"\n" +
(tables.length >= 2 ? ('等' + tables.length.toString() + '桌') : '');
}
factory NotebookDetail.fromJson(Map<String, dynamic> json) =>
_$NotebookDetailFromJson(json);
Map<String, dynamic> toJson() => _$NotebookDetailToJson(this);
@override
String toString() {
return 'NotebookDetail{id: $id, abolition: $abolition, tableinfo: $tableinfo, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel}';
}
factory NotebookDetail.fromJson(Map<String,dynamic> json) => _$NotebookDetailFromJson(json);
Map<String, dynamic> toJson() => _$NotebookDetailToJson(this);
}
@JsonSerializable()
class Cancel {
Cancel();
Cancel();
String uname;
String desc;
String cdate;
String uname;
String desc;
String cdate;
String get cdateStr{
DateTime dateTime=DateTime.fromMillisecondsSinceEpoch(int.parse(cdate)*1000);
return dateTime.year.toString()+"/"+Utils.addZeroNumber(dateTime.month)+"/"+Utils.addZeroNumber(dateTime.day)+" "+Utils.addZeroNumber(dateTime.hour)+":"+Utils.addZeroNumber(dateTime.minute);
}
String get cdateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(cdate) * 1000);
return dateTime.year.toString() +
"/" +
Utils.addZeroNumber(dateTime.month) +
"/" +
Utils.addZeroNumber(dateTime.day) +
" " +
Utils.addZeroNumber(dateTime.hour) +
":" +
Utils.addZeroNumber(dateTime.minute);
}
factory Cancel.fromJson(Map<String,dynamic> json) => _$CancelFromJson(json);
Map<String, dynamic> toJson() => _$CancelToJson(this);
factory Cancel.fromJson(Map<String, dynamic> json) => _$CancelFromJson(json);
Map<String, dynamic> toJson() => _$CancelToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'notebook_detail.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
... ... @@ -10,6 +12,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
return NotebookDetail()
..id = json['id'] as String
..tableinfo = json['tableinfo'] as String
..abolition = json['abolition'] as String
..pnum = json['pnum'] as String
..rname = json['rname'] as String
..sex = json['sex'] as String
... ... @@ -27,11 +30,11 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
..cdate = json['cdate'] as String
..demands = (json['demands'] as List)
?.map(
(e) => e == null ? null : Table.fromJson(e as Map<String, dynamic>))
(e) => e == null ? null : t.Table.fromJson(e as Map<String, dynamic>))
?.toList()
..tables = (json['tables'] as List)
?.map(
(e) => e == null ? null : Table.fromJson(e as Map<String, dynamic>))
(e) => e == null ? null : t.Table.fromJson(e as Map<String, dynamic>))
?.toList()
..cancel = json['cancel'] == null
? null
... ... @@ -42,6 +45,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
<String, dynamic>{
'id': instance.id,
'tableinfo': instance.tableinfo,
'abolition':instance.abolition,
'pnum': instance.pnum,
'rname': instance.rname,
'sex': instance.sex,
... ...
import 'package:json_annotation/json_annotation.dart';
part 'reserve_info_model.g.dart';
@JsonSerializable()
class ReserveInfoModel extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
SunReserveInfoModel data;
@JsonKey(name: 'msg')
String msg;
ReserveInfoModel(this.ret,this.data,this.msg,);
factory ReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$ReserveInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$ReserveInfoModelToJson(this);
}
@JsonSerializable()
class SunReserveInfoModel extends Object {
@JsonKey(name: 'row')
RowModel row;
@JsonKey(name: 'list')
List<dynamic> list;
@JsonKey(name: 'table')
List<dynamic> table;
SunReserveInfoModel(this.row,this.list,this.table,);
factory SunReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$SunReserveInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$SunReserveInfoModelToJson(this);
}
@JsonSerializable()
class RowModel extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'tableinfo')
String tableinfo;
@JsonKey(name: 'tid')
String tid;
@JsonKey(name: 'rname')
String rname;
@JsonKey(name: 'sex')
String sex;
@JsonKey(name: 'phone')
String phone;
@JsonKey(name: 'cusman')
String cusman;
@JsonKey(name: 'ddate')
String ddate;
@JsonKey(name: 'cdate')
String cdate;
@JsonKey(name: 'cusdem')
String cusdem;
@JsonKey(name: 'status')
String status;
@JsonKey(name: 'action')
String action;
@JsonKey(name: 'is_set_ddate')
String isSetDdate;
@JsonKey(name: 'ddate_solt')
String ddateSolt;
@JsonKey(name: 'type')
String type;
@JsonKey(name: 'name')
String name;
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,);
factory RowModel.fromJson(Map<String, dynamic> srcJson) => _$RowModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$RowModelToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'reserve_info_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
ReserveInfoModel _$ReserveInfoModelFromJson(Map<String, dynamic> json) {
return ReserveInfoModel(
json['ret'] as int,
json['data'] == null
? null
: SunReserveInfoModel.fromJson(json['data'] as Map<String, dynamic>),
json['msg'] as String);
}
Map<String, dynamic> _$ReserveInfoModelToJson(ReserveInfoModel instance) =>
<String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg
};
SunReserveInfoModel _$SunReserveInfoModelFromJson(Map<String, dynamic> json) {
return SunReserveInfoModel(
json['row'] == null
? null
: RowModel.fromJson(json['row'] as Map<String, dynamic>),
json['list'] as List,
json['table'] as List);
}
Map<String, dynamic> _$SunReserveInfoModelToJson(
SunReserveInfoModel instance) =>
<String, dynamic>{
'row': instance.row,
'list': instance.list,
'table': instance.table
};
RowModel _$RowModelFromJson(Map<String, dynamic> json) {
return RowModel(
json['id'] as String,
json['tableinfo'] as String,
json['tid'] as String,
json['rname'] as String,
json['sex'] as String,
json['phone'] as String,
json['cusman'] as String,
json['ddate'] as String,
json['cdate'] as String,
json['cusdem'] as String,
json['status'] as String,
json['action'] as String,
json['is_set_ddate'] as String,
json['ddate_solt'] as String,
json['type'] as String,
json['name'] as String);
}
Map<String, dynamic> _$RowModelToJson(RowModel instance) => <String, dynamic>{
'id': instance.id,
'tableinfo': instance.tableinfo,
'tid': instance.tid,
'rname': instance.rname,
'sex': instance.sex,
'phone': instance.phone,
'cusman': instance.cusman,
'ddate': instance.ddate,
'cdate': instance.cdate,
'cusdem': instance.cusdem,
'status': instance.status,
'action': instance.action,
'is_set_ddate': instance.isSetDdate,
'ddate_solt': instance.ddateSolt,
'type': instance.type,
'name': instance.name
};
... ...
import 'package:json_annotation/json_annotation.dart';
part 'seller_info.g.dart';
@JsonSerializable()
class SellerInfoModel extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
SunSellerInfoModel data;
@JsonKey(name: 'msg')
String msg;
SellerInfoModel(
this.ret,
this.data,
this.msg,
);
factory SellerInfoModel.fromJson(Map<String, dynamic> srcJson) =>
_$SellerInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$SellerInfoModelToJson(this);
}
@JsonSerializable()
class SunSellerInfoModel extends Object {
@JsonKey(name: 'seller')
Seller seller;
@JsonKey(name: 'manager')
List<Manager> manager;
@JsonKey(name: 'seller_user')
SellerUser sellerUser;
@JsonKey(name: 'daily')
Daily daily;
@JsonKey(name: 'config')
List<dynamic> config;
@JsonKey(name: 'setting')
Setting setting;
@JsonKey(name: 'scatter')
int scatter;
@JsonKey(name: 'room')
int room;
@JsonKey(name: 'cassette')
int cassette;
SunSellerInfoModel(
this.seller,
this.manager,
this.sellerUser,
this.daily,
this.config,
this.setting,
this.scatter,
this.room,
this.cassette,
);
factory SunSellerInfoModel.fromJson(Map<String, dynamic> srcJson) =>
_$SunSellerInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$SunSellerInfoModelToJson(this);
}
@JsonSerializable()
class Seller extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'sellername')
String sellername;
@JsonKey(name: 'selleralias')
String selleralias;
@JsonKey(name: 'seller_image')
String sellerImage;
@JsonKey(name: 'map_address')
String mapAddress;
@JsonKey(name: 'is_call_tel')
String isCallTel;
@JsonKey(name: 'daily')
String daily;
@JsonKey(name: 'lat')
String lat;
@JsonKey(name: 'long')
String long;
@JsonKey(name: 'is_sms')
String isSms;
@JsonKey(name: 'is_open_order')
String isOpenOrder;
@JsonKey(name: 'is_open_wine')
String isOpenWine;
Seller(
this.id,
this.sellername,
this.selleralias,
this.sellerImage,
this.mapAddress,
this.isCallTel,
this.daily,
this.lat,
this.long,
this.isSms,
this.isOpenOrder,
this.isOpenWine,
);
factory Seller.fromJson(Map<String, dynamic> srcJson) =>
_$SellerFromJson(srcJson);
Map<String, dynamic> toJson() => _$SellerToJson(this);
}
@JsonSerializable()
class Manager extends Object {
@JsonKey(name: 'role_name')
String roleName;
@JsonKey(name: 'id')
dynamic id;
@JsonKey(name: 'sellerid')
dynamic sellerid;
@JsonKey(name: 'openid')
String openid;
@JsonKey(name: 'receipt_code')
String receiptCode;
@JsonKey(name: 'user_name')
String userName;
@JsonKey(name: 'cdate')
String cdate;
@JsonKey(name: 'status')
dynamic status;
@JsonKey(name: 'is_first')
dynamic isFirst;
@JsonKey(name: 'disting')
dynamic disting;
@JsonKey(name: 'code')
dynamic code;
@JsonKey(name: 'uid')
dynamic uid;
@JsonKey(name: 'nick_name')
String nickName;
Manager(
this.roleName,
this.id,
this.sellerid,
this.openid,
this.receiptCode,
this.userName,
this.cdate,
this.status,
this.isFirst,
this.disting,
this.code,
this.uid,
this.nickName,
);
factory Manager.fromJson(Map<String, dynamic> srcJson) =>
_$ManagerFromJson(srcJson);
Map<String, dynamic> toJson() => _$ManagerToJson(this);
}
@JsonSerializable()
class SellerUser extends Object {
SellerUser();
factory SellerUser.fromJson(Map<String, dynamic> srcJson) =>
_$SellerUserFromJson(srcJson);
Map<String, dynamic> toJson() => _$SellerUserToJson(this);
}
@JsonSerializable()
class Daily extends Object {
@JsonKey(name: 'morning')
String morning;
@JsonKey(name: 'noon')
String noon;
@JsonKey(name: 'night')
String night;
Daily(
this.morning,
this.noon,
this.night,
);
factory Daily.fromJson(Map<String, dynamic> srcJson) =>
_$DailyFromJson(srcJson);
Map<String, dynamic> toJson() => _$DailyToJson(this);
@override
String toString() {
return 'Daily{morning: $morning, noon: $noon, night: $night}';
}
}
@JsonSerializable()
class Setting extends Object {
@JsonKey(name: 'template_code')
String templateCode;
Setting(
this.templateCode,
);
factory Setting.fromJson(Map<String, dynamic> srcJson) =>
_$SettingFromJson(srcJson);
Map<String, dynamic> toJson() => _$SettingToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'seller_info.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SellerInfoModel _$SellerInfoModelFromJson(Map<String, dynamic> json) {
return SellerInfoModel(
json['ret'] as int,
json['data'] == null
? null
: SunSellerInfoModel.fromJson(json['data'] as Map<String, dynamic>),
json['msg'] as String);
}
Map<String, dynamic> _$SellerInfoModelToJson(SellerInfoModel instance) =>
<String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg
};
SunSellerInfoModel _$SunSellerInfoModelFromJson(Map<String, dynamic> json) {
return SunSellerInfoModel(
json['seller'] == null
? null
: Seller.fromJson(json['seller'] as Map<String, dynamic>),
(json['manager'] as List)
?.map((e) =>
e == null ? null : Manager.fromJson(e as Map<String, dynamic>))
?.toList(),
json['seller_user'] == null
? null
: SellerUser.fromJson(json['seller_user'] as Map<String, dynamic>),
json['daily'] == null
? null
: Daily.fromJson(json['daily'] as Map<String, dynamic>),
json['config'] as List,
json['setting'] == null
? null
: Setting.fromJson(json['setting'] as Map<String, dynamic>),
json['scatter'] as int,
json['room'] as int,
json['cassette'] as int);
}
Map<String, dynamic> _$SunSellerInfoModelToJson(SunSellerInfoModel instance) =>
<String, dynamic>{
'seller': instance.seller,
'manager': instance.manager,
'seller_user': instance.sellerUser,
'daily': instance.daily,
'config': instance.config,
'setting': instance.setting,
'scatter': instance.scatter,
'room': instance.room,
'cassette': instance.cassette
};
Seller _$SellerFromJson(Map<String, dynamic> json) {
return Seller(
json['id'] as String,
json['sellername'] as String,
json['selleralias'] as String,
json['seller_image'] as String,
json['map_address'] as String,
json['is_call_tel'] as String,
json['daily'] as String,
json['lat'] as String,
json['long'] as String,
json['is_sms'] as String,
json['is_open_order'] as String,
json['is_open_wine'] as String);
}
Map<String, dynamic> _$SellerToJson(Seller instance) => <String, dynamic>{
'id': instance.id,
'sellername': instance.sellername,
'selleralias': instance.selleralias,
'seller_image': instance.sellerImage,
'map_address': instance.mapAddress,
'is_call_tel': instance.isCallTel,
'daily': instance.daily,
'lat': instance.lat,
'long': instance.long,
'is_sms': instance.isSms,
'is_open_order': instance.isOpenOrder,
'is_open_wine': instance.isOpenWine
};
Manager _$ManagerFromJson(Map<String, dynamic> json) {
return Manager(
json['role_name'] as String,
json['id'],
json['sellerid'],
json['openid'] as String,
json['receipt_code'] as String,
json['user_name'] as String,
json['cdate'] as String,
json['status'],
json['is_first'],
json['disting'],
json['code'],
json['uid'],
json['nick_name'] as String);
}
Map<String, dynamic> _$ManagerToJson(Manager instance) => <String, dynamic>{
'role_name': instance.roleName,
'id': instance.id,
'sellerid': instance.sellerid,
'openid': instance.openid,
'receipt_code': instance.receiptCode,
'user_name': instance.userName,
'cdate': instance.cdate,
'status': instance.status,
'is_first': instance.isFirst,
'disting': instance.disting,
'code': instance.code,
'uid': instance.uid,
'nick_name': instance.nickName
};
SellerUser _$SellerUserFromJson(Map<String, dynamic> json) {
return SellerUser();
}
Map<String, dynamic> _$SellerUserToJson(SellerUser instance) =>
<String, dynamic>{};
Daily _$DailyFromJson(Map<String, dynamic> json) {
return Daily(json['morning'] as String, json['noon'] as String,
json['night'] as String);
}
Map<String, dynamic> _$DailyToJson(Daily instance) => <String, dynamic>{
'morning': instance.morning,
'noon': instance.noon,
'night': instance.night
};
Setting _$SettingFromJson(Map<String, dynamic> json) {
return Setting(json['template_code'] as String);
}
Map<String, dynamic> _$SettingToJson(Setting instance) =>
<String, dynamic>{'template_code': instance.templateCode};
... ...
import 'package:json_annotation/json_annotation.dart';
part 'sms_info.g.dart';
@JsonSerializable()
class SmsInfo extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
SmsInfoData data;
@JsonKey(name: 'msg')
String msg;
SmsInfo(
this.ret,
this.data,
this.msg,
);
factory SmsInfo.fromJson(Map<String, dynamic> srcJson) =>
_$sms_infoFromJson(srcJson);
Map<String, dynamic> toJson() => _$sms_infoToJson(this);
}
@JsonSerializable()
class SmsInfoData extends Object {
@JsonKey(name: 'last_num')
String lastNum;
@JsonKey(name: 'meals')
List<Meals> meals;
SmsInfoData(
this.lastNum,
this.meals,
);
factory SmsInfoData.fromJson(Map<String, dynamic> srcJson) =>
_$DataFromJson(srcJson);
Map<String, dynamic> toJson() => _$DataToJson(this);
}
@JsonSerializable()
class Meals extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'package_name')
String packageName;
@JsonKey(name: 'total')
String total;
@JsonKey(name: 'price_ave')
String priceAve;
@JsonKey(name: 'price_old')
String priceOld;
@JsonKey(name: 'price')
String price;
@JsonKey(name: 'discount')
String discount;
Meals(
this.id,
this.packageName,
this.total,
this.priceAve,
this.priceOld,
this.price,
this.discount,
);
factory Meals.fromJson(Map<String, dynamic> srcJson) =>
_$MealsFromJson(srcJson);
Map<String, dynamic> toJson() => _$MealsToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'sms_info.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SmsInfo _$sms_infoFromJson(Map<String, dynamic> json) {
return SmsInfo(
json['ret'] as int,
json['data'] == null
? null
: SmsInfoData.fromJson(json['data'] as Map<String, dynamic>),
json['msg'] as String);
}
Map<String, dynamic> _$sms_infoToJson(SmsInfo instance) => <String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg
};
SmsInfoData _$DataFromJson(Map<String, dynamic> json) {
return SmsInfoData(
json['last_num'] as String,
(json['meals'] as List)
?.map((e) =>
e == null ? null : Meals.fromJson(e as Map<String, dynamic>))
?.toList());
}
Map<String, dynamic> _$DataToJson(SmsInfoData instance) =>
<String, dynamic>{'last_num': instance.lastNum, 'meals': instance.meals};
Meals _$MealsFromJson(Map<String, dynamic> json) {
return Meals(
json['id'] as String,
json['package_name'] as String,
json['total'] as String,
json['price_ave'] as String,
json['price_old'] as String,
json['price'] as String,
json['discount'] as String);
}
Map<String, dynamic> _$MealsToJson(Meals instance) => <String, dynamic>{
'id': instance.id,
'package_name': instance.packageName,
'total': instance.total,
'price_ave': instance.priceAve,
'price_old': instance.priceOld,
'price': instance.price,
'discount': instance.discount
};
... ...
... ... @@ -4,84 +4,92 @@ part 'table.g.dart';
@JsonSerializable()
class Table {
Table();
Table();
String id; //主键id
String rid; //关联区域id
String tid; //桌位类型 1散座 2包间 3卡座
String name; //桌位名称
String table_pnum; //桌位最少可做人数
String most_pnum; //桌位最多可做人数
String order_o; //桌位排序编号
String status; //桌位状态 0未使用 1使用中 2已删除
String tablestatus; //桌位状态 0未使用 1使用中 2已删除
String enable; //0禁用 1启用
String spell; //1拼桌
String rname; //关联区域名称
String max; //最多可做人数
String low; //最低消费
String sign; //标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
String reserver; //订餐人
String notebookId; //桌位对应的预订id
bool selected; //是否选中
String id;//主键id
String rid;//关联区域id
String tid;//桌位类型 1散座 2包间 3卡座
String name;//桌位名称
String table_pnum;//桌位最少可做人数
String most_pnum;//桌位最多可做人数
String order_o;//桌位排序编号
String status;//桌位状态 0未使用 1使用中 2已删除
String tablestatus;//桌位状态 0未使用 1使用中 2已删除
String enable;//0禁用 1启用
String spell;//1拼桌
String rname;//关联区域名称
String max;//最多可做人数
String low;//最低消费
String sign;//标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
String reserver;//订餐人
String notebookId;//桌位对应的预订id
bool selected;//是否选中
//获取桌位类型
String get tidStr{
switch(tid){
case "1":
return "散座";
case "2":
return "包间";
case "3":
return "卡座";
}
//获取桌位类型
String get tidStr {
switch (tid) {
case "1":
return "散座";
case "2":
return "包间";
case "3":
return "卡座";
}
}
//获取桌位可坐人数
String get tableNum{
if(max!=null){
return "最多可坐$max人";
}else if(table_pnum==null){
return "";
}else{
if(table_pnum==most_pnum){
return "$table_pnum人";
}else{
return "$table_pnum-$most_pnum人";
}
}
String get maxText {
if (max == null || max == "0" || max == "null") {
return "";
} else {
return "最多可坐" + max + "人";
}
}
//获取最低消费
String get lowStr{
return low==null?"":"最低消费$low元";
//获取桌位可坐人数
String get tableNum {
if (table_pnum == null || table_pnum.isEmpty || table_pnum == "0") {
return "";
} else if (most_pnum != null &&
most_pnum.isNotEmpty &&
most_pnum != "0" &&
most_pnum != "null") {
if (table_pnum == most_pnum) {
return "$table_pnum人";
} else {
return "$table_pnum-$most_pnum人";
}
} else {
return "$table_pnum人";
}
}
//获取最低消费
String get lowStr {
return (low == null || low.isEmpty || low == "0") ? "" : "最低消费\n$low元";
}
String get signStr{
if(enable=="0")return "已停用";
if(sign!=null){
switch(sign){
case "1"://已预订
case "5"://已安排包间
return "已预订";
case "2"://用餐中
return "用餐中";
default:
return "";
}
}
return "";
String get signStr {
if (sign != null&&sign.isNotEmpty) {
switch (sign) {
case "1": //已预订
case "5": //已安排包间
return "已预订";
case "2": //用餐中
return "用餐中";
default:
return "";
}
}
if (enable == "0") return "已停用";
return "";
}
factory Table.fromJson(Map<String,dynamic> json) => _$TableFromJson(json);
Map<String, dynamic> toJson() => _$TableToJson(this);
factory Table.fromJson(Map<String, dynamic> json) => _$TableFromJson(json);
Map<String, dynamic> toJson() => _$TableToJson(this);
@override
String toString() {
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}';
}
@override
String toString() {
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}';
}
}
... ...
... ... @@ -22,10 +22,10 @@ Table _$TableFromJson(Map<String, dynamic> json) {
..rname = json['rname'] as String
..max = json['max'] as String
..low = json['low'] as String
..sign=json['sign'] as String
..reserver=json['reserver'] as String
..notebookId=json['notebookId'] as String
..selected=json["selected"] as bool;
..sign = json['sign'] as String
..reserver = json['reserver'] as String
..notebookId = json['notebookId'] as String
..selected = json['selected'] as bool;
}
Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{
... ... @@ -43,9 +43,8 @@ Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{
'rname': instance.rname,
'max': instance.max,
'low': instance.low,
'sign':instance.sign,
'reserver':instance.reserver,
'notebookId':instance.notebookId,
'selected':instance.selected
'sign': instance.sign,
'reserver': instance.reserver,
'notebookId': instance.notebookId,
'selected': instance.selected
};
... ...
import 'package:json_annotation/json_annotation.dart';
part 'table_list.g.dart';
@JsonSerializable()
class TableListModel extends Object {
@JsonKey(name: 'ret')
int ret;
@JsonKey(name: 'data')
List<TableListSunModel> data;
@JsonKey(name: 'msg')
String msg;
TableListModel(
this.ret,
this.data,
this.msg,
);
factory TableListModel.fromJson(Map<String, dynamic> srcJson) =>
_$TableListModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$TableListModelToJson(this);
}
@JsonSerializable()
class TableListSunModel extends Object {
@JsonKey(name: 'name')
String name;
@JsonKey(name: 'list')
List<TableList> list;
TableListSunModel(
this.name,
this.list,
);
factory TableListSunModel.fromJson(Map<String, dynamic> srcJson) =>
_$TableListSunModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$TableListSunModelToJson(this);
}
@JsonSerializable()
class TableList extends Object {
@JsonKey(name: 'id')
String id;
@JsonKey(name: 'rid')
String rid;
@JsonKey(name: 'sellerid')
String sellerid;
@JsonKey(name: 'name')
String name;
@JsonKey(name: 'qrcode')
String qrcode;
@JsonKey(name: 'table_pnum')
String tablePnum;
@JsonKey(name: 'most_pnum')
String mostPnum;
@JsonKey(name: 'tid')
String tid;
@JsonKey(name: 'hot')
String hot;
@JsonKey(name: 'order_o')
String orderO;
@JsonKey(name: 'status')
String status;
@JsonKey(name: 'enable')
String enable;
@JsonKey(name: 'spell')
String spell;
@JsonKey(name: 'cdate')
String cdate;
@JsonKey(name: 'rname')
String rname;
@JsonKey(name: 'region_name')
String regionName;
String table_pnum; //桌位最少可做人数
String most_pnum; //桌位最多可做人数
String low; //最低消费
//获取桌位类型
String get tidStr {
switch (tid) {
case "1":
return "散座";
case "2":
return "包间";
case "3":
return "卡座";
}
}
String reserver; //订餐人
// String notebookId; //桌位对应的预订id
bool selected = false; //是否选中
// String max; //最多可做人数
String sign; //标签 桌位状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
// String get maxText {
// if (max == null || max == "0" || max == "null") {
// return "";
// } else {
// return "最多可坐" + max + "人";
// }
// }
//获取桌位可坐人数
String get tableNum {
if (table_pnum == null || table_pnum.isEmpty || table_pnum == "0") {
return "";
} else if (most_pnum != null &&
most_pnum.isNotEmpty &&
most_pnum != "0" &&
most_pnum != "null") {
if (table_pnum == most_pnum) {
return "$table_pnum人";
} else {
return "$table_pnum-$most_pnum人";
}
} else {
return "$table_pnum人";
}
}
//获取最低消费
String get lowStr {
return (low == null || low.isEmpty || low == "0") ? "" : "最低消费\n$low元";
}
String get signStr {
if (enable == "0") return "已停用";
if (sign != null) {
switch (sign) {
case "1": //已预订
case "5": //已安排包间
return "已预订";
case "2": //用餐中
return "用餐中";
default:
return "";
}
}
return "";
}
TableList(
this.id,
this.rid,
this.sellerid,
this.name,
this.qrcode,
this.tablePnum,
this.mostPnum,
this.tid,
this.hot,
this.orderO,
this.status,
this.enable,
this.spell,
this.cdate,
this.rname,this.regionName);
factory TableList.fromJson(Map<String, dynamic> srcJson) =>
_$TableListFromJson(srcJson);
Map<String, dynamic> toJson() => _$TableListToJson(this);
}
... ...
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'table_list.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
TableListModel _$TableListModelFromJson(Map<String, dynamic> json) {
return TableListModel(
json['ret'] as int,
(json['data'] as List)
?.map((e) => e == null
? null
: TableListSunModel.fromJson(e as Map<String, dynamic>))
?.toList(),
json['msg'] as String);
}
Map<String, dynamic> _$TableListModelToJson(TableListModel instance) =>
<String, dynamic>{
'ret': instance.ret,
'data': instance.data,
'msg': instance.msg
};
TableListSunModel _$TableListSunModelFromJson(Map<String, dynamic> json) {
return TableListSunModel(
json['name'] as String,
(json['list'] as List)
?.map((e) =>
e == null ? null : TableList.fromJson(e as Map<String, dynamic>))
?.toList());
}
Map<String, dynamic> _$TableListSunModelToJson(TableListSunModel instance) =>
<String, dynamic>{'name': instance.name, 'list': instance.list};
TableList _$TableListFromJson(Map<String, dynamic> json) {
return TableList(
json['id'] as String,
json['rid'] as String,
json['sellerid'] as String,
json['name'] as String,
json['qrcode'] as String,
json['table_pnum'] as String,
json['most_pnum'] as String,
json['tid'] as String,
json['hot'] as String,
json['order_o'] as String,
json['status'] as String,
json['enable'] as String,
json['spell'] as String,
json['cdate'] as String,
json['rname'] as String,
json['region_name'] as String);
}
Map<String, dynamic> _$TableListToJson(TableList instance) => <String, dynamic>{
'id': instance.id,
'rid': instance.rid,
'sellerid': instance.sellerid,
'name': instance.name,
'qrcode': instance.qrcode,
'table_pnum': instance.tablePnum,
'most_pnum': instance.mostPnum,
'tid': instance.tid,
'hot': instance.hot,
'order_o': instance.orderO,
'status': instance.status,
'enable': instance.enable,
'spell': instance.spell,
'cdate': instance.cdate,
'rname': instance.rname,
'region_name': instance.regionName
};
... ...
/**
* 更新版本
*/
class Version{
String name;//更新版本号
String version;//构建版本号
String file_url;//安装包下载地址
String content;//更新内容
Version();
factory Version.fromJson(Map<String,dynamic> json)=>Version()..name=json["name"]..version=json["version"]..file_url=json["file_url"]..content=json["content"];
Map<String,dynamic> toJson()=><String,dynamic>{name:"name","version":version,"file_url":file_url,"content":content};
}
\ No newline at end of file
... ...
... ... @@ -6,8 +6,9 @@ class BaseResp<T> {
int code;
String msg;
T data;
Map responseData;
BaseResp(this.status, this.code, this.msg, this.data);
BaseResp(this.status, this.code, this.msg, this.data,this.responseData);
@override
String toString() {
... ...
... ... @@ -3,11 +3,12 @@ import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/loading.dart';
import 'base_resp.dart';
/**
* @Author: thl
* @GitHub: https://github.com/Sky24n
... ... @@ -165,58 +166,83 @@ class DioUtil {
/// [data] The request data
/// [options] The request options.
/// <BaseResp<T> 返回 status code msg data .
Future<BaseResp<T>> request<T>(BuildContext context,String method, String path,
{data, Options options, CancelToken cancelToken,bool showLoading=true}) async {
if(showLoading)Loading.showLoading(context);
Response response = await _dio.request(path,
data: data,
options: _checkOptions(method, options),
cancelToken: cancelToken);
_printHttpLog(response);
String _status;
int _code;
String _msg;
T _data;
if (response.statusCode == HttpStatus.ok ||
response.statusCode == HttpStatus.created) {
try {
if (response.data is Map) {
_status = (response.data[_statusKey] is int)
? response.data[_statusKey].toString()
: response.data[_statusKey];
_code = (response.data[_codeKey] is String)
? int.tryParse(response.data[_codeKey])
: response.data[_codeKey];
_msg = response.data[_msgKey];
_data = response.data[_dataKey];
} else {
Map<String, dynamic> _dataMap = _decodeData(response);
_status = (_dataMap[_statusKey] is int)
? _dataMap[_statusKey].toString()
: _dataMap[_statusKey];
_code = (_dataMap[_codeKey] is String)
? int.tryParse(_dataMap[_codeKey])
: _dataMap[_codeKey];
_msg = _dataMap[_msgKey];
_data = _dataMap[_dataKey];
Future<BaseResp<T>> request<T>(
BuildContext context, String method, String path,
{data,
Options options,
CancelToken cancelToken,
bool showLoading = true}) async {
bool connectivity = await Utils.checkConnectiviy();
if (!connectivity) {
// Utils.showToast("网络错误,请稍后重试");
throw MyError(type: 1);
}
if (showLoading) Loading.showLoading(context);
try {
print('--------' + path + '---------');
Response response = await _dio.request(path,
data: data,
options: _checkOptions(method, options),
cancelToken: cancelToken);
_printHttpLog(response);
String _status;
int _code;
String _msg;
T _data;
Map _responseData;
if (response.statusCode == HttpStatus.ok ||
response.statusCode == HttpStatus.created) {
try {
if (response.data is Map) {
_status = (response.data[_statusKey] is int)
? response.data[_statusKey].toString()
: response.data[_statusKey];
_code = (response.data[_codeKey] is String)
? int.tryParse(response.data[_codeKey])
: response.data[_codeKey];
_msg = response.data[_msgKey];
_data = response.data[_dataKey];
_responseData = response.data;
} else {
Map<String, dynamic> _dataMap = _decodeData(response);
_status = (_dataMap[_statusKey] is int)
? _dataMap[_statusKey].toString()
: _dataMap[_statusKey];
_code = (_dataMap[_codeKey] is String)
? int.tryParse(_dataMap[_codeKey])
: _dataMap[_codeKey];
_msg = _dataMap[_msgKey];
_data = _dataMap[_dataKey];
_responseData = _dataMap;
}
Loading.hideLoading(context);
return new BaseResp(_status, _code, _msg, _data, _responseData);
} catch (e) {
Loading.hideLoading(context);
return new Future.error(new DioError(
response: response,
message: "data parsing exception...",
type: DioErrorType.RESPONSE,
));
}
}
Loading.hideLoading(context);
return new Future.error(new DioError(
response: response,
message: "statusCode: $response.statusCode, service error",
type: DioErrorType.RESPONSE,
));
} on DioError catch (error) {
if (showLoading) {
Loading.hideLoading(context);
return new BaseResp(_status, _code, _msg, _data);
} catch (e) {
Loading.hideLoading(context);
return new Future.error(new DioError(
response: response,
message: "data parsing exception...",
type: DioErrorType.RESPONSE,
));
}
if (error is DioError && error.type == DioErrorType.CONNECT_TIMEOUT) {
// Utils.showToast("网络链接超时,请稍后重试");
}
if (error.type != DioErrorType.CANCEL) {
throw MyError(type: 2);
}
}
Loading.hideLoading(context);
return new Future.error(new DioError(
response: response,
message: "statusCode: $response.statusCode, service error",
type: DioErrorType.RESPONSE,
));
}
/// Make http request with options.
... ... @@ -387,8 +413,8 @@ class DioUtil {
Options options = new Options();
options.contentType =
ContentType.parse("application/x-www-form-urlencoded");
options.connectTimeout = 1000 * 30;
options.receiveTimeout = 1000 * 30;
options.connectTimeout = 1000 * 10; //默认10s
options.receiveTimeout = 1000 * 10; //默认10s
return options;
}
}
... ...
class HttpUrl{
static const String server_address = "https://xt04.colorcun.com/";//服务端请求地址
static const String app_user_login="?service=Android.User.AppUserLogin";//登录地址
static const String user_token_init="?service=Android.User.UserTokenInit";//初始化推送token
static const String sellerinfo="?service=Android.Reserve.SellerInfo";//获取商家信息
static const String login_out="?service=Android.User.AppLoginOut";//退出登录
static const String get_message_list="?service=Android.Reserve.GetMessageList";//获取消息列表
static const String get_reserve_list="?service=Android.Reserve.NewGetReserveList";//获取已预订列表
static const String reserve_count_day="?service=Android.Reserve.NewReservesCountDay";//获取一天订单统计数目
static const String reserve_detail="?service=Android.Reserve.Detail";//订单详情
static const String set_reserve_cusman="?service=Android.Reserve.SetReserveCusman";//设置客户经理
static const String table_list="?service=Android.Tables.GetTableListsBySellerId";//桌位列表
static const String set_reserve_status="?service=Android.Customer.SetReserveStatus";//设置订单状态
static const String set_message_status="?service=Android.Advance.SetMessageStatus";//设置消息状态
static const String get_sms_content="?service=App.SendSMS.GetSmsContent";//获取短信内容
static const String send_sms="?service=App.SendSMS.NewMessage";//发送短信
}
\ No newline at end of file
class HttpUrl {
static const String server_address = "https://xt04.colorcun.com/"; //服务端请求地址
static const String app_user_login =
"?service=Android.User.AppUserLogin"; //登录地址
static const String user_token_init =
"?service=Android.User.UserTokenInit"; //初始化推送token
static const String sellerinfo =
"?service=Android.Reserve.SellerInfo"; //获取商家信息
static const String login_out = "?service=Android.User.AppLoginOut"; //退出登录
static const String get_message_list =
"?service=Android.Reserve.GetMessageList"; //获取消息列表
static const String get_reserve_list =
"?service=Android.Reserve.NewGetReserveList"; //获取已预订列表
static const String reserve_count_day =
"?service=Android.Reserve.NewReservesCountDay"; //获取一天订单统计数目
static const String reserve_detail = "?service=Android.Reserve.Detail"; //订单详情
static const String set_reserve_cusman =
"?service=Android.Reserve.SetReserveCusman"; //设置客户经理
static const String table_list =
"?service=Android.Tables.GetTableListsBySellerId"; //桌位列表
static const String set_reserve_status =
"?service=Android.Customer.SetReserveStatus"; //设置订单状态
static const String set_message_status =
"?service=Android.Advance.SetMessageStatus"; //设置消息状态
static const String get_sms_content =
"?service=App.SendSMS.GetSmsContent"; //获取短信内容
static const String send_sms = "?service=App.SendSMS.NewMessage"; //发送短信
static const String check_update =
"http://xt03.colorcun.com/admin/api/compareversion?flat=3";
static const String upload_contact =
"?service=App.Seller.SaveCallRecord"; //上传通讯录
static const String get_table_list =
"?service=Android.Reserve.NewGetTableList"; //根据商家ID 获取桌位信息列表: 1:散座 2:包间 默认:获取所有数据
static const String set_reserve_info =
"?service=Android.Reserve.SetReserveInfo"; //录入/更改内部预订
static const String set_customer_info =
"?service=Android.Customer.SetReserveInfo"; //更改在线预订
static const String set_switch_status =
"?service=App.Reserve.SetSwitchStatus"; //启用/停用桌位
static const String sms_info = "?service=App.SendSMS.SmsInfo"; //短信余量查询及套餐查询接口
}
... ...
... ... @@ -2,6 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/manager.dart';
import 'package:one_key/models/notebook_detail.dart';
import 'package:one_key/provider/notebook_detail_model.dart';
... ... @@ -13,17 +14,24 @@ import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/app_bar.dart';
import 'package:one_key/widgets/common_button.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/need_item.dart';
import 'package:one_key/widgets/page_exception.dart';
import 'package:one_key/widgets/row_multi_text.dart';
import 'package:one_key/widgets/table_item.dart';
import 'package:one_key/models/table.dart' as t;
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import 'package:one_key/utils/event_bus.dart';
class HandleOnlinePage extends StatefulWidget {
import '../../app.dart';
class HandleOnlinePage extends StatefulWidget {
final String rid;
final String mid;
HandleOnlinePage(this.rid,this.mid);
final bool fromNotify;
HandleOnlinePage(this.rid, this.mid, {this.fromNotify = false});
@override
State<StatefulWidget> createState() {
... ... @@ -32,282 +40,648 @@ class HandleOnlinePage extends StatefulWidget {
}
}
class HandleOnlinePageState extends State<HandleOnlinePage> {
NotebookDetailModel detailModel= NotebookDetailModel();
NotebookDetailModel detailModel;
NotebookDetail detailEntity;
String cusmanText="";
String cusmanText = "";
List<Manager> managers = []; //客户经理
Manager manager = Manager();
bool isCallTel = false;
List<Manager> managers=[];//客户经理
String formatPhone = ""; //格式客户号码
Manager manager=Manager();
bool isRefused = false; //是否已拒绝
bool isPause = false; //是否暂停预订
StateSetter refuseDialogState; //决绝弹框setState
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
detailEntity=await detailModel.getReserveDetail(context, {
"rid":widget.rid,
});
if(detailEntity.status!="0"){//已处理
setMessageStatus();
NavigatorUtil.goNotebookDetailPage(context, detailEntity.id,replace: true);
}else{
setState(() {//未处理
cusmanText=detailEntity.cusman.isEmpty?"请选择":detailEntity.cusman;
});
managers=await detailModel.getManagers(context);
WidgetsBinding.instance.addPostFrameCallback((_) {
_getOrderListData();
});
}
/// 获取当前预订订单详情
_getOrderListData() async {
detailEntity = await detailModel.getReserveDetail(context, {
"rid": widget.rid,
});
setState(() {
//未处理
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
formatPhone = detailEntity.phone;
if (App.sp.getString("is_call_tel") != null &&
App.sp.getString("is_call_tel") == "1") {
isCallTel = true;
} else {
isCallTel = false;
if (detailEntity.phone.isNotEmpty &&
detailEntity.phone.length == 11 &&
(detailEntity.status == "0" || detailEntity.status == "6")) {
formatPhone = detailEntity.phone.substring(0, 3) +
"****" +
detailEntity.phone.substring(7);
}
}
});
if (detailEntity.status != "0" && !isPause) {
//已处理
Future.delayed(Duration(milliseconds: 200), () {
NavigatorUtil.goNotebookDetailPage(context, detailEntity.id,
fromNotify: widget.fromNotify, replace: true);
});
setMessageStatus();
} else {
managers = await detailModel.getManagers(context);
}
}
//设置当前客户经理
_setCurrManager(){
manager=managers.firstWhere((manager)=>manager.userName==cusmanText,orElse: ()=>Manager());
if(manager.id==null||manager.id.toString().isEmpty)return;
Map<String,String> params={
"rid":detailEntity.id,
"cusman_id":manager.id.toString(),
"cusman":manager.userName
_setCurrManager() {
manager = managers.firstWhere((manager) => manager.userName == cusmanText,
orElse: () => Manager());
if (manager.id == null || manager.id.toString().isEmpty) return;
Map<String, String> params = {
"rid": detailEntity.id,
"cusman_id": manager.id.toString(),
"cusman": manager.userName
};
detailModel.setReserveCusmnan(context, params);
}
//拒绝订单弹框
_showRefuseDialog(){
showDialog(context: context,builder: (context){
return AlertDialog(
title: Text("确定拒绝订单吗?\n拒绝后无法联系客户"),
titleTextStyle: TextStyle(color: MyColours.color_353535,fontSize: ScreenUtil().setSp(26)),
content: Text("如果包间类型订满,请及时停用"),
contentTextStyle:TextStyle(color: MyColours.color_828282,fontSize: ScreenUtil().setSp(22)),
actions: <Widget>[
FlatButton(
child: Text("拒绝订单"),
onPressed: (){
Navigator.of(context).pop();
setReserveStatus("6");
},
_showRefuseDialog2() {
Widget dialogContent = StatefulBuilder(
builder: (context, setState) {
refuseDialogState = setState;
Container container = Container(
child: Stack(
alignment: AlignmentDirectional.topCenter,
children: [
Positioned(
right: 0,
top: ScreenUtil().setWidth(6),
child: GestureDetector(
child: Container(
padding: EdgeInsets.all(ScreenUtil().setWidth(21)),
child: Image.asset(
"assets/close.png",
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28),
),
),
onTap: () {
Navigator.of(context).pop();
},
),
),
Offstage(
offstage: isRefused,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
VEmptyView(40),
Text(
"拒绝订单",
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_353535,
fontWeight: FontWeight.bold),
),
VEmptyView(60),
Text(
"确定要拒绝订单吗?一旦拒绝无法恢复。",
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_353535),
),
VEmptyView(80),
GestureDetector(
onTap: () {
setReserveStatus("6", ac: "1");
},
child: Container(
width: ScreenUtil().setWidth(336),
height: ScreenUtil().setWidth(80),
alignment: Alignment.center,
color: MyColours.color_199095,
child: Text(
"拒绝并暂停预订",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_ffffff),
),
),
),
VEmptyView(20),
GestureDetector(
onTap: () {
Navigator.of(context).pop();
setReserveStatus("6");
},
child: Container(
width: ScreenUtil().setWidth(336),
height: ScreenUtil().setWidth(80),
alignment: Alignment.center,
decoration: BoxDecoration(
color: MyColours.color_ffffff,
border: Border.all(
color: MyColours.color_199095,
width: ScreenUtil().setWidth(2))),
child: Text(
"直接拒绝",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_199095),
),
),
),
VEmptyView(20),
GestureDetector(
onTap: () async {
Navigator.of(context).pop();
Map temp = await NavigatorUtil.goSelectTablePage(
context,
widget.rid,
int.parse(detailEntity.ddate) * 1000,
detailEntity.ddate_solt);
if (temp != null && temp['tid'] != null) {
setReserveStatus("5", tid: temp['tid']);
}
},
child: Container(
width: ScreenUtil().setWidth(336),
height: ScreenUtil().setWidth(80),
alignment: Alignment.center,
color: MyColours.color_ffffff,
child: Text(
"去安排包间",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_199095),
),
),
),
VEmptyView(44),
],
),
),
Offstage(
offstage: !isRefused,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
VEmptyView(98),
Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Image.asset(
"assets/icon_refuse_book.png",
width: ScreenUtil().setWidth(56),
height: ScreenUtil().setWidth(56),
),
HEmptyView(10),
Text(
"订单已拒绝",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
)
],
),
Offstage(
offstage: !isPause,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
VEmptyView(20),
Text(
"并已将${detailEntity.ddateMd}的${detailEntity.demandStr}置满",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_353535),
),
],
),
),
VEmptyView(120),
Text(
"如果有包间空出来或其他包间也满了,你可以:",
style: TextStyle(
fontSize: ScreenUtil().setSp(26),
color: MyColours.color_353535),
),
VEmptyView(20),
GestureDetector(
onTap: () {
Utils.goMiniProgramZm(context, "roomtype/roomtype");
},
child: Container(
width: ScreenUtil().setWidth(336),
height: ScreenUtil().setWidth(80),
alignment: Alignment.center,
color: MyColours.color_199095,
child: Text(
"去管理包间",
style: TextStyle(
fontSize: ScreenUtil().setSp(34),
color: MyColours.color_ffffff),
),
),
),
VEmptyView(60)
],
),
)
],
),
FlatButton(
child: Text("去安排"),
onPressed: () async {
Navigator.of(context).pop();
String tid=await NavigatorUtil.goSelectTablePage(context,widget.rid,DateTime.fromMillisecondsSinceEpoch(int.parse(detailEntity.ddate)*1000),detailEntity.ddate_solt);
setReserveStatus("5",tid:tid);
},
)
],
);
});
);
return container;
},
);
Widget dialog = Container(
width: double.infinity,
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ScreenUtil().setWidth(40)),
topRight: Radius.circular(ScreenUtil().setWidth(40)))),
child: dialogContent);
showModalBottomSheet(
context: context,
backgroundColor: Colors.transparent,
builder: (context) {
return Stack(
children: <Widget>[dialog],
);
});
}
//处理在线预订
setReserveStatus(String status,{String tid=""}){
UserModel userModel=Provider.of<UserModel>(context,listen: false);
Map<String,String> causeMap={
"uid":userModel.user.openid,
"uname":userModel.user.account,
"desc":"",
setReserveStatus(String status, {String tid = "", String ac = ""}) async {
bus.emit("remove_untreated_message", widget.mid);
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> causeMap = {
"uid": userModel.user.openid,
"uname": userModel.user.account,
"desc": "",
};
Map<String,String> params={
"rid":widget.rid,
"status":status,//5安排包间 6 拒绝订单
"tid":tid,
"mid":widget.mid,
"cause":json.encode(causeMap)
Map<String, String> params = {
"rid": widget.rid,
"status": status, //5安排包间 6 拒绝订单
"tid": tid,
"mid": widget.mid,
"cause": json.encode(causeMap)
};
detailModel.setReserveStatus(context, params);
if (status == "6") {
isPause = true;
params['ac'] = ac; //0=直接拒绝 1=拒绝并暂停预订
}
bool success = await detailModel.setReserveStatus(context, params,
ifPush: (isPause ? false : true), showLoading: true);
if (success != null && success) {
bus.emit("refresh_book_list");
if (status == "6") {
isRefused = true;
}
if (isPause) {
_getOrderListData();
refuseDialogState(() {});
}
}
}
//处理在线预订
setMessageStatus(){
Map<String,String> params={
"sid":Provider.of<UserModel>(context,listen: false).user.sellerid,
"id":widget.mid,
"status":"is_handle"
setMessageStatus() {
bus.emit("remove_untreated_message", widget.mid);
Map<String, String> params = {
"sid": Provider.of<UserModel>(context, listen: false).user.sellerid,
"id": widget.mid,
"status": "is_handle"
};
detailModel.setMessageStatus(context, params);
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return detailEntity==null?Container():SafeArea(
detailModel = Provider.of<NotebookDetailModel>(context, listen: true);
return Scaffold(
body: SafeArea(
child: WillPopScope(
child: Column(
children: <Widget>[
MyAppBar(
"在线预订详情",
showBack: true,
callback: () {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
} else {
Navigator.of(context).pop();
}
},
),
Expanded(
child: DefaultTextStyle(style: TextStyle(decoration: TextDecoration.none), child: Container(
color: MyColours.color_ffffff,
child: SingleChildScrollView(
child: Container(
color: MyColours.color_ffffff,
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(43)),
child: Column(
children: <Widget>[
RowMultiText("用餐时段", detailEntity.ddateMd),
Stack(
alignment: Alignment.center,
children: <Widget>[
Column(
children: <Widget>[
RowMultiText("用餐时间", detailEntity.ddateHm),
Offstage(
offstage: detailEntity.type=="0"?false:true,
child: RowMultiText("用餐人数", detailEntity.pnum),
)
],
),
Image.asset(detailEntity.statuImgAssets,width: ScreenUtil().setWidth(100),height: ScreenUtil().setWidth(30),)
],
),
RowMultiText("包间需求", (detailEntity.demands.length.toString()+"个")??""),
Align(
alignment: Alignment.centerRight,
child: Row(
mainAxisSize: MainAxisSize.min,
children: detailEntity.demands.map((table){
return TableItem(table);
}).toList(),
),
),
RowMultiText("客户姓名", detailEntity.rnameStr),
RowMultiText("客户电话", detailEntity.phone),
MyDivider(double.infinity, ScreenUtil().setHeight(2)),
Container(
Expanded(child: Consumer<NotebookDetailModel>(
builder: (context, model, _) {
if (model.pageState != PageState.Success) {
return ExceptionPage(
pageState: model.pageState,
callback: () {
_getOrderListData();
},
emptyMsg: "暂时没有预订列表信息哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Expanded(
child: DefaultTextStyle(
style: TextStyle(decoration: TextDecoration.none),
child: Container(
color: MyColours.color_ffffff,
width: double.infinity,
height: ScreenUtil().setHeight(80),
padding: EdgeInsets.symmetric(
vertical: ScreenUtil().setHeight(26)),
child: Stack(
alignment: Alignment.center,
children: <Widget>[
Positioned(
left: 0,
child: Text(
"客户经理",
style: TextStyle(
color: MyColours.color_828282,
fontSize: ScreenUtil().setSp(22)),
),
),
Positioned(
right: 0,
child: GestureDetector(
onTap: () async {
List<String> list=[];
for(Manager manager in managers){
list.add(manager.roleUserName);
}
DialogUtil.showSelectCusmanDialog(context,list).then((value){
setState(() {
cusmanText=managers[value.first].userName;
});
_setCurrManager();
});
},
child: Text(
cusmanText,
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(26),
decoration: TextDecoration.underline,
),
),
),
)
],
),
),
MyDivider(double.infinity, ScreenUtil().setHeight(2)),
Container(
margin: EdgeInsets.only(top: ScreenUtil().setHeight(206)),
child: Column(
children: <Widget>[
CommonButton(
content: "安排包间",
width: 669,
height: 76,
fontSize: 26,
onPress: () async {
String tid=await NavigatorUtil.goSelectTablePage(context,widget.rid,DateTime.fromMillisecondsSinceEpoch(int.parse(detailEntity.ddate)*1000),detailEntity.ddate_solt);
if(tid!=null){
setReserveStatus("5",tid:tid);
}
},
),
VEmptyView(20),
Container(
width: ScreenUtil().setWidth(669),
height: ScreenUtil().setHeight(76),
decoration: BoxDecoration(
border: Border.all(color: MyColours.color_199095),
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(5)),
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: GestureDetector(
child: Center(
child: Text(
"拒绝订单",
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(26)),
),
Expanded(
child: SingleChildScrollView(
child: Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
horizontal:
ScreenUtil().setWidth(43)),
child: Column(
children: <Widget>[
RowMultiText(
"用餐时段", detailEntity.ddateMd),
Stack(
alignment: Alignment.center,
children: <Widget>[
Column(
children: <Widget>[
RowMultiText("用餐时间",
detailEntity.ddateHm),
Offstage(
offstage:
detailEntity.type == "0"
? false
: true,
child: RowMultiText("用餐人数",
detailEntity.pnum),
)
],
),
Image.asset(
detailEntity.statuImgAssets,
width:
ScreenUtil().setWidth(100),
height:
ScreenUtil().setWidth(30),
)
],
),
onTap: () {
_showRefuseDialog();
},
)),
MyDivider(
ScreenUtil().setWidth(1),
ScreenUtil().setHeight(52),
color: MyColours.color_199095,
),
Expanded(
child: GestureDetector(
child: Center(
child: Text(
"联系顾客",
style: TextStyle(
color: MyColours.color_199095,
fontSize: ScreenUtil().setSp(26)),
RowMultiText(
"包间需求",
(detailEntity.demands.length
.toString() +
"个") ??
""),
Align(
alignment: Alignment.centerRight,
child: Offstage(
offstage: detailEntity
.demands.length >
0
? false
: true,
child: Container(
height: ScreenUtil()
.setHeight(210),
child: ListView.builder(
itemBuilder:
(BuildContext contxt,
int index) {
return NeedItem(
detailEntity
.demands[index]);
},
itemCount: detailEntity
.demands.length,
shrinkWrap: true,
scrollDirection:
Axis.horizontal,
),
),
)),
RowMultiText(
"客户姓名", detailEntity.rnameStr),
RowMultiText("客户电话", formatPhone),
RowMultiText("备注信息",
detailEntity.cusdem ?? ""),
MyDivider(double.infinity,
ScreenUtil().setHeight(1)),
Container(
color: MyColours.color_ffffff,
width: double.infinity,
height: ScreenUtil().setHeight(80),
alignment: Alignment.center,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
Positioned(
left: 0,
child: Text(
"客户经理",
style: TextStyle(
color: MyColours
.color_828282,
fontSize: ScreenUtil()
.setSp(30)),
),
),
Positioned(
right: 0,
child: GestureDetector(
onTap: () async {
List<String> list = [];
for (Manager manager
in managers) {
list.add(manager
.roleUserName);
}
DialogUtil
.showSelectCusmanDialog(
context, list,
(value) {
if (value != null) {
setState(() {
cusmanText =
managers[value
.first]
.userName;
});
_setCurrManager();
}
}).then((value) {});
},
child: Text(
cusmanText,
style: TextStyle(
color: MyColours
.color_353535,
fontSize: ScreenUtil()
.setSp(30),
decoration:
TextDecoration
.underline,
),
),
),
)
],
),
),
onTap: () {
if(detailEntity.phone!=null&&detailEntity.phone.isNotEmpty){
Utils.goPhone(detailEntity.phone);
}else{
Utils.showToast("没有客户电话!");
}
},
)),
],
],
)),
),
),
Offstage(
offstage: detailEntity.status != "0",
child: Container(
margin: EdgeInsets.only(
top: ScreenUtil().setHeight(30),
bottom: ScreenUtil().setHeight(30)),
child: Column(
children: <Widget>[
CommonButton(
content: "安排包间",
width: 669,
height: 84,
fontSize: 34,
onPress: () async {
Map map = await NavigatorUtil
.goSelectTablePage(
context,
widget.rid,
int.parse(
detailEntity.ddate) *
1000,
detailEntity.ddate_solt);
if (map != null &&
map['tid'] != null) {
setReserveStatus("5",
tid: map['tid']);
}
},
),
VEmptyView(20),
Container(
width: ScreenUtil().setWidth(669),
height: ScreenUtil().setWidth(84),
decoration: BoxDecoration(
border: Border.all(
color: MyColours.color_199095),
borderRadius: BorderRadius.circular(
ScreenUtil().setWidth(10)),
),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
Expanded(
child: GestureDetector(
child: Center(
child: Text(
"拒绝订单",
style: TextStyle(
color: MyColours
.color_199095,
fontSize: ScreenUtil()
.setSp(34)),
),
),
onTap: () {
_showRefuseDialog2();
},
)),
Offstage(
offstage: !isCallTel,
child: SizedBox(
width:
ScreenUtil().setWidth(335),
height:
ScreenUtil().setWidth(84),
child: Row(
children: [
MyDivider(
ScreenUtil().setWidth(2),
ScreenUtil()
.setHeight(52),
color: MyColours
.color_199095,
),
Expanded(
child: GestureDetector(
child: Center(
child: Text(
"联系顾客",
style: TextStyle(
color: MyColours
.color_199095,
fontSize:
ScreenUtil()
.setSp(
34)),
),
),
onTap: () {
if (detailEntity
.phone !=
null &&
detailEntity.phone
.isNotEmpty) {
Utils.goPhone(
detailEntity
.phone);
} else {
Utils.showToast(
"没有客户电话!");
}
},
)),
],
),
),
)
],
),
)
],
),
),
)
],
),
)
],
)),
),
)),
)
))),
);
}
},
))
],
),
);
onWillPop: () async {
if (widget.fromNotify) {
NavigatorUtil.goHomePage(context, initialIndex: 0);
return true;
}
Navigator.of(context).pop();
return true;
},
)));
}
}
... ...