Browse Source

推送, 分享修改

null_safety
fmk 4 years ago
parent
commit
629e5aacf0
  1. 46
      android/app/build.gradle
  2. 13
      android/app/src/main/AndroidManifest.xml
  3. 107
      android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXEntryActivity.kt
  4. 6
      android/app/src/main/res/xml/jshare_file_provider_paths.xml
  5. 8
      android/build.gradle
  6. 1
      android/gradle.properties
  7. 2
      ios/Flutter/AppFrameworkInfo.plist
  8. 51
      ios/Podfile.lock
  9. 8
      ios/Runner/Info.plist
  10. 8
      lib/generated/intl/messages_all.dart
  11. 2
      lib/generated/l10n.dart
  12. 400
      lib/l10n/intl_zh_Hans_CN.arb
  13. 388
      lib/l10n/intl_zh_Hant_CN.arb
  14. 4
      lib/login/login_page.dart
  15. 20
      lib/main.dart
  16. 4
      lib/setting/setting_page.dart
  17. 159
      lib/ui_test.dart
  18. 56
      lib/union/store_details_page.dart
  19. 6
      lib/view_widget/item_input_widget.dart
  20. 2
      lib/view_widget/mine_vip_view.dart
  21. 3
      lib/view_widget/no_data_view.dart
  22. 6
      lib/view_widget/pay_input_view.dart
  23. 50
      lib/view_widget/round_button.dart
  24. 17
      lib/view_widget/store_title_tab.dart
  25. 302
      pubspec.lock
  26. 3
      pubspec.yaml

46
android/app/build.gradle

@ -25,6 +25,50 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.mob.sdk'
MobSDK {
appKey "m33ee7650da86a"
appSecret "876f2eaebfd2a88c89d5fc294397838c"
ShareSDK {
// platform configuration information
devInfo {
Wechat {
id 4
sortId 4
appId "wx3b269e795ed23e5f"
appSecret "64020361b8ec4c99936c0e3999a9f249"
userName "gh_afb25ac019c9"
path "pages/index/index.html?id=1"
withShareTicket true
miniprogramType 0
bypassApproval false
enable true
}
Facebook {
id 8
sortId 8
appKey "523308712059457"
appSecret "d3a1b6377100871799d8973fbe84794a"
callbackUri "https://mob.com"
shareByAppClient true
enable true
}
Line {
id 2
sortId 2
appKey "1656257249"
appSecret "7f160c9686672a50b5952364a8553f99"
callbackUri "https://mob.com"
callbackscheme "huixiang"
shareByAppClient true
enable true
}
}
}
}
def mfph = [
//宿
@ -97,6 +141,8 @@ android {
}
flutter {
source '../..'
}

13
android/app/src/main/AndroidManifest.xml

@ -78,6 +78,18 @@
<data android:scheme="sdksample" />
</intent-filter>
</activity>
<!-- <activity-->
<!-- android:name="com.zsw.huixiang.wxapi.WXEntryActivity"-->
<!-- android:exported="true"-->
<!-- android:theme="@android:style/Theme.Translucent.NoTitleBar"-->
<!-- android:launchMode="singleTop" >-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.VIEW" />-->
<!-- <category android:name="android.intent.category.DEFAULT" />-->
<!-- <data android:scheme="sdksample" />-->
<!-- </intent-filter>-->
<!-- </activity>-->
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
@ -115,5 +127,6 @@
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

107
android/app/src/main/kotlin/com/zsw/huixiang/wxapi/WXEntryActivity.kt

@ -1,18 +1,11 @@
package com.zsw.huixiang.wxapi
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import com.jarvan.fluwx.handlers.FluwxResponseHandler
import com.jarvan.fluwx.handlers.FluwxRequestHandler
import com.jarvan.fluwx.handlers.WXAPiHandler
import com.tencent.mm.opensdk.modelbase.BaseReq
import com.tencent.mm.opensdk.modelbase.BaseResp
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler
import io.dcloud.feature.payment.weixin.AbsWXPayCallbackActivity
import io.flutter.Log
class WXEntryActivity : Activity(), IWXAPIEventHandler {
class WXEntryActivity : AbsWXPayCallbackActivity() {
// IWXAPI 是第三方app和微信通信的openapi接口
@ -21,71 +14,53 @@ class WXEntryActivity : Activity(), IWXAPIEventHandler {
super.onCreate(savedInstanceState)
Log.e("wx:", "onCreate:")
try {
if (!WXAPiHandler.wxApiRegistered) {
var appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val wechatAppId = appInfo.metaData.getString("weChatAppId")
if (wechatAppId != null ){
WXAPiHandler.setupWxApi(wechatAppId,this)
WXAPiHandler.setCoolBool(true)
Log.d("fluwx","weChatAppId:" + wechatAppId)
}else {
Log.e("fluwx","can't load meta-data weChatAppId")
}
}
WXAPiHandler.wxApi?.handleIntent(intent, this)
} catch (e: Exception) {
e.printStackTrace()
startSpecifiedActivity(defaultFlutterActivityAction())
finish()
}
// try {
// if (!WXAPiHandler.wxApiRegistered) {
// var appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
// val wechatAppId = appInfo.metaData.getString("weChatAppId")
// if (wechatAppId != null ){
// WXAPiHandler.setupWxApi(wechatAppId,this)
// WXAPiHandler.setCoolBool(true)
// Log.d("fluwx","weChatAppId:" + wechatAppId)
// }else {
// Log.e("fluwx","can't load meta-data weChatAppId")
// }
// }
// WXAPiHandler.wxApi?.handleIntent(intent, this)
// } catch (e: Exception) {
// e.printStackTrace()
// startSpecifiedActivity(defaultFlutterActivityAction())
// finish()
// }
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
Log.e("wx:", "onNewIntent:")
// override fun onNewIntent(intent: Intent) {
// super.onNewIntent(intent)
// Log.e("wx:", "onNewIntent:")
setIntent(intent)
// setIntent(intent)
try {
WXAPiHandler.wxApi?.handleIntent(intent, this)
} catch (e: Exception) {
e.printStackTrace()
startSpecifiedActivity(defaultFlutterActivityAction())
finish()
}
}
// try {
// WXAPiHandler.wxApi?.handleIntent(intent, this)
// } catch (e: Exception) {
// e.printStackTrace()
// startSpecifiedActivity(defaultFlutterActivityAction())
// finish()
// }
// }
override fun onReq(baseReq: BaseReq) {
Log.e("wx:", "onReq: ${baseReq.toString()}")
// override fun onReq(baseReq: BaseReq) {
// Log.e("wx:", "onReq: ${baseReq.toString()}")
// FIXME: 可能是官方的Bug,从微信拉起APP的Intent类型不对,无法跳转回Flutter Activity
// 稳定复现场景:微信版本为7.0.5,小程序SDK为2.7.7
FluwxRequestHandler.onReq(baseReq,this)
}
// FluwxRequestHandler.onReq(baseReq,this)
// }
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
override fun onResp(resp: BaseResp) {
Log.e("wx:", "onResp: ${resp.toString()}")
FluwxResponseHandler.handleResponse(resp)
finish()
}
private fun startSpecifiedActivity(action: String, bundle: Bundle? = null, bundleKey: String? = null) {
Intent(action).run {
bundleKey?.let {
putExtra(bundleKey, bundle)
}
addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
packageManager?.let {
resolveActivity(packageManager)?.also {
startActivity(this)
finish()
}
}
}
}
private fun defaultFlutterActivityAction(): String = "$packageName.FlutterActivity"
// override fun onResp(resp: BaseResp) {
// Log.e("wx:", "onResp: ${resp.toString()}")
// FluwxResponseHandler.handleResponse(resp)
// finish()
// }
}

6
android/app/src/main/res/xml/jshare_file_provider_paths.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--自定义配置分享文件目录访问权限-->
<external-path name="sample-external-path" path="/"/>
<files-path name="sample-files-path" path="/"/>
</paths>

8
android/build.gradle

@ -12,11 +12,16 @@ buildscript {
}
google()
// jcenter()
maven {
url "http://mvn.mob.com/android"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.mob.sdk:MobSDK:+'
}
}
@ -33,6 +38,9 @@ allprojects {
}
google()
// jcenter()
maven {
url "http://mvn.mob.com/android"
}
}
}

1
android/gradle.properties

@ -1,3 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
MobSDK.mobEnv=x

2
ios/Flutter/AppFrameworkInfo.plist

@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
<string>9.0</string>
</dict>
</plist>

51
ios/Podfile.lock

@ -11,9 +11,6 @@ PODS:
- AMapLocation (2.6.8):
- AMapFoundation (~> 1.6.4)
- Flutter (1.0.0)
- fluttertoast (0.0.2):
- Flutter
- Toast
- fluwx (0.0.1):
- Flutter
- WechatOpenSDK (= 1.8.7.1)
@ -25,6 +22,30 @@ PODS:
- TOCropViewController (~> 2.6.0)
- image_picker (0.0.1):
- Flutter
- mob_sharesdk (4.4.0):
- mob_sharesdk/ShareSDK (= 4.4.0)
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDK (4.4.0):
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKExtension (4.4.0):
- mob_sharesdk/ShareSDK
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKPlatforms/Facebook (4.4.0):
- mob_sharesdk/ShareSDK
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKPlatforms/Line (4.4.0):
- mob_sharesdk/ShareSDK
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKPlatforms/WeChat_Lite (4.4.0):
- mob_sharesdk/ShareSDK
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKRestoreScene (4.4.0):
- mob_sharesdk/ShareSDKExtension
- MOBFoundation (>= 3.2.9)
- mob_sharesdk/ShareSDKUI (4.4.0):
- mob_sharesdk/ShareSDK
- MOBFoundation (>= 3.2.9)
- MOBFoundation (3.2.26)
- package_info (0.0.1):
- Flutter
- path_provider (0.0.1):
@ -33,10 +54,18 @@ PODS:
- Flutter
- shared_preferences (0.0.1):
- Flutter
- sharesdk_plugin (1.1.2):
- Flutter
- mob_sharesdk
- mob_sharesdk/ShareSDKExtension
- mob_sharesdk/ShareSDKPlatforms/Facebook
- mob_sharesdk/ShareSDKPlatforms/Line
- mob_sharesdk/ShareSDKPlatforms/WeChat_Lite
- mob_sharesdk/ShareSDKRestoreScene
- mob_sharesdk/ShareSDKUI
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- Toast (4.0.0)
- TOCropViewController (2.6.0)
- TPNS-iOS (1.3.3.0)
- tpns_flutter_plugin (1.1.2):
@ -54,7 +83,6 @@ DEPENDENCIES:
- amap_flutter_location (from `.symlinks/plugins/amap_flutter_location/ios`)
- amap_flutter_map (from `.symlinks/plugins/amap_flutter_map/ios`)
- Flutter (from `Flutter`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- fluwx (from `.symlinks/plugins/fluwx/ios`)
- image_cropper (from `.symlinks/plugins/image_cropper/ios`)
- image_picker (from `.symlinks/plugins/image_picker/ios`)
@ -62,6 +90,7 @@ DEPENDENCIES:
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- permission_handler (from `.symlinks/plugins/permission_handler/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- sharesdk_plugin (from `.symlinks/plugins/sharesdk_plugin/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- tpns_flutter_plugin (from `.symlinks/plugins/tpns_flutter_plugin/ios`)
- video_player (from `.symlinks/plugins/video_player/ios`)
@ -74,7 +103,8 @@ SPEC REPOS:
- AMapFoundation
- AMapLocation
- FMDB
- Toast
- mob_sharesdk
- MOBFoundation
- TOCropViewController
- TPNS-iOS
- WechatOpenSDK
@ -86,8 +116,6 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/amap_flutter_map/ios"
Flutter:
:path: Flutter
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
fluwx:
:path: ".symlinks/plugins/fluwx/ios"
image_cropper:
@ -102,6 +130,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/permission_handler/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
sharesdk_plugin:
:path: ".symlinks/plugins/sharesdk_plugin/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
tpns_flutter_plugin:
@ -120,17 +150,18 @@ SPEC CHECKSUMS:
AMapFoundation: c7da72b42a713f1429c88af1858d623dde88934b
AMapLocation: dad27669c4ca68e395ce7532ff614b7d4d45f7b7
Flutter: 434fef37c0980e73bb6479ef766c45957d4b510c
fluttertoast: 6122fa75143e992b1d3470f61000f591a798cc58
fluwx: 07a55ed66bf3a4961e836a2a411b02dcada32902
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
image_cropper: f1668dd8d2cad2d357955caad15a40547856edcb
image_picker: 9c3312491f862b28d21ecd8fdf0ee14e601b3f09
mob_sharesdk: c771f001e00739d24301a9fa250247601efe7a3c
MOBFoundation: 2abd23c80c33d1337d30dc4b0018ed914cef8f8e
package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62
path_provider: f96fff6166a8867510d2c25fdcc346327cc4b259
permission_handler: ccb20a9fad0ee9b1314a52b70b76b473c5f8dab0
shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d
sharesdk_plugin: 6d6634bb480174b607030f19fc9d84d68cfbf326
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
TPNS-iOS: 57a146496858ba2fb5d43e5f240feb19243b69cb
tpns_flutter_plugin: a366649c8ad71f19dfb864d3c994ed0480b69daa

8
ios/Runner/Info.plist

@ -50,6 +50,14 @@
<string>weixinULAPI</string>
<string>weixin</string>
<string>wechat</string>
<!-- Facebook URL Scheme 白名单-->
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<!-- Twitter URL Scheme 白名单-->
<string>twitter</string>
<string>twitterauth</string>
</array>
<key>LSRequiresIPhoneOS</key>
<true/>

8
lib/generated/intl/messages_all.dart

@ -17,12 +17,16 @@ import 'package:intl/src/intl_helpers.dart';
import 'messages_en.dart' as messages_en;
import 'messages_zh_CN.dart' as messages_zh_cn;
import 'messages_zh_Hans_CN.dart' as messages_zh_hans_cn;
import 'messages_zh_Hant_CN.dart' as messages_zh_hant_cn;
import 'messages_zh_TW.dart' as messages_zh_tw;
typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new Future.value(null),
'zh_CN': () => new Future.value(null),
'zh_Hans_CN': () => new Future.value(null),
'zh_Hant_CN': () => new Future.value(null),
'zh_TW': () => new Future.value(null),
};
@ -32,6 +36,10 @@ MessageLookupByLibrary _findExact(String localeName) {
return messages_en.messages;
case 'zh_CN':
return messages_zh_cn.messages;
case 'zh_Hans_CN':
return messages_zh_hans_cn.messages;
case 'zh_Hant_CN':
return messages_zh_hant_cn.messages;
case 'zh_TW':
return messages_zh_tw.messages;
default:

2
lib/generated/l10n.dart

@ -3773,6 +3773,8 @@ class AppLocalizationDelegate extends LocalizationsDelegate<S> {
return const <Locale>[
Locale.fromSubtags(languageCode: 'en'),
Locale.fromSubtags(languageCode: 'zh', countryCode: 'CN'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans', countryCode: 'CN'),
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant', countryCode: 'CN'),
Locale.fromSubtags(languageCode: 'zh', countryCode: 'TW'),
];
}

400
lib/l10n/intl_zh_Hans_CN.arb

@ -0,0 +1,400 @@
{
"login_splash": "欢迎来到一心回乡",
"input_phone": "输入手机号",
"input_code": "手机验证码",
"input_phone_hide": "请输入你的手机号",
"input_code_hide": "请输入验证码",
"login": "登录",
"send_code": "发送验证",
"resend_in_seconds": "{second}s后重新发送",
"phone_error": "手机格式错误",
"code_error": "验证码输入错误",
"privacy_policy1": "登录既同意",
"privacy_policy2": "《一心回乡服务协议》",
"privacy_policy3": "《隐私服务》",
"main_menu1": "净弼",
"main_menu2": "联盟",
"main_menu3": "我的",
"shouye": "首页",
"huodongliebiao": "活动列表",
"jifenshangcheng": "积分商城",
"jinrihuiyuanrenwu": "今日会员任务",
"renwuzhongxin": "任务中心",
"qiandaolingqujinfen": "签到领取积分",
"quqiandao": "去签到",
"youhuiquanlingqu": "优惠券领取",
"gengduoyouhuiquan": "更多优惠券",
"lingqu": "领取",
"pinpaijieshao": "品牌介绍",
"jingbilianmenghuiyuandian": "净弼联盟会员店",
"gongli": "{km}公里",
"manlijiandaijinquan": "满{man}立减{jian}代金券",
"ren": "¥{ren}/人",
"youxiaoqizhi": "有效期至{date}",
"huodongjinxingzhong": "活动进行中",
"yiyoujifen": "已有积分",
"morenpaixu": "默认排序",
"duihuanlianggaodaodi": "兑换量从高到低",
"duihuanliangdidaogao": "兑换量从低到高",
"jifengaodaodi": "积分从高到低",
"jifendidaogao": "积分从低到高",
"yiduihuanjian": "已兑换{jian}件",
"yuan_": "{yuan}元",
"jifen_": "{jifen}积分",
"jifenxiangqing": "积分详情",
"dangqiandengji": "当前等级",
"jifendaoxiayidengji": "{jifen}积分 到下一个等级",
"kaitongriqi": "开通日期:{date}",
"kabao": "卡包",
"dingdan": "订单",
"ninyouyigedingdanyaolingqu": "您有一个订单需要前往门店领取",
"wodeqianbao": "我的钱包",
"fapiaozhushou": "发票助手",
"zaixiankefu": "在线客服",
"shezhi": "设置",
"youhuiquan": "优惠券",
"bangzhuyufankui": "帮助与反馈",
"shiyongriqi": "使用日期",
"keyongyouhuiquan": "可用优惠券",
"yishixiao": "已失效",
"quanbudingdan": "全部订单",
"weiwancheng": " 未完成 ",
"yingyeshijian": "营业时间: {time}",
"yiwancheng": " 已完成 ",
"yiquxiao": " 已取消 ",
"jiesuanjine": "结算金额",
"quzhifu": "去支付",
"xiadanshijian": "下单时间",
"jinxingzhongdedingdan": "进行中的订单",
"ziqu": "自取",
"waisong": "外送",
"qingzaiguidingshijianneizhifu": "请在规定时间内完成支付",
"quxiaodingdan": "取消订单",
"jixuzhifu": "继续支付",
"ge": "{ge}g/个",
"peisongfei": "配送费",
"huodongjianmianpeisongfei": "活动减免{yuan}元配送费",
"shoujihao": "手机号",
"beizhu": "备注",
"fapiao": "发票",
"yue": "余额",
"buzhichikaipiao": "不支持开票",
"qingshurubeizhuyaoqiu": "请输入备注要求",
"qingshuruzhifumima": "请输入支付密码",
"shuruzhifumima": "输入支付密码",
"zhanghuyue": "账户余额",
"keyongyue": "可用余额",
"shuaxinyue": "刷新余额",
"chongzhi": "充值",
"tixian": "提现",
"yishijiao": "已失效",
"lishijilu": "历史记录",
"yue_": "余额{yue}",
"duihuanlishi": "兑换历史",
"quanbuduihuan": "全部兑换",
"weulingqu": "未领取",
"keshiyong": "可使用",
"qushiyong": "去使用",
"yikexiao": "已核销",
"chuangjianshijian": "创建时间{time}",
"yiduihuan": "已兑换",
"zitidizhi": "自提地址",
"zitishijian": "自提时间",
"feishiwuduihuanma": "非实物兑换吗",
"shangpinjifen": "商品积分 {jifen}积分",
"shifujifen": "实付积分 {jifen}积分",
"shanchudingdan": "删除订单",
"dingwei": "定位",
"weikaiqi": "未开启",
"tongzhi": "通知",
"xiangji": "相机",
"quanxianshezhi": "权限设置",
"weizhitishixinxi": "为了向您推荐附近的门店信息,推荐您在使用HISAPP时让我们使用位置信息",
"tongzhitishixinxi": "为了您可以及时收到我们的活动信息,推荐您在使用HISAPP时打开通知的接收",
"xiangjitishixinxi": "为了您可以在使用过程中进行分享,希望您使用HISAPP时让我们使用相机功能",
"cunchutishixinxi": "为了获得照片使用、缓存等功能,推荐您在使用期间打开存储权限",
"cunchu": "存储",
"wodejifenzhi": "我的积分值",
"mingxi": "明细",
"qiandaolingjifen": "签到领积分",
"lianxuqiandaolingqushuangbeijifen": "连续签到领取双倍积分",
"shenmijifendali": "神秘积分大礼",
"lijiqiandao": "立即签到",
"zuorenwudejifen": "做任务得积分",
"meiriqiandao": "每日签到",
"wanchengyicixiadan": "完成一次下单",
"ricahngfenxiang": "日常分享",
"wancheng_": "完成{num}",
"quwancheng": " 去完成 ",
"huode": "获得",
"xiaofei": "消费",
"qiandao": "签到",
"huiyuandengjishuoming": "会员等级说明",
"wodehuiyuandengji": "我的会员等级",
"chenggongdengluzhuce": "成功登录注册,并绑定相关信息即可成为会员。",
"huiyuandengji": "会员等级",
"jifen": "积分",
"qingtonghuiyuan": "青铜会员",
"baiyinhuiyuan": "白银会员",
"huangjinhuiyuan": "黄金会员",
"zuanshihuiyuan": "钻石会员",
"zhizunhuiyuan": "至尊会员",
"jifendejisuanshuoming": "积分的计算说明",
"yonghuxiaofeijifen": "用户每消费1元可获得1个积分。",
"youhuiquanwufajileijifen": "优惠金额无法累积积分,订单撤销或其他原因造成的未成功支付的订单,无法获得对应的积分。",
"": "账号信息",
"gerenxinxi": "个人信息",
"touxiang": "头像",
"yonghuming": "用户名",
"shimingrenzheng": "实名认证",
"zhanghaoshouquan": "账号授权",
"yuyan": "语言",
"zhongwenjianti": "中文简体",
"quanxian": "权限",
"tuichudenglu": "退出登录",
"xiaoxi": "消息",
"huodongzixun": "活动资讯",
"wodexiaoxi": "我的消息",
"xitongxiaoxi": "系统消息",
"ninyouyigexindedingdan": "您有一个新的订单",
"chakangengduo": "查看更多",
"qujianma": "取件码",
"dingdanhao": "订单号",
"xiadanshijian_": "下单时间:{time}",
"peisongfuwu": "配送服务",
"diancan": "点餐",
"xindianhuodong": "星店活动",
"tingchewei": "停车位",
"kongtiao": "空调",
"lijicanjia": "立即参加",
"hexiaomaxiangqing": "核销码详情",
"hexiaochenggong": "核销成功",
"dangqianshangpinduihuanhexiaoma": "当前商品兑换核销码已核销完成",
"fanhuiduihuanlishi": "返回兑换历史",
"weihexiao": "未核销",
"shiyongtiaojian": "使用条件",
"shiyongshuoming": "使用说明",
"qianwanghuixiangmendianduihuanhexiao": "前往一心回乡旗下任意门店对工作人员出示商品兑换码,核实无误后,可领取对应商品",
"zitiduihuanquan": "券类型:自提兑换券",
"huixiangrenyimendian": "适用于:一心回乡任意门店",
"mendianxuanzhe": "门店选择",
"queren": "确认",
"zhifuxiangqing": "支付详情",
"duihuanchenggong": "兑换成功",
"xiaofeijifen": "消费积分",
"keyongjifen": "可用积分",
"jixuduihuan": "继续兑换",
"lingqudaokabao": "领取到卡包",
"dingdanqueren": "订单确认",
"duihuanxinxi": "兑换信息",
"lingqufangshi": "领取方式",
"ziti": "自提",
"qingxuanzhemendian": "请选择门店",
"duihuanhouwugegongzuori": "兑换后五个工作日可前往门店",
"duihuanshangpinxiangqing": "兑换商品详情",
"querenduihuan": "确认兑换",
"yiwanchengdingdan": "已完成订单",
"shixiaoquan": "失效券",
"wenzhangxiangqing": "文章详情",
"shouhuodizhi": "收货地址",
"yishiming": "已实名",
"chakanshixiaoquan": "查看失效券",
"meiyougengduoyouhuiquan": "没有更多优惠券了",
"shixiaoyouhuiquan": "失效优惠券",
"xitongtongzhi": "系统通知",
"wancheng": "完成",
"duihuanguize": "兑换规则",
"duihuan": "兑换",
"fantizhongwen": "繁体中文",
"qingxuanzheninxiangshezhideyuyan": "请选择您想设置的语言",
"quxiao": "取消",
"brand_yixinhuixiang": "一心回乡",
"bainianchuanjiao": "百年川椒",
"haixiajiemei": "海峡姐妹",
"qianjinmaiwei": "前进麦味",
"pinpai": "品牌",
"qingshurushoujihao": "请输入手机号",
"qingshuruyanzhengma": "请输入验证码",
"gouxuanxieyi": "请勾选同意隐私服务和一心回乡服务协议",
"qingshuruchongzhijine": "输入充值金额(元)",
"chongzhizuixiaojine": "充值金额最小是{yuan}元",
"remenwenzhangshipin": "热门文章视频",
"remenwenzhangshipinliebiao": "热门文章视频列表",
"chuangshirendegushi": "创始人的故事",
"wodeshengri": "我的生日",
"wodenianling": "我的年龄",
"sui": "{sui}岁",
"wanshanshengrixinxi_yhq": "完善生日信息得专属优惠劵",
"wanshanshengrixinxi_nl": "完善生日信息后自动生成",
"zhifufangshi": "支付方式",
"zhifubao": "支付宝",
"weixinzhifu": "微信支付",
"querenchongzhi": "确认充值",
"peisong": "配送",
"keyongquan": "可用券",
"xuni": "虚拟",
"qingxuanzeshouhuodizhi": "请选择收货地址",
"feishiwushangpin": "非实物商品兑换后领取到卡包即可使用!",
"duihuanhoufahuo": "兑换后五个工作日内发货",
"xianshangfafang": "线上发放",
"lingqushijian": "领取时间 {shijian}",
"faxingshijian": "发行开始时间 {shijian}",
"chakanwodekabao": "查看我的卡包",
"mi": "{mi}米",
"xialashuaxin": "下拉刷新",
"shifangshuaxin": "释放刷新",
"shuaxinzhong": "刷新中....",
"shuaxinchenggong": "刷新成功",
"shuaxinshibai": "刷新失败",
"zuozhe": "作者{zuozhe}",
"quanchangzhe": "全场{zhe}折",
"shanglajiazai": "上拉加载",
"jiazaishibai": "加载失败",
"shifangjiazaigengduo": "释放加载更多",
"meiyougengduoshujule": "没有更多的数据了",
"shangpinxiangqing": "商品详情",
"kaiqiquanxian": "开启权限",
"meiyougengduohuiyuanka": "没有更多会员卡了",
"huiyuankaxiangqing": "会员卡详情",
"yuemingxi": "余额明细",
"kelingqudeyouhuiquan": "可领取的优惠券",
"shangjiaquan": "商家券",
"manyuankeyong": "满{man}元可用",
"jifen": "积分",
"chakanwodekaquan": "查看我的卡券",
"guanyu": "关于",
"linian": "理念",
"jingbilianmenghuiyuandian": "净弼联盟会员店",
"kaquan": "卡券",
"guanlidizhi": "管理地址",
"lingquanzhongxin": "领券中心",
"lianxishoujihao": "联系手机号",
"shangjiaquan": "商家券",
"manyuankeyong": "满{yuan}可用",
"tijiao": "提交",
"changjianwenti": "常见问题",
"fankui": "反馈",
"quxiaozhifu": "取消支付",
"daifukuan": "待付款",
"quanbu": "全部",
"wuliuxinxi": "物流信息",
"huiyuankaxiangqing": "会员卡详情",
"meiyougengduohuiyuanka": "没有更多会员卡",
"yuemingxi": "余额明细",
"chakanwodekaquan": "查看我的卡券",
"kelingqudeyouhuiquan": "可领取的优惠券",
"dangqiandengji": "当前等级",
"xiayidengji": "下一等级",
"daoxiayidengji": "到下一等级",
"kaitongriqi": "开通日期:{date}",
"yiqiandao": "已签到",
"quanchangtongyong": "全场通用",
"xiangqing": "详情",
"yishiyong": "已使用",
"zanbuzhichixianshangdiancan": "暂不支持线上点餐",
"dakaidingwei": "打开定位",
"dianjikaiqiquanxian": "您未开启位置权限,请点击开启",
"queding": "确定",
"qingxuanzeshiyongmendian": "请选择使用门店",
"daizhifu": "待支付",
"yizhifu": "已支付",
"daiqueren": "待确认",
"shangjiaqueren": "商家确认",
"qingzhuo": "清桌",
"tuikuan": "退款",
"daizhizuo": "待制作",
"zhizuowancheng": "制作完成",
"daipeisong": "待配送",
"yihujiaoqishou": "已呼叫骑手",
"quhuozhong": "取货中",
"yisongda": "已送达",
"yifahuo": "已发货",
"peisongzhong": "配送中",
"yixinhuixiang": "一心回乡",
"guojiankangyoujishenghuo": "过健康有机生活",
"banben": "版本:{version}",
"waimai": "外卖",
"kuaidi": "快递",
"shenqingtuikuan": "申请退款",
"zailaiyidan": "再来一单",
"gongjijianshangpin": "共{jian}件商品",
"dingdanyiwancheng": "订单已完成",
"peisongfangshi": "配送方式",
"dingdandaizhifu": "订单待支付",
"dingdanyizhifu": "订单已支付",
"shangjiazhengzaipeican": "商家正在配餐",
"dengdaiyonghuqucan": "等待用户取餐",
"qucanhao": "取餐号",
"dingdanyiwancheng": "订单已完成",
"dingdanyituikuan": "订单已退款",
"zhengzaihujiaoqishou": "正在呼叫骑手",
"qishouyijiedanquhuozhong": "骑手已接单、取货中",
"qishoupeisongzhongyujisongdashijian": "骑手配送中,预计送达时间",
"dingdanyisongda": "订单送达",
"dingdanyiwancheng": "订单已完成",
"dingdandaizhifu": "订单待支付",
"dingdanyizhifu": "订单待支付",
"shangjiayifahuo": "商家已发货",
"huopinyisongda": "货品已送达",
"zhengzaipeisong": "正在配送",
"daiqucan": "待取餐",
"yituikuan": "已退款",
"querenshouhuo": "确认收货",
"chakanwuliu": "查看物流",
"zailaiyidan": "再来一单",
"shanchudingdan": "删除一单",
"qudanhao": "取单号{num}",
"lingquchenggong": "领取成功",
"dianwolingqu": "点我领取",
"chengweidianpuzhuanshuhuiyuan": "成为店铺专属会员,享专属权益",
"yinsishengming": "隐私声明",
"dangqianbanben": "当前版本",
"tebieshengming": "特别声明",
"shiyongbangzhu": "使用帮助",
"geiwopingfen": "给我评分",
"yilingqu": "已领取",
"yinsizhengce": "隐私政策",
"heji": "合计:",
"yuan": "元",
"gong": "共",
"jian": "件",
"nindingweigongnengweikaiqi": "您定位功能开关未开启,请点击去打開定位",
"nindingweiquanxianweiyunxu": "您未开启位置权限,请点击确定申请权限",
"weilexiangnintuijianfujindemendianxinxi": "为了向您推荐附近的门店信息,推荐您在使用期间让我们使用位置信息",
"dengdaishangjiaqueren": "等待商家确认",
"dingdandaifahuo": "订单待发货",
"gengduo": "更多",
"jituanchuangbanren": " 集团创办人",
"zhengzaijiazai": "正在加载",
"quantian": "全天",
"yunfei": "运费",
"jiesuan": "结算",
"qinglihuancun": "清理缓存",
"chaungshirengushi": "创始人故事",
"jituanchuangshiren": "集团创始人",
"jianjie": "简介:{jianjie}",
"zhengzaixiazaizhong": "正在下载中...",
"qingxuanzeyigemendian": "请选择一个门店",
"muqianzanwuxingdianhuodong": "目前暂无星店活动",
"zanwuyouhuiquankelingqu": "暂无优惠券可领取",
"huiyuanjifen": "会员积分",
"huiyuanyue": "会员余额",
"gongxinichengweibendianhuiyuan": "恭喜您,成为本店的会员,快去享受超多会员权益吧。",
"ninweidenglu": "您未登录,请点击去登录",
"weilegeiningenghaodefuwu": "为了给您提供更好的服务,以及享受更加精彩的信息内容,请您在使用期间,进行登录",
"qudenglu": "去登录",
"weidenglu": "未登录",
"youkedenglu": "游客登录",
"yishouquan": "已授权",
"qingshuruchongzhijine": "请输入充值金额",
"yinshi": "饮食",
"shenghuoyule": "生活娱乐",
"bangong": "办公",
"privacy_policy4": "并使用本机号码登录"
}

388
lib/l10n/intl_zh_Hant_CN.arb

@ -0,0 +1,388 @@
{
"login_splash": "歡迎來到一心回鄉",
"input_phone": "輸入手機號",
"input_code": "手機驗證碼",
"input_phone_hide": "請輸入你的手機號",
"input_code_hide": "請輸入驗證碼",
"login": "登錄",
"send_code": "發送驗證碼",
"resend_in_seconds": "{second}s后重新發送",
"phone_error": "手機格式錯誤",
"code_error": "驗證碼輸入錯誤",
"privacy_policy1": "登錄既同意",
"privacy_policy2": "《一心回鄉服務協議》",
"privacy_policy3": "《隱私服務》",
"main_menu1": "淨弼",
"main_menu2": "聯盟",
"main_menu3": "我的",
"shouye": "首頁",
"huodongliebiao": "活動列表",
"jifenshangcheng": "積分商城",
"jinrihuiyuanrenwu": "今日會員任務",
"renwuzhongxin": "任務中心",
"qiandaolingqujinfen": "簽到領取積分",
"quqiandao": "去簽到",
"youhuiquanlingqu": "優惠券領取",
"gengduoyouhuiquan": "更多優惠券",
"lingqu": "領取",
"pinpaijieshao": "品牌介紹",
"jingbilianmenghuiyuandian": "净弼聯盟會員店",
"gongli": "{km}公里",
"manlijiandaijinquan": "滿{man}立減{jian}代金券",
"ren": "¥{ren}/人",
"youxiaoqizhi": "有效期至{date}",
"huodongjinxingzhong": "活動進行中",
"yiyoujifen": "已有積分",
"morenpaixu": "默認排序",
"duihuanlianggaodaodi": "兌換量從高到低",
"duihuanliangdidaogao": "兌換量從低到高",
"jifengaodaodi": "積分從高到低",
"jifendidaogao": "積分從低到高",
"yiduihuanjian": "已兌換{jian}件",
"yuan_": "{yuan}元",
"jifen_": "{jifen}積分",
"dangqiandengji": "當前等級",
"jifendaoxiayidengji": "{jifen}積分 到下一個等級",
"kaitongriqi": "開通日期:{date}",
"kabao": "卡包",
"dingdan": "訂單",
"ninyouyigedingdanyaolingqu": "您有一個訂單需要前往門店領取",
"wodeqianbao": "我的錢包",
"duihuanlishi": "兌換歷史",
"fapiaozhushou": "發票助手",
"zaixiankefu": "在線客服",
"shezhi": "設置",
"youhuiquan": "優惠券",
"bangzhuyufankui": "幫助與反饋",
"fankui": "反馈",
"shiyongriqi": "使用日期",
"keyongyouhuiquan": "可用優惠券",
"keyongquan": "可用券",
"shixiaoquan": "失效券",
"yishixiao": "已失效",
"quanbudingdan": "全部訂單",
"weiwancheng": " 未完成 ",
"yingyeshijian": "營業時間: {time}",
"yiwancheng": " 已完成 ",
"yiquxiao": " 已取消 ",
"jiesuanjine": "結算金額",
"quzhifu": "去支付",
"xiadanshijian": "下單時間",
"jinxingzhongdedingdan": "進行中的訂單",
"ziqu": "自取",
"waisong": "外送",
"qingzaiguidingshijianneizhifu": "請在規定時間内完成支付",
"quxiaodingdan": "取消訂單",
"jixuzhifu": "繼續支付",
"ge": "{ge}g/個",
"peisongfei": "配送費",
"huodongjianmianpeisongfei": "活動減免{yuan}元配送費",
"shoujihao": "手機號",
"beizhu": "備注",
"fapiao": "發票",
"yue": "餘額",
"buzhichikaipiao": "不支持開票",
"qingshurubeizhuyaoqiu": "請輸入備注要求",
"qingshuruzhifumima": "請輸入支付密碼",
"shuruzhifumima": "輸入支付密碼",
"zhanghuyue": "賬戶餘額",
"keyongyue": "可用餘額",
"shuaxinyue": "刷新餘額",
"chongzhi": "充值",
"tixian": "提現",
"yishijiao": "已失效",
"lishijilu": "歷史記錄",
"yue_": "餘額{yue}",
"quanbuduihuan": "全部兌換",
"weulingqu": "未領取",
"keshiyong": "可使用",
"qushiyong": "去使用",
"yikexiao": "已核銷",
"chuangjianshijian": "創建時間{time}",
"yiduihuan": "已兌換",
"zitidizhi": "自提地址",
"zitishijian": "自提時間",
"feishiwuduihuanma": "非實物兌換碼",
"shangpinjifen": "商品積分 {jifen}積分",
"shifujifen": "實付積分 {jifen}積分",
"lingqudaokabao": "領取到卡包",
"shanchudingdan": "刪除訂單",
"dingwei": "定位",
"weikaiqi": "未開啓",
"tongzhi": "通知",
"xiangji": "相機",
"quanxianshezhi": "權限設置",
"weizhitishixinxi": "為了向您推薦附近的門店資訊,推薦您在使用HISAPP時讓我們使用位置資訊",
"tongzhitishixinxi": "為了您可以及時收到我們的活動資訊,推薦您在使用HISAPP時打開通知的接收 ",
"xiangjitishixinxi": "為了您可以在使用過程中進行分享,希望您使用HISAPP時讓我們使用相機功能 ",
"cunchutishixinxi": "為了獲得照片使用、緩存等功能,推薦您使用期間打開存儲權限",
"cunchu": "存儲",
"wodejifenzhi": "我的積分值",
"wodehuiyuandengji": "我的會員等級",
"mingxi": "明細",
"qiandaolingjifen": "簽到領積分",
"lianxuqiandaolingqushuangbeijifen": "連續簽到領取雙倍積分",
"shenmijifendali": "神秘積分大禮",
"lijiqiandao": "立即簽到",
"zuorenwudejifen": "做任務得積分",
"meiriqiandao": "每日簽到",
"wanchengyicixiadan": "完成一次下單",
"ricahngfenxiang": "日常分享",
"wancheng_": "完成{num}",
"quwancheng": " 去完成 ",
"huode": "獲得",
"xiaofei": "消費",
"qiandao": "簽到",
"huiyuandengjishuoming": "會員等級説明",
"chenggongdengluzhuce": "成功登录注册,并绑定相关信息即可成为会员。",
"huiyuandengji": "會員等級",
"jifen": "積分",
"qingtonghuiyuan": "青銅會員",
"baiyinhuiyuan": "白銀會員",
"huangjinhuiyuan": "黃金會員",
"zuanshihuiyuan": "鑽石會員",
"zhizunhuiyuan": "至尊會員",
"jifendejisuanshuoming": "積分的計算説明",
"yonghuxiaofeijifen": "用戶每消費1元可獲得1個積分 。",
"youhuiquanwufajileijifen": "優惠金額無法累積積分,訂單撤銷或其他原因造成的未成功支付的訂單,無法獲得對應的積分。",
"zhanghaoxinxi": "賬號信息",
"gerenxinxi": "個人信息",
"touxiang": "頭像",
"yonghuming": "用戶名",
"shimingrenzheng": "實名認證",
"zhanghaoshouquan": "賬號授權",
"yuyan": "語言",
"zhongwenjianti": "中文簡體",
"quanxian": "權限",
"tuichudenglu": "退出登錄",
"xiaoxi": "消息",
"huodongzixun": "活動資訊",
"wodexiaoxi": "我的消息",
"xitongxiaoxi": "系統消息",
"ninyouyigexindedingdan": "您有一個新訂單",
"chakangengduo": "查看更多",
"qujianma": "取件碼",
"dingdanhao": "訂單號",
"xiadanshijian_": "下單時間:{time}",
"peisongfuwu": "配送服務",
"diancan": "點餐",
"xindianhuodong": "星店活動",
"tingchewei": "停車位",
"kongtiao": "空調",
"lijicanjia": "立即參加",
"hexiaomaxiangqing": "核銷碼詳情",
"hexiaochenggong": "核銷成功",
"dangqianshangpinduihuanhexiaoma": "當前商品兌換核銷碼已核銷完成 ",
"fanhuiduihuanlishi": "返回兌換歷史",
"weihexiao": "未核銷",
"shiyongtiaojian": "使用条件",
"shiyongshuoming": "使用说明",
"qianwanghuixiangmendianduihuanhexiao": "前往一心回乡旗下任意门店对工作人员出示商品兑换码,核实无误后,可领取对应商品",
"zitiduihuanquan": "券类型:自提兑换券",
"huixiangrenyimendian": "适用于:一心回乡任意门店",
"mendianxuanzhe": "门店选择",
"queren": "确认",
"zhifuxiangqing": "支付详情",
"duihuanchenggong": "兑换成功",
"xiaofeijifen": "消费积分",
"keyongjifen": "可用积分",
"jixuduihuan": "继续兑换",
"dingdanqueren": "订单确认",
"duihuanxinxi": "兑换信息",
"lingqufangshi": "领取方式",
"ziti": "自提",
"qingxuanzhemendian": "请选择门店",
"duihuanhouwugegongzuori": "兑换后五个工作日可前往门店",
"duihuanshangpinxiangqing": "兑换商品详情",
"querenduihuan": "确认兑换",
"yiwanchengdingdan": "已完成订单",
"yishiming": "已实名",
"jifenxiangqing": "積分詳情",
"chakanshixiaoquan": "查看失效券",
"meiyougengduoyouhuiquan": "没有更多优惠券了",
"shixiaoyouhuiquan": "失效优惠券",
"xitongtongzhi": "系统通知",
"wancheng": "完成",
"duihuanguize": "兑换规则",
"duihuan": "兑换",
"fantizhongwen": "繁体中文",
"qingxuanzheninxiangshezhideyuyan": "請選擇您要設置的語言",
"quxiao": "取消",
"brand_yixinhuixiang": "一心回鄉",
"bainianchuanjiao": "百年川椒",
"haixiajiemei": "海峽姐妹",
"qianjinmaiwei": "前進麥味",
"pinpai": "品牌",
"qingshurushoujihao": "請輸入手機號碼",
"qingshuruyanzhengma": "請輸入驗證碼",
"gouxuanxieyi": "請勾選同意隱私服務和一心回鄉服務協定",
"qingshuruchongzhijine": "輸入充值金額(元)",
"chongzhizuixiaojine": "充值金額最小是{yuan}元",
"remenwenzhangshipin": "熱門文章視頻",
"remenwenzhangshipinliebiao": "熱門文章視頻清單",
"chuangshirendegushi": "創始人的故事",
"wodeshengri": "我的生日",
"wodenianling": "我的年齡",
"sui": "{sui}嵗",
"wanshanshengrixinxi_yhq": "完善生日資訊得專屬優惠劵 ",
"wanshanshengrixinxi_nl": "完善生日資訊後自動生成 ",
"zhifufangshi": "支付方式",
"zhifubao": "支付寶",
"weixinzhifu": "微信支付",
"querenchongzhi": "確認充值",
"peisong": "配送",
"xuni": "虛擬",
"qingxuanzeshouhuodizhi": "請選擇收貨地址",
"shouhuodizhi": "收貨地址",
"wenzhangxiangqing": "文章詳情",
"feishiwushangpin": "非實物商品!",
"duihuanhoufahuo": "兌換物商品",
"xianshangfafang": "綫上發放",
"lingqushijian": "領取時間 {shijian}",
"faxingshijian": "發行開始時間 {shijian}",
"chakanwodekabao": "查看我的卡包",
"mi": "{mi}米",
"xialashuaxin": "下拉刷新",
"shifangshuaxin": "釋放刷新",
"shuaxinzhong": "刷新中....",
"shuaxinchenggong": "刷新成功",
"shuaxinshibai": "刷新失敗",
"zuozhe": "作者{zuozhe}",
"quanchangzhe": "全場{zhe}折",
"shanglajiazai": "上拉加載",
"jiazaishibai": "加載失敗",
"shifangjiazaigengduo": "釋放加載更多",
"meiyougengduoshujule": "沒有更多數據了",
"shangpinxiangqing": "商品詳情",
"kaiqiquanxian": "開啓權限",
"guanyu": "關於",
"linian": "理念",
"jingbilianmenghuiyuandian": "淨弼聯盟會員店",
"kaquan": "卡券",
"guanlidizhi": "管理地址",
"lingquanzhongxin": "領券中心",
"lianxishoujihao": "聯繫手機號",
"shangjiaquan": "商家券",
"manyuankeyong": "滿{yuan}可用",
"tijiao": "提交",
"changjianwenti": "常見問題",
"fankui": "反饋",
"quxiaozhifu": "取消支付",
"daifukuan": "待付款",
"quanbu": "全部",
"wuliuxinxi": "物流信息",
"huiyuankaxiangqing": "會員卡詳情",
"meiyougengduohuiyuanka": "沒有更多會員卡",
"yuemingxi": "餘額明細",
"chakanwodekaquan": "查看我的卡券",
"kelingqudeyouhuiquan": "可領取的卡券",
"dangqiandengji": "當前等級",
"xiayidengji": "下一等級",
"daoxiayidengji": "到下一等級",
"kaitongriqi": "開通日期:{date}",
"yiqiandao": "已簽到",
"quanchangtongyong": "全場通用",
"xiangqing": "詳情",
"yishiyong": "已使用",
"zanbuzhichixianshangdiancan": "暫不支持線上點餐",
"dakaidingwei": "打開定位",
"queding": "確定",
"qingxuanzeshiyongmendian": "請選擇使用門店",
"daizhifu": "待支付",
"yizhifu": "已支付",
"daiqueren": "待確認",
"shangjiaqueren": "商家確認",
"qingzhuo": "清桌",
"tuikuan": "退款",
"daizhizuo": "待製作",
"zhizuowancheng": "製作完成",
"daipeisong": "待配送",
"yihujiaoqishou": "已呼叫騎手",
"quhuozhong": "取貨中",
"yisongda": "已送達",
"yifahuo": "已發貨",
"peisongzhong": "配送中",
"yixinhuixiang": "一心迴響",
"guojiankangyoujishenghuo": "過健康有機生活",
"banben": "版本:{version}",
"waimai": "外賣",
"kuaidi": "快遞",
"shenqingtuikuan": "申請退款",
"zailaiyidan": "再來一單",
"gongjijianshangpin": "共{jian}件商品",
"dingdanyiwancheng": "订单已完成",
"peisongfangshi": "配送方式",
"dingdandaizhifu": "訂單待支付",
"dingdanyizhifu": "訂單已支付",
"shangjiazhengzaipeican": "商家正在配餐",
"dengdaiyonghuqucan": "等待用戶取餐",
"qucanhao": "取餐號",
"dingdanyiwancheng": "訂單已完成",
"dingdanyituikuan": "訂單已退款",
"zhengzaihujiaoqishou": "正在呼叫騎手",
"qishouyijiedanquhuozhong": "騎手已接單、取貨中",
"qishoupeisongzhongyujisongdashijian": "騎手配送中,預計送達時間",
"dingdanyisongda": "訂單送達",
"dingdanyiwancheng": "訂單已完成",
"dingdandaizhifu": "訂單待支付",
"dingdanyizhifu": "訂單已支付",
"shangjiayifahuo": "商家已發貨",
"huopinyisongda": "貨品已送達",
"zhengzaipeisong": "正在配送",
"daiqucan": "待取餐",
"yituikuan": "已退款",
"querenshouhuo": "確認收貨",
"chakanwuliu": "查看物流",
"zailaiyidan": "再來一單",
"shanchudingdan": "刪除訂單",
"qudanhao": "取膽號{num}",
"lingquchenggong": "領取成功",
"dianwolingqu": "點我領取",
"chengweidianpuzhuanshuhuiyuan": "成為專屬會員,享專屬權益",
"yinsishengming": "隱私聲明",
"dangqianbanben": "當前版本",
"tebieshengming": "特別聲明",
"shiyongbangzhu": "使用幫助",
"geiwopingfen": "給我評分",
"yilingqu": "已領取",
"yinsizhengce": "隱私政策",
"heji": "合計:",
"yuan": "元",
"gong": "共",
"jian": "件",
"nindingweigongnengweikaiqi": "您定位功能開關未開啟,請點擊去開啟定位",
"nindingweiquanxianweiyunxu": "您未开启位置权限,请点击确定申请权限",
"weilexiangnintuijianfujindemendianxinxi": "為了向您推薦附近的門店信息,推薦您在使用期間讓我們使用位置信息",
"dengdaishangjiaqueren": "等待商家確認",
"dingdandaifahuo": "訂單待發貨",
"gengduo": "更多",
"jituanchuangbanren": "集团创办人",
"zhengzaijiazai": "正在加載",
"quantian": "全天",
"yunfei": "運費",
"jiesuan": "結算",
"qinglihuancun": "清理緩存",
"chaungshirengushi": "創始人故事",
"jituanchuangshiren": "集團創始人",
"jianjie": "簡介:{jianjie}",
"zhengzaixiazaizhong": "正在下載中...",
"qingxuanzeyigemendian": "請選擇一個門店",
"muqianzanwuxingdianhuodong": "目前暫無星店活動",
"zanwuyouhuiquankelingqu": "暫無優惠券可領取",
"huiyuanjifen": "會員積分",
"huiyuanyue": "會員餘額",
"gongxinichengweibendianhuiyuan": "恭喜您,成為本店會員,快去享受超多的會員權益吧。",
"ninweidenglu": "您未登錄,請點擊去登錄",
"weilegeiningenghaodefuwu": "為了給您提供更好的服務,以及享受更加精彩的信息內容,請在使用使用期間登錄",
"qudenglu": "去登錄",
"weidenglu": "未登錄",
"youkedenglu": "遊客登錄",
"yishouquan": "已授權",
"qingshuruchongzhijine": "請輸入充值金額",
"yinshi": "飲食",
"shenghuoyule": "生活娛樂",
"bangong": "辦公",
"privacy_policy4": "并使用本機號碼登錄"
}

4
lib/login/login_page.dart

@ -19,6 +19,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:dio/dio.dart';
import 'package:photo_view/photo_view.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';
class LoginPage extends StatefulWidget {
final Map<String, dynamic> arguments;
@ -266,6 +267,9 @@ class _MyLoginPageState extends State<LoginPage> with TickerProviderStateMixin {
if (value.isSuccess) {
saveUserJson(value.data);
eventBus.fire(EventType(3));
xgFlutterPlugin.bindWithIdentifier(identify: mobile, bindType: XGBindType.account);
if (widget.arguments != null) {
Navigator.of(context).pop();
} else {

20
lib/main.dart

@ -52,6 +52,8 @@ import 'package:huixiang/union/union_details_page.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sharesdk_plugin/sharesdk_interface.dart';
import 'package:sharesdk_plugin/sharesdk_register.dart';
import 'package:tpns_flutter_plugin/tpns_flutter_plugin.dart';
import 'main_page.dart';
@ -81,14 +83,20 @@ void main() async {
runApp(MyApp(locale));
}
XgFlutterPlugin xgFlutterPlugin = XgFlutterPlugin();
initSdk() async {
print("object: initsdk");
///ios startXg前需要调用此方法
XgFlutterPlugin xgFlutterPlugin = XgFlutterPlugin();
xgFlutterPlugin.configureClusterDomainName("tpns.sh.tencent.com");
xgFlutterPlugin.setEnableDebug(true);
///iOS的appID信息Android信息在build.gradle文件中
xgFlutterPlugin.startXg("1680005688", "IYIB3R2XRE22");
ShareSDKRegister shareSDKRegister = ShareSDKRegister();
shareSDKRegister.setupWechat("wx3b269e795ed23e5f", "64020361b8ec4c99936c0e3999a9f249", "https://hx.lotus-wallet.com/app/");
shareSDKRegister.setupFacebook("523308712059457", "d3a1b6377100871799d8973fbe84794a", "回乡");
SharesdkPlugin.regist(shareSDKRegister);
}
EventBus eventBus = EventBus(sync: true);
@ -116,9 +124,8 @@ class MyApp extends StatelessWidget {
localeResolutionCallback: (locale, supportedLocales) {
print("locale: $locale");
print("supportedLocales: $supportedLocales");
// Localizations.maybeLocaleOf(context)
return appLocale ??
Locale.fromSubtags(languageCode: 'zh', countryCode: 'TW');
return appLocale ?? locale
/*Locale.fromSubtags(languageCode: 'zh', countryCode: 'TW')*/;
},
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
@ -126,6 +133,10 @@ class MyApp extends StatelessWidget {
GlobalWidgetsLocalizations.delegate,
S.delegate
],
localeListResolutionCallback: (List<Locale> locales, Iterable<Locale> supportedLocales) {
print("locale: ${locales[0]}");
return appLocale ?? locales[0];
},
supportedLocales: S.delegate.supportedLocales,
home: LoginPage(),
// home: MainPage(),
@ -135,7 +146,6 @@ class MyApp extends StatelessWidget {
return MediaQuery(
data: MediaQuery.of(context).copyWith(
textScaleFactor: textScaleFactor > 1.15 ? 1.15 : textScaleFactor,
// devicePixelRatio: devicePixelRatio * textScaleFactor
),
child: FlutterSmartDialog(child: widget),
);

4
lib/setting/setting_page.dart

@ -251,10 +251,12 @@ class _SettingPage extends State<SettingPage> {
logOut() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
sharedPreferences.clear();
// Navigator.of(context).popUntil(ModalRoute.withName('/router/login'));
Navigator.pushAndRemoveUntil(context, new MaterialPageRoute(
builder: (BuildContext context) {
if (xgFlutterPlugin != null) {
xgFlutterPlugin.stopXg();
}
return LoginPage();
},
), (route) => route == null);

159
lib/ui_test.dart

@ -1,159 +0,0 @@
import 'package:flutter/material.dart';
import 'dart:math' as math;
class UITest extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _UITest();
}
}
class _UITest extends State<UITest> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Color(0xFFF7F7F7),
elevation: 0,
title: Text(
"测试",
style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
),
leading: GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Container(
alignment: Alignment.centerRight,
margin: EdgeInsets.only(left: 10),
padding: EdgeInsets.all(6),
child: Icon(
Icons.arrow_back_ios,
color: Colors.black,
size: 24,
),
),
),
titleSpacing: 2,
leadingWidth: 56,
),
body: AspectRatio(
aspectRatio: 1,
child: PhysicalShape(
color: ElevationOverlay.applyOverlay(context, Colors.white, 2),
elevation: 2,
clipper: BottomAppBarClipper(
shape: CircularHorizontalNotchedRectangle(),
),
child: Container(
margin: EdgeInsets.all(50),
color: Colors.blue.withAlpha(123),
alignment: Alignment.center,
child: Text("主体内容"),
),
),
),
endDrawer: Drawer(),
bottomNavigationBar: BottomAppBar(
color: Colors.deepPurpleAccent,
shape: CircularNotchedRectangle(),
child: Container(
height: 50.0,
),
),
extendBody: true,
floatingActionButton: FloatingActionButton(
onPressed: () {
print("点击");
},
child: Icon(Icons.add),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
);
}
}
class BottomAppBarClipper extends CustomClipper<Path> {
final NotchedShape shape;
const BottomAppBarClipper({this.shape});
@override
Path getClip(Size size) {
final Rect button = Rect.fromCircle(center: Offset(size.width / 2, size.height / 2), radius: 20);
return shape.getOuterPath(Offset.zero & size, button?.inflate(2));
}
@override
bool shouldReclip(BottomAppBarClipper oldClipper) {
return true;
}
}
class CircularHorizontalNotchedRectangle extends NotchedShape {
@override
Path getOuterPath(Rect host, Rect guest) {
if (guest == null || !host.overlaps(guest))
return Path()..addRect(host);
//
//
final double notchRadius = guest.width / 2.0;
// 3
// A - B 线
// B - notchRadius
// C - B 线
// https:goo.glUfzrqn
const double s1 = 15.0;
const double s2 = 1.0;
final double r = notchRadius;
final double a = -1.0 * r - s2; // +s2
final double b = host.top - guest.center.dy; // y轴距离
final double n2 = math.sqrt(b * b * r * r * (a * a + b * b - r * r));
final double p2xA = ((a * r * r) - n2) / (a * a + b * b);
final double p2xB = ((a * r * r) + n2) / (a * a + b * b);
final double p2yA = math.sqrt(r * r - p2xA * p2xA);
final double p2yB = math.sqrt(r * r - p2xB * p2xB);
final List<Offset> p = List<Offset>.filled(6, null, growable: false);
// p0p1 p2 线 A
p[0] = Offset(a - s1, b);
p[1] = Offset(a, b);
final double cmp = b < 0 ? -1.0 : 1.0;
p[2] = cmp * p2yA > cmp * p2yB ? Offset(p2xA, p2yA) : Offset(p2xB, p2yB);
// p3p4 p5 线 B 线 A y
p[3] = Offset(-1.0 * p[2].dx, p[2].dy);
p[4] = Offset(-1.0 * p[1].dx, p[1].dy);
p[5] = Offset(-1.0 * p[0].dx, p[0].dy);
//
for (int i = 0; i < p.length; i += 1)
p[i] = p[i] + guest.center;
return Path()
..moveTo(host.left, host.top)
..lineTo(p[0].dx, p[0].dy)
..quadraticBezierTo(p[1].dx, p[1].dy, p[2].dx, p[2].dy)
..arcToPoint(
p[3],
radius: Radius.circular(notchRadius),
clockwise: false,
)
..quadraticBezierTo(p[4].dx, p[4].dy, p[5].dx, p[5].dy)
..lineTo(host.right, host.top)
..lineTo(host.right, host.bottom)
..lineTo(host.left, host.bottom)
..close();
}
}

56
lib/union/store_details_page.dart

@ -10,6 +10,9 @@ import 'package:huixiang/retrofit/data/base_data.dart';
import 'package:huixiang/retrofit/retrofit_api.dart';
import 'package:huixiang/view_widget/my_appbar.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sharesdk_plugin/sharesdk_defines.dart';
import 'package:sharesdk_plugin/sharesdk_interface.dart';
import 'package:sharesdk_plugin/sharesdk_map.dart';
class StoreDetailsPage extends StatefulWidget {
final Map<String, dynamic> arguments;
@ -54,10 +57,33 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
}
share2WeChat() async {
await registerWxApi(appId: "wx3b269e795ed23e5f", doOnAndroid: true, universalLink: "https://hx.lotus-wallet.com/app/");
shareToWeChat(WeChatShareWebPageModel(
"http://share-app.api.lotus-wallet.com/#/share?id=${widget.arguments["activityId"] ?? widget.arguments["articleId"]}",
scene: WeChatScene.SESSION));
// await registerWxApi(appId: "wx3b269e795ed23e5f", doOnAndroid: true, universalLink: "https://hx.lotus-wallet.com/app/");
// shareToWeChat(WeChatShareWebPageModel(
// "http://hx.lotus-wallet.com/index.html?id=${widget.arguments["activityId"] ?? widget.arguments["articleId"]}",
// scene: WeChatScene.SESSION));
// SharesdkPlugin.showMenu();
SSDKMap params = SSDKMap()
..setGeneral(
activity != null ? activity.mainTitle : article != null ? article.mainTitle : "",
activity != null ? activity.viceTitle : article != null ? article.viceTitle : "",
[],
"",
"",
"http://hx.lotus-wallet.com/index.html?id=${widget
.arguments["activityId"] ?? widget.arguments["articleId"]}",
"",
"",
"",
"",
SSDKContentTypes.webpage);
SharesdkPlugin.showMenu(null, null, params, (state, platform, userData, contentEntity, error) {
print("分享成功!$state");
print("分享成功!$platform");
print("分享成功!$userData");
print("分享成功!$contentEntity");
print("分享成功!$error");
print("分享成功!");
});
}
@override
@ -82,8 +108,8 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
title: activity != null
? activity.mainTitle
: article != null
? article.mainTitle
: "",
? article.mainTitle
: "",
titleSize: 18.sp,
titleColor: Colors.black,
),
@ -99,8 +125,8 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
activity != null
? activity.mainTitle
: article != null
? article.mainTitle
: "",
? article.mainTitle
: "",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
@ -114,7 +140,9 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
children: [
InkWell(
child: Text(
"${activity != null ? activity.storeName : (article != null && article.author != null) ? article.author.name : ""}",
"${activity != null ? activity.storeName : (article !=
null && article.author != null) ? article.author
.name : ""}",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 14.sp,
@ -136,8 +164,8 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
activity != null
? activity.createTime
: article != null
? article.createTime
: "",
? article.createTime
: "",
style: TextStyle(
fontWeight: FontWeight.normal,
fontSize: 12.sp,
@ -151,13 +179,13 @@ class _StoreDetailsPage extends State<StoreDetailsPage> {
data: activity != null
? activity.content
: article != null
? article.content
: "",
? article.content
: "",
customImageRenders: {
base64DataUriMatcher(): base64ImageRender(),
assetUriMatcher(): assetImageRender(),
networkSourceMatcher(extension: "svg"):
svgNetworkImageRender(),
svgNetworkImageRender(),
networkSourceMatcher(): networkImageRender(loadingWidget: () {
// return Image.asset("assets/image/default_1.png",);
return Container();

6
lib/view_widget/item_input_widget.dart

@ -84,9 +84,7 @@ class ItemInputWidget extends StatelessWidget {
),
],
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(radius),
),
borderRadius: BorderRadius.circular(radius),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
@ -166,7 +164,7 @@ class ItemInputWidget extends StatelessWidget {
),
flex: 5,
),
if (isShowBtn)
if (isShowBtn ?? false)
Expanded(
flex: 3,
child: Row(

2
lib/view_widget/mine_vip_view.dart

@ -14,7 +14,7 @@ class MineVipView extends StatelessWidget {
MineVipView(
this.vipLevel, {
this.padding = 16,
this.curLevel,
this.curLevel,
this.rankMax = 0,
this.rank = 0,
this.createTime = "",

3
lib/view_widget/no_data_view.dart

@ -7,8 +7,7 @@ class NoDataView extends StatelessWidget {
final double fontSize;
final EdgeInsets margin;
NoDataView(
{this.isShowBtn = true,
this.text,
{this.isShowBtn = true, this.text,
this.fontSize,
this.margin = const EdgeInsets.only(top: 30)});

6
lib/view_widget/pay_input_view.dart

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:huixiang/generated/l10n.dart';
import 'package:huixiang/view_widget/keyboard/custom_password_field_widget.dart';
import 'package:huixiang/view_widget/keyboard/keyboard_widget.dart';
import 'package:huixiang/view_widget/keyboard/pay_password.dart';
import 'package:huixiang/view_widget/keyboard/pay_password.dart' as keyevent;
class PayInputWidget extends StatefulWidget {
@override
@ -56,11 +56,11 @@ class _PayInputWidget extends State<PayInputWidget> {
),
Container(
child: MyKeyboard((event){
KeyEvent keyEvent = event;
keyevent.KeyEvent keyEvent = event;
setState(() {
if (!keyEvent.isCommit() && !keyEvent.isDelete() && password.length < 6) {
setState(() {
password += (event as KeyEvent).key;
password += (event as keyevent.KeyEvent).key;
});
} else {
if (keyEvent.isDelete() && password.length > 0) {

50
lib/view_widget/round_button.dart

@ -14,31 +14,37 @@ class RoundButton extends StatelessWidget {
final EdgeInsetsGeometry padding;
final GestureTapCallback callback;
RoundButton(
{Key key, this.text,
this.textColor = Colors.black,
this.fontSize = 10,
this.backgroup = Colors.white,
this.radius = 2,
this.img,
this.height,
this.width,
this.icons,
this.padding,
this.fontWeight = FontWeight.normal, this.callback,});
RoundButton({
Key key,
this.text,
this.textColor = Colors.black,
this.fontSize = 10,
this.backgroup = Colors.white,
this.radius = 2,
this.img,
this.height,
this.width,
this.icons,
this.padding,
this.fontWeight = FontWeight.normal,
this.callback,
});
@override
Widget build(BuildContext context) {
return GestureDetector(child: Container(
padding: padding,
width: width,
height: height,
alignment: Alignment.center,
decoration: BoxDecoration(
color: backgroup,
borderRadius: BorderRadius.all(Radius.circular(radius))),
child: buildText(),
),onTap: this.callback);
return GestureDetector(
child: Container(
padding: padding,
width: width,
height: height,
alignment: Alignment.center,
decoration: BoxDecoration(
color: backgroup,
borderRadius: BorderRadius.circular(radius),
),
child: buildText(),
),
onTap: this.callback);
}
Widget buildText() {

17
lib/view_widget/store_title_tab.dart

@ -41,17 +41,14 @@ class _StoreTitleTab extends State<StoreTitleTab> {
super.initState();
if (widget.scrollController != null) {
widget.scrollController.addListener(() {
RenderBox chiliRenderBox =
widget.chiliGlobalKey.currentContext.findRenderObject();
RenderBox milkTeaRenderBox =
widget.milkTeaGlobalKey.currentContext.findRenderObject();
RenderBox breadRenderBox =
widget.breadGlobalKey.currentContext.findRenderObject();
widget.scrollController?.addListener(() {
RenderBox chiliRenderBox = widget.chiliGlobalKey.currentContext.findRenderObject();
RenderBox milkTeaRenderBox = widget.milkTeaGlobalKey.currentContext.findRenderObject();
RenderBox breadRenderBox = widget.breadGlobalKey.currentContext.findRenderObject();
Offset chiliOffset = chiliRenderBox.localToGlobal(Offset.zero);
Offset milkTeaOffset = milkTeaRenderBox.localToGlobal(Offset.zero);
Offset breadOffset = breadRenderBox.localToGlobal(Offset.zero);
Offset chiliOffset = chiliRenderBox?.localToGlobal(Offset.zero);
Offset milkTeaOffset = milkTeaRenderBox?.localToGlobal(Offset.zero);
Offset breadOffset = breadRenderBox?.localToGlobal(Offset.zero);
var top = 96.h;
if (chiliOffset.dy <= top) {

302
pubspec.lock

File diff suppressed because it is too large Load Diff

3
pubspec.yaml

@ -70,7 +70,6 @@ dependencies:
event_bus: ^2.0.0
intl: ^0.17.0
shared_preferences: ^2.0.6
fluttertoast: ^8.0.7
flutter_smart_dialog: ^2.1.6
# url_launcher: ^6.0.5
@ -93,6 +92,8 @@ dependencies:
package_info: ^2.0.2
sharesdk_plugin: ^1.3.0
# jshare_flutter_plugin: ^2.1.2
dev_dependencies:
flutter_test:

Loading…
Cancel
Save