Kaynağa Gözat

翻译管家/华为app更新

master
jiahao 5 yıl önce
ebeveyn
işleme
1156781e00
25 değiştirilmiş dosya ile 593 ekleme ve 189 silme
  1. +8
    -7
      android/app/agconnect-services.json
  2. +1
    -1
      android/app/build.gradle
  3. +15
    -1
      i18n/en-US.json
  4. +14
    -1
      i18n/ja-JP.json
  5. +15
    -1
      i18n/ko-KR.json
  6. +14
    -1
      i18n/vi-VN.json
  7. +15
    -1
      i18n/zh-CN.json
  8. +14
    -1
      i18n/zh-HK.json
  9. +6
    -0
      ios/Podfile.lock
  10. +103
    -91
      lib/chat/ChatPage.dart
  11. +25
    -22
      lib/chat/ChatPageItem.dart
  12. +2
    -0
      lib/data/translate_hk_data_mgr.dart
  13. +218
    -6
      lib/generated/i18n.dart
  14. +1
    -1
      lib/home/homeMain.dart
  15. +55
    -7
      lib/home/realtimehelper/real_time_helper_page.dart
  16. +10
    -2
      lib/home/realtimehelper/translation_butler_page.dart
  17. +24
    -6
      lib/home/realtimehelper/translation_order_push_dialog.dart
  18. +2
    -2
      lib/home/realtimehelper/travel_butler_page.dart
  19. +3
    -4
      lib/models/last_msg_description.dart
  20. +29
    -23
      lib/proto/transhousekeeper.pb.dart
  21. +5
    -4
      lib/proto/transhousekeeper.pbjson.dart
  22. +5
    -4
      lib/proto/transhousekeeper.proto
  23. +2
    -2
      lib/utils/CustomUI.dart
  24. +5
    -0
      lib/utils/HttpUtil.dart
  25. +2
    -1
      lib/utils/msgHandler.dart

+ 8
- 7
android/app/agconnect-services.json Dosyayı Görüntüle

@@ -5,11 +5,12 @@
},
"client":{
"cp_id":"890086000300385560",
"product_id":"9105385871708389411",
"client_id":"270664671340528640",
"client_secret":"00CC308FC014C334D58CF79471B490FD6274BC39FEAAD89B63E762871DB4EBCC",
"app_id":"101598177",
"package_name":"com.cyhd.henhoandroid"
"product_id":"9105385871708615262",
"client_id":"330243365088003136",
"client_secret":"7A8C08A4377B06C3FE950D55511A0F7CBA4164C9319E06E8401A33BBCBDCFA7C",
"app_id":"101961905",
"package_name":"com.cyhd.henhoandroid",
"api_key":"CV6qgj5CPtQonVHTR8gGJxvdRrkeBaZ+KqTsHcRmUyTtSgpYuBknlD5Z8mb3ob8TH7Kq2FJknGNbmserIjlUfmiuUZ2D"
},
"service":{
"analytics":{
@@ -18,9 +19,9 @@
"channel_id":""
},
"ml":{
"mlservice_url":"ml-api-dra.ai.hicloud.com,ml-api-dra.ai.dbankcloud.cn"
"mlservice_url":"ml-api-dra.ai.dbankcloud.com,ml-api-dra.ai.dbankcloud.cn"
}
},
"region":"SG",
"configuration_version":"1.0"
}
}

+ 1
- 1
android/app/build.gradle Dosyayı Görüntüle

@@ -70,7 +70,7 @@ android {
XIAOMI_APPKEY:"MI-5221829498125",//小米平台注册的appkey
XIAOMI_APPID:"MI-2882303761518294125",//小米平台注册的appid
//
HUAWEI_APPID:"101598177",//华为平台注册的appid
HUAWEI_APPID:"101961905",//华为平台注册的appid
OPPO_APPKEY : "OP-cd9ece5049514019842f54d537068018", // OPPO平台注册的appkey


+ 15
- 1
i18n/en-US.json Dosyayı Görüntüle

@@ -1226,5 +1226,19 @@
"forward":"Forward",
"copy_download_url":"复制下载地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有图片违规"
"hava_error_photo":"有图片违规",
"translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 14
- 1
i18n/ja-JP.json Dosyayı Görüntüle

@@ -1226,5 +1226,18 @@
"forward":"转发",
"copy_download_url":"复制下载地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有图片违规"
"hava_error_photo":"有图片违规",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 15
- 1
i18n/ko-KR.json Dosyayı Görüntüle

@@ -1226,5 +1226,19 @@
"forward":"转发",
"copy_download_url":"复制下载地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有图片违规"
"hava_error_photo":"有图片违规",
"translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 14
- 1
i18n/vi-VN.json Dosyayı Görüntüle

@@ -1226,5 +1226,18 @@
"forward": "转发",
"copy_download_url": "复制下载地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有图片违规"
"hava_error_photo":"有图片违规",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 15
- 1
i18n/zh-CN.json Dosyayı Görüntüle

@@ -1226,5 +1226,19 @@
"forward":"转发",
"copy_download_url":"复制下载地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有图片违规"
"hava_error_photo":"有图片违规",
"translation_butler_evaluation_tips2": "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 14
- 1
i18n/zh-HK.json Dosyayı Görüntüle

@@ -1226,5 +1226,18 @@
"forward":"转发",
"copy_download_url":"複製下載地址",
"total_friends_nus":"共/s1位朋友",
"hava_error_photo":"有圖片違規"
"hava_error_photo":"有圖片違規",
"translation_butler_push_order_time": "时间:今天/s1 时长:",
"translation_butler_push_order_time2": "下单时间:今天/s1 等待时长:",
"translation_butler_title3": "大神专属",
"translation_butler_start_receive_order": "开启接单",
"translation_butler_stop_receive_order": "未开启接单",
"translation_butler_stop_tips": "翻译人员无法进入创建订单",
"translation_butler_scenes2": "场景:",
"translation_butler_last_item_start": "[翻译管家服务开始]",
"translation_butler_last_item_end": "[翻译管家服务结束]",
"travel_start": "起点",
"travel_end": "终点",
"translation_butler_order_time_out": "翻译订单超时已被取消"
}

+ 6
- 0
ios/Podfile.lock Dosyayı Görüntüle

@@ -30,6 +30,8 @@ PODS:
- connectivity (0.0.1):
- Flutter
- Reachability
- device_info (0.0.1):
- Flutter
- easy_contact_picker (0.0.1):
- Flutter
- FBSDKCoreKit (5.13.1):
@@ -167,6 +169,7 @@ DEPENDENCIES:
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
- city_pickers (from `.symlinks/plugins/city_pickers/ios`)
- connectivity (from `.symlinks/plugins/connectivity/ios`)
- device_info (from `.symlinks/plugins/device_info/ios`)
- easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
@@ -249,6 +252,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/city_pickers/ios"
connectivity:
:path: ".symlinks/plugins/connectivity/ios"
device_info:
:path: ".symlinks/plugins/device_info/ios"
easy_contact_picker:
:path: ".symlinks/plugins/easy_contact_picker/ios"
file_picker:
@@ -351,6 +356,7 @@ SPEC CHECKSUMS:
Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f
city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35
connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75
device_info: cbf09d2ec12aa7110e0b09fabe54b5bd6c8efe74
easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
FBSDKCoreKit: 8fb98209109fb684937f05d534305edb18c20207
FBSDKLoginKit: c7c6ffd9ca9ea45aee32361840af040ad8f6706a


+ 103
- 91
lib/chat/ChatPage.dart Dosyayı Görüntüle

@@ -373,98 +373,110 @@ class _ChatPageState extends State<ChatPage> {
];
})));
return Stack(
children: <Widget>[
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => _keyboardIndexProvider),
Provider<bool>.value(value: false),
Provider<int>.value(value: widget.friendId),
],
child: GestureDetector(
onTap: hideKeyBoard,
child: ExtendedTextSelectionPointerHandler(
///选择文字,消除弹窗
builder: (states) {
return Listener(
child: Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: const Color(0xFFE2E9F1),
appBar: AppBar(
title: Text(
'${Provider.of<RefNameProvider>(context).getRefName(friendInfo.userId, friendInfo.nickName)}',
textScaleFactor: 1.0,
style: TextStyle(
color: Constants.BlackTextColor,
fontSize: 16.47),
),
leading: CustomUI.buildCustomLeading(context,onTap:(){
if(isTranslateButler && !isTranslateButlerFinish){
if(UserData().isTranslateUser){
showToast('翻译服务未结束不能主动结束');
}else{
CustomUI.buildTowConfirm(
context,
'是否提前结束翻译管家服务?',
I18n.of(context).confirm,
(){
setState(() {
isTranslateButlerFinish=true;
});
MsgHandler.sendEndTransHKOrderReq();
Navigator.of(context).pop();
},
'取消',
(){ Navigator.of(context).pop();});
}
}else{
Navigator.of(context).pop();
}
}), //todo
titleSpacing: -10,
centerTitle: false,
elevation: 1,
actions: actions),
body: SafeArea(
child: Column(
children: <Widget>[
NetStateWidget(),
(isTranslateButler&!isTranslateButlerFinish)
? _buildTranslationButler()
: Container(),
Expanded(child: _buildMessageList()),
InputBar(sendMsg: sendMsg,isTranslateHK: isTranslateButler,),
],
))),
behavior: HitTestBehavior.translucent,
onPointerDown: (value) {
for (var state in states) {
if (!state.containsPosition(value.position)) {
//clear other selection
state.clearSelection();
}
}
},
onPointerMove: (value) {
//clear other selection
for (var state in states) {
if (!state.containsPosition(value.position)) {
return WillPopScope(
child: Stack(
children: <Widget>[
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => _keyboardIndexProvider),
Provider<bool>.value(value: false),
Provider<int>.value(value: widget.friendId),
],
child: GestureDetector(
onTap: hideKeyBoard,
child: ExtendedTextSelectionPointerHandler(
///选择文字,消除弹窗
builder: (states) {
return Listener(
child: Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: const Color(0xFFE2E9F1),
appBar: AppBar(
title: Text(
'${Provider.of<RefNameProvider>(context).getRefName(friendInfo.userId, friendInfo.nickName)}',
textScaleFactor: 1.0,
style: TextStyle(
color: Constants.BlackTextColor,
fontSize: 16.47),
),
leading: CustomUI.buildCustomLeading(context,onTap:(){
goBackCheck();
}),
titleSpacing: -10,
centerTitle: false,
elevation: 1,
actions: actions),
body: SafeArea(
child: Column(
children: <Widget>[
NetStateWidget(),
(isTranslateButler&!isTranslateButlerFinish)
? _buildTranslationButler()
: Container(),
Expanded(child: _buildMessageList()),
InputBar(sendMsg: sendMsg,isTranslateHK: isTranslateButler,),
],
))),
behavior: HitTestBehavior.translucent,
onPointerDown: (value) {
for (var state in states) {
if (!state.containsPosition(value.position)) {
//clear other selection
state.clearSelection();
}
}
},
onPointerMove: (value) {
//clear other selection
state.clearSelection();
}
}
for (var state in states) {
if (!state.containsPosition(value.position)) {
//clear other selection
state.clearSelection();
}
}
},
);
},
);
},
))),
isTranslateButler ? getAudioChatView() : Container(),
isTranslateButler ? zoomAudioButton() : Container()
],
);
))),
isTranslateButler ? getAudioChatView() : Container(),
isTranslateButler ? zoomAudioButton() : Container()
],
),
onWillPop: () {
goBackCheck();
return Future.value(true);
});
}
goBackCheck(){
if(isTranslateButler && !isTranslateButlerFinish){
if(UserData().isTranslateUser){
showToast('翻译服务未结束不能主动结束');
}else{
CustomUI.buildTowConfirm(
context,
'是否提前结束翻译管家服务?',
I18n.of(context).confirm,
(){
setState(() {
isTranslateButlerFinish=true;
});
MsgHandler.sendEndTransHKOrderReq();
Navigator.of(context).pop();
},
'取消',
(){ Navigator.of(context).pop();});
}
}else{
Navigator.of(context).pop();
}
}
Widget getAudioChatView() {
@@ -510,7 +522,7 @@ class _ChatPageState extends State<ChatPage> {
bool isShowZoomButton = true;
GlobalKey mykey = GlobalKey();
double dx = Screen.width , dy = Screen.height/2;
double dx = 0 , dy = 0;
double zoomButtonSize = 60;
void dragEvent(DragUpdateDetails details) {


+ 25
- 22
lib/chat/ChatPageItem.dart Dosyayı Görüntüle

@@ -1543,6 +1543,9 @@ class _ChatPageItemState extends State<ChatPageItem>
Widget _buildServiceCard(bool isStart, Function callBack) {
String endStr = UserData().isTranslateUser?I18n.of(context).translation_butler_evaluation_tips2:I18n.of(context).translation_butler_evaluation_tips;
return Container(
alignment: Alignment.center,
@@ -1558,28 +1561,28 @@ class _ChatPageItemState extends State<ChatPageItem>
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15),
child: Row(
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
isStart
? I18n.of(context).translation_butler_start_service
: I18n.of(context).translation_butler_service_end,
textScaleFactor: 1.0,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 15),
),
Text(
isStart
? I18n.of(context).translation_butler_start_tips
: I18n.of(context).translation_butler_evaluation_tips,
textScaleFactor: 1.0,
style: TextStyle(
color: Color(0xFF797979), fontSize: 13),
)
],
),
isStart
Expanded(child: Container( child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
isStart
? I18n.of(context).translation_butler_start_service
: I18n.of(context).translation_butler_service_end,
textScaleFactor: 1.0,
style: TextStyle(
color: AppColors.NewAppbarTextColor, fontSize: 15),
),
Text(
isStart
? I18n.of(context).translation_butler_start_tips
: endStr,
textScaleFactor: 1.0,
style: TextStyle(
color: Color(0xFF797979), fontSize: 13),
),
],
),)),
(isStart||UserData().isTranslateUser)
? Container()
: Expanded(
child: Container(


+ 2
- 0
lib/data/translate_hk_data_mgr.dart Dosyayı Görüntüle

@@ -7,6 +7,7 @@ class TranslateOrder{
int tLanguage;
int scenes;
String desc;
String userName;
}

class TranslateHKMgr {
@@ -25,6 +26,7 @@ class TranslateHKMgr {

String orderId; ///用户发起的订单Id
int waitNum=0;
int startWaitTime=0;

bool isUser=false; ///是用户或者翻译官



+ 218
- 6
lib/generated/i18n.dart Dosyayı Görüntüle

@@ -2489,6 +2489,32 @@ class I18n implements WidgetsLocalizations {
String get total_friends_nus => "共/s1位朋友";
/// "有图片违规"
String get hava_error_photo => "有图片违规";
/// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"
String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知";
/// "时间:今天/s1 时长:"
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
String get translation_butler_title3 => "大神专属";
/// "开启接单"
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
String get travel_start => "起点";
/// "终点"
String get travel_end => "终点";
/// "翻译订单超时已被取消"
String get translation_butler_order_time_out => "翻译订单超时已被取消";
}

class _I18n_en_US extends I18n {
@@ -6185,6 +6211,42 @@ class _I18n_vi_VN extends I18n {
/// "有图片违规"
@override
String get hava_error_photo => "有图片违规";
/// "时间:今天/s1 时长:"
@override
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
@override
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
@override
String get translation_butler_title3 => "大神专属";
/// "开启接单"
@override
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
@override
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
@override
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
@override
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
@override
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
@override
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
@override
String get travel_start => "起点";
/// "终点"
@override
String get travel_end => "终点";
/// "翻译订单超时已被取消"
@override
String get translation_butler_order_time_out => "翻译订单超时已被取消";

@override
TextDirection get textDirection => TextDirection.ltr;
@@ -9877,6 +9939,42 @@ class _I18n_zh_HK extends I18n {
/// "有圖片違規"
@override
String get hava_error_photo => "有圖片違規";
/// "时间:今天/s1 时长:"
@override
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
@override
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
@override
String get translation_butler_title3 => "大神专属";
/// "开启接单"
@override
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
@override
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
@override
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
@override
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
@override
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
@override
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
@override
String get travel_start => "起点";
/// "终点"
@override
String get travel_end => "终点";
/// "翻译订单超时已被取消"
@override
String get translation_butler_order_time_out => "翻译订单超时已被取消";

@override
TextDirection get textDirection => TextDirection.ltr;
@@ -13569,6 +13667,45 @@ class _I18n_zh_CN extends _I18n_zh_HK {
/// "有图片违规"
@override
String get hava_error_photo => "有图片违规";
/// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"
@override
String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知";
/// "时间:今天/s1 时长:"
@override
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
@override
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
@override
String get translation_butler_title3 => "大神专属";
/// "开启接单"
@override
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
@override
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
@override
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
@override
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
@override
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
@override
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
@override
String get travel_start => "起点";
/// "终点"
@override
String get travel_end => "终点";
/// "翻译订单超时已被取消"
@override
String get translation_butler_order_time_out => "翻译订单超时已被取消";

@override
TextDirection get textDirection => TextDirection.ltr;
@@ -14795,9 +14932,9 @@ class _I18n_ko_KR extends I18n {
/// "그의 사교 아이디"
@override
String get his_account => "그의 사교 아이디";
/// "복"
/// "복"
@override
String get copy => "복";
String get copy => "복";
/// "내 사교 아이디를 보내기"
@override
String get send_account => "내 사교 아이디를 보내기";
@@ -15155,12 +15292,12 @@ class _I18n_ko_KR extends I18n {
/// "앱을 친구에게 공유하다"
@override
String get share_app => "앱을 친구에게 공유하다";
/// "질문이 있으니까 도움이 필요하다"
/// "질문&도움"
@override
String get need_help => "질문이 있으니까 도움이 필요하다";
/// "고객을 연락하다"
String get need_help => "질문&도움";
/// "고객센터"
@override
String get need_help2 => "고객을 연락하다";
String get need_help2 => "고객센터";
/// "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"
@override
String get need_help3 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!";
@@ -17261,6 +17398,45 @@ class _I18n_ko_KR extends I18n {
/// "有图片违规"
@override
String get hava_error_photo => "有图片违规";
/// "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知"
@override
String get translation_butler_evaluation_tips2 => "翻译服务已结束,辛苦你了。请保持在线,留意新订单通知";
/// "时间:今天/s1 时长:"
@override
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
@override
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
@override
String get translation_butler_title3 => "大神专属";
/// "开启接单"
@override
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
@override
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
@override
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
@override
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
@override
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
@override
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
@override
String get travel_start => "起点";
/// "终点"
@override
String get travel_end => "终点";
/// "翻译订单超时已被取消"
@override
String get translation_butler_order_time_out => "翻译订单超时已被取消";

@override
TextDirection get textDirection => TextDirection.ltr;
@@ -20953,6 +21129,42 @@ class _I18n_ja_JP extends I18n {
/// "有图片违规"
@override
String get hava_error_photo => "有图片违规";
/// "时间:今天/s1 时长:"
@override
String get translation_butler_push_order_time => "时间:今天/s1 时长:";
/// "下单时间:今天/s1 等待时长:"
@override
String get translation_butler_push_order_time2 => "下单时间:今天/s1 等待时长:";
/// "大神专属"
@override
String get translation_butler_title3 => "大神专属";
/// "开启接单"
@override
String get translation_butler_start_receive_order => "开启接单";
/// "未开启接单"
@override
String get translation_butler_stop_receive_order => "未开启接单";
/// "翻译人员无法进入创建订单"
@override
String get translation_butler_stop_tips => "翻译人员无法进入创建订单";
/// "场景:"
@override
String get translation_butler_scenes2 => "场景:";
/// "[翻译管家服务开始]"
@override
String get translation_butler_last_item_start => "[翻译管家服务开始]";
/// "[翻译管家服务结束]"
@override
String get translation_butler_last_item_end => "[翻译管家服务结束]";
/// "起点"
@override
String get travel_start => "起点";
/// "终点"
@override
String get travel_end => "终点";
/// "翻译订单超时已被取消"
@override
String get translation_butler_order_time_out => "翻译订单超时已被取消";

@override
TextDirection get textDirection => TextDirection.ltr;


+ 1
- 1
lib/home/homeMain.dart Dosyayı Görüntüle

@@ -279,7 +279,7 @@ class _HomeMainState extends State<HomeMain> {
TranslateOrder order = data;
CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: order.orderId,scenes: order.scenes,desc: order.desc,createTime: order.createTime);
CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: order.orderId,scenes: order.scenes,desc: order.desc,createTime: order.createTime,userName: order.userName);
}
startTranslateHKChat(var friendID){


+ 55
- 7
lib/home/realtimehelper/real_time_helper_page.dart Dosyayı Görüntüle

@@ -3,7 +3,10 @@ import 'package:chat/home/realtimehelper/translation_butler_page.dart';
import 'package:chat/home/realtimehelper/travel_butler_page.dart';
import 'package:chat/models/group_info_model.dart';
import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/TokenMgr.dart';
import 'package:chat/utils/screen.dart';
import 'package:dio/dio.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:oktoast/oktoast.dart';
@@ -25,19 +28,64 @@ class RealTimeHelperPage extends StatefulWidget {

class RealTimeHelperPageState extends State<RealTimeHelperPage> {

bool isTranslateHKLogin = true;
bool isTranslateHKLogin = false;


bool isReady=false;
@override
void initState() {
super.initState();
MessageMgr().on('update_system',refresh);
WidgetsBinding.instance.addPostFrameCallback((_) {
isTranslateAndStatus();
});

}

refresh(args){
isTranslateAndStatus();
}


///实时帮-翻译人员状态,是否是翻译人员
isTranslateAndStatus() async {
Map data = {
"userId": UserData().basicInfo.userId,
};
data['sign'] = TokenMgr().getSign(data);
Response res = await HttpUtil().post('steward/userStatus', data: data);

if (res == null) {
print('请求异常');
return;
}
var resData = res.data;
if (resData['code'] == 0) {
isReady=true;
print('xxxdksldsd $resData');
UserData().isTranslateUser = resData['data']['isTranslateUser'] == 1;
int status = resData['data']['Status'] ;

if(status==1){
isTranslateHKLogin=true;
}

setState(() {
});
print('翻译人员状态 status $status isTranslateUser ${UserData().isTranslateUser} ');
}else{
print('获取翻译人员翻译人员状态 失败 ${resData['msg']}');
}
}


@override
void dispose() {
// MessageMgr().off('Update Group Info', updateGroupInfo);
super.dispose();
MessageMgr().on('update_system',refresh);
}


@override
Widget build(BuildContext context) {
Widget appBar = AppBar(
@@ -80,7 +128,7 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> {
children: <Widget>[
Container(
alignment: Alignment.center,
child: fixedText('大神专属', color: Colors.white, fontSize: 21),
child: fixedText(I18n.of(context).translation_butler_title3, color: Colors.white, fontSize: 21),
),
UnconstrainedBox(child: InkWell(onTap: (){

@@ -99,16 +147,16 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> {
decoration: BoxDecoration(
border: Border.all(color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, width: 1),
borderRadius: BorderRadius.circular(11)),
child: fixedText(isTranslateHKLogin?'开启接单':'未开启接单', color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, fontSize: 15),
child: fixedText(isTranslateHKLogin?I18n.of(context).translation_butler_start_receive_order:I18n.of(context).translation_butler_stop_receive_order, color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, fontSize: 15),
),),),
Container(
padding: EdgeInsets.only(left: 13,top: 20),
child: fixedText('实时帮', color: Colors.white, fontSize: 22,fontWeight: FontWeight.w700),
child: fixedText(I18n.of(context).real_time_helper, color: Colors.white, fontSize: 22,fontWeight: FontWeight.w700),
),
helperCard(I18n.of(context).translation_butler,
R.assetsImagesImgTranslationButler, () {
if (UserData().isTranslateUser) {
showToast('翻译人员无法进入创建订单');
showToast(I18n.of(context).translation_butler_stop_tips);
} else {
Navigator.of(context).push(
MaterialPageRoute(
@@ -199,7 +247,7 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> {
),
),
),
onTap: callBack,
onTap: isReady?callBack:null,
);
}
}

+ 10
- 2
lib/home/realtimehelper/translation_butler_page.dart Dosyayı Görüntüle

@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:ffi';

import 'package:chat/data/UserData.dart';
import 'package:chat/data/translate_hk_data_mgr.dart';
@@ -84,6 +85,12 @@ class TranslationButlerPageState extends State<TranslationButlerPage> {
setState(() {});
}

///订单没有人接,超时,服务器会发送取消订单通知
cancelOrder(args){
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY;
refreshOrder(null);
}

@override
void initState() {
super.initState();
@@ -94,7 +101,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> {
initData();

MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder);
MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder);
WidgetsBinding.instance.addPostFrameCallback((_) {


@@ -143,7 +150,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> {
return;
}
isCreatingOrder=true;
TranslateHKMgr().startWaitTime=DateTime.now().millisecondsSinceEpoch;
MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg);
extraMsg='';

@@ -176,6 +183,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> {
void dispose() {
waitTimer?.cancel();
MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder);
MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder);
if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) {
print('保存时间戳$timeStamp');
SPUtils.save(Constants.TranslationHelper, timeStamp.toString());


+ 24
- 6
lib/home/realtimehelper/translation_order_push_dialog.dart Dosyayı Görüntüle

@@ -1,3 +1,4 @@
import 'package:chat/data/UserData.dart';
import 'package:chat/data/constants.dart';
import 'package:chat/data/translate_hk_data_mgr.dart';
import 'package:chat/generated/i18n.dart';
@@ -18,13 +19,15 @@ class TranslateOrderPushPage extends StatefulWidget {
String desc;
Function userStartChat;
int createTime;
String userName;

TranslateOrderPushPage(this.isUser,
{this.orderId,
this.scenes,
this.desc,
this.userStartChat,
this.createTime});
this.createTime,
this.userName});

@override
State<StatefulWidget> createState() {
@@ -59,6 +62,10 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> {
super.didChangeDependencies();
}

String withZero(int num){
return num<10?'0$num':'$num';
}

@override
Widget build(BuildContext context) {
// TODO: implement build
@@ -69,8 +76,19 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> {
I18n.of(context).translation_scenes_4,
];

String translateStr= '时间:今天11:45 时长:5${I18n.of(context).minute}';
String userStr= '下单时间:今天11:45 等待时长:10分钟';
DateTime date = UserData().isTranslateUser?DateTime.now():DateTime.fromMillisecondsSinceEpoch(TranslateHKMgr().startWaitTime);
String time = '${withZero(date.hour)}:${withZero(date.minute)}';

int second = (DateTime.now().millisecondsSinceEpoch-TranslateHKMgr().startWaitTime)~/1000;
String userWaitStr ;
if( second>60){
userWaitStr = (second~/60).toString()+I18n.of(context).minute;
}else{
userWaitStr = second.toString()+I18n.of(context).second;
}

String translateStr= I18n.of(context).translation_butler_push_order_time.replaceAll('/s1', time)+'5${I18n.of(context).minute}';
String userStr= I18n.of(context).translation_butler_push_order_time2.replaceAll('/s1', time)+userWaitStr;

return UnconstrainedBox(
alignment: Alignment.topCenter,
@@ -109,7 +127,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> {
),
Text(
I18n.of(context).translation_butler_dialog_order.replaceAll(
'/s1', widget.isUser ? I18n.of(context).you : 'xxx'),
'/s1', widget.isUser ? I18n.of(context).you : widget.userName),
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style: TextStyle(
@@ -128,7 +146,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> {
widget.isUser
? Container()
: Text(
'场景:${scenesList[widget.scenes]}',
'${I18n.of(context).translation_butler_scenes2}:${scenesList[widget.scenes]}',
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style:
@@ -138,7 +156,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> {
widget.isUser
? Container()
: Text(
'更多描述:${widget.desc}',
'${I18n.of(context).translation_more_desc}:${widget.desc}',
textScaleFactor: 1.0,
textAlign: TextAlign.left,
style:


+ 2
- 2
lib/home/realtimehelper/travel_butler_page.dart Dosyayı Görüntüle

@@ -247,7 +247,7 @@ class TravelButlerPageState extends State<TravelButlerPage> {

Widget positionLayout(bool isStart){

String str = isStart?'我的位置':'你要去哪儿';
String str = isStart?I18n.of(context).travel_my_location:I18n.of(context).travel_go_where;
if(isStart && startResult!=null && startResult.address!=null){
str = startResult.address;
}else if (!isStart && endResult!=null &&endResult.address!=null){
@@ -255,7 +255,7 @@ class TravelButlerPageState extends State<TravelButlerPage> {
}
return Container(height:50,child: Row(mainAxisSize: MainAxisSize.max, children: <Widget>[
Expanded(child: Container( child: fixedText(str,color: Colors.black,fontSize: 16),)),
fixedText(isStart?'起点':'终点',color: Color(0xff797979),fontSize: 14)
fixedText(isStart?I18n.of(context).travel_start:I18n.of(context).travel_end,color: Color(0xff797979),fontSize: 14)
],),);




+ 3
- 4
lib/models/last_msg_description.dart Dosyayı Görüntüle

@@ -140,15 +140,14 @@ class _LastMsgDescriptionState extends State<LastMsgDescription> {
if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){
///翻译管家的 通知消息
desc = '翻译管家---';
print('翻译管家的 通知消息-');
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent);
if(res.noticeType==TransHKChatNoticeType.StartChat){
return '[翻译管家服务开始]';
desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_start;
}else if(res.noticeType==TransHKChatNoticeType.EndChat){
return '[翻译管家服务结束]';
desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_end;
}else{
return '';
desc = '';
}


+ 29
- 23
lib/proto/transhousekeeper.pb.dart Dosyayı Görüntüle

@@ -263,10 +263,11 @@ class EndTransHKOrderRes extends $pb.GeneratedMessage {
class DeliveryTransHKOrderPush extends $pb.GeneratedMessage {
static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeliveryTransHKOrderPush', package: const $pb.PackageName('yl_pb'))
..aOS(1, 'orderId')
..aInt64(2, 'createTime')
..a<$core.int>(3, 'tLanguage', $pb.PbFieldType.OU3)
..a<$core.int>(4, 'scenes', $pb.PbFieldType.O3)
..aOS(5, 'desc')
..a<$0.BaseUserInfo>(2, 'employer', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create)
..aInt64(3, 'createTime')
..a<$core.int>(4, 'tLanguage', $pb.PbFieldType.OU3)
..a<$core.int>(5, 'scenes', $pb.PbFieldType.O3)
..aOS(6, 'desc')
..hasRequiredFields = false
;

@@ -289,25 +290,30 @@ class DeliveryTransHKOrderPush extends $pb.GeneratedMessage {
$core.bool hasOrderId() => $_has(0);
void clearOrderId() => clearField(1);

Int64 get createTime => $_getI64(1);
set createTime(Int64 v) { $_setInt64(1, v); }
$core.bool hasCreateTime() => $_has(1);
void clearCreateTime() => clearField(2);

$core.int get tLanguage => $_get(2, 0);
set tLanguage($core.int v) { $_setUnsignedInt32(2, v); }
$core.bool hasTLanguage() => $_has(2);
void clearTLanguage() => clearField(3);

$core.int get scenes => $_get(3, 0);
set scenes($core.int v) { $_setSignedInt32(3, v); }
$core.bool hasScenes() => $_has(3);
void clearScenes() => clearField(4);

$core.String get desc => $_getS(4, '');
set desc($core.String v) { $_setString(4, v); }
$core.bool hasDesc() => $_has(4);
void clearDesc() => clearField(5);
$0.BaseUserInfo get employer => $_getN(1);
set employer($0.BaseUserInfo v) { setField(2, v); }
$core.bool hasEmployer() => $_has(1);
void clearEmployer() => clearField(2);

Int64 get createTime => $_getI64(2);
set createTime(Int64 v) { $_setInt64(2, v); }
$core.bool hasCreateTime() => $_has(2);
void clearCreateTime() => clearField(3);

$core.int get tLanguage => $_get(3, 0);
set tLanguage($core.int v) { $_setUnsignedInt32(3, v); }
$core.bool hasTLanguage() => $_has(3);
void clearTLanguage() => clearField(4);

$core.int get scenes => $_get(4, 0);
set scenes($core.int v) { $_setSignedInt32(4, v); }
$core.bool hasScenes() => $_has(4);
void clearScenes() => clearField(5);

$core.String get desc => $_getS(5, '');
set desc($core.String v) { $_setString(5, v); }
$core.bool hasDesc() => $_has(5);
void clearDesc() => clearField(6);
}

class CancellationTransHKOrderPush extends $pb.GeneratedMessage {


+ 5
- 4
lib/proto/transhousekeeper.pbjson.dart Dosyayı Görüntüle

@@ -90,10 +90,11 @@ const DeliveryTransHKOrderPush$json = const {
'1': 'DeliveryTransHKOrderPush',
'2': const [
const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'},
const {'1': 'CreateTime', '3': 2, '4': 1, '5': 3, '10': 'CreateTime'},
const {'1': 'TLanguage', '3': 3, '4': 1, '5': 13, '10': 'TLanguage'},
const {'1': 'Scenes', '3': 4, '4': 1, '5': 5, '10': 'Scenes'},
const {'1': 'Desc', '3': 5, '4': 1, '5': 9, '10': 'Desc'},
const {'1': 'Employer', '3': 2, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Employer'},
const {'1': 'CreateTime', '3': 3, '4': 1, '5': 3, '10': 'CreateTime'},
const {'1': 'TLanguage', '3': 4, '4': 1, '5': 13, '10': 'TLanguage'},
const {'1': 'Scenes', '3': 5, '4': 1, '5': 5, '10': 'Scenes'},
const {'1': 'Desc', '3': 6, '4': 1, '5': 9, '10': 'Desc'},
],
};



+ 5
- 4
lib/proto/transhousekeeper.proto Dosyayı Görüntüle

@@ -68,10 +68,11 @@ message EndTransHKOrderRes{
//Msg= 20 派送订单推送
message DeliveryTransHKOrderPush {
optional string OrderId =1; //订单号
optional int64 CreateTime = 2; //创建时间
optional uint32 TLanguage =3; //翻译语言
optional int32 Scenes =4; //场景
optional string Desc =5; //描述
optional BaseUserInfo Employer = 2; //雇主
optional int64 CreateTime = 3; //创建时间
optional uint32 TLanguage =4; //翻译语言
optional int32 Scenes =5; //场景
optional string Desc =6; //描述
}

//Msg= 21 订单取消推送


+ 2
- 2
lib/utils/CustomUI.dart Dosyayı Görüntüle

@@ -1267,11 +1267,11 @@ class CustomUI {
///** isUser 是否是用户,或为 翻译
static void buildTranslationHelperOrderDialog(
BuildContext context, bool isUser,
{String orderId, int scenes = 0, String desc,Function userStartChat,int createTime}) {
{String orderId, int scenes = 0, String desc,Function userStartChat,int createTime,String userName}) {
Navigator.of(context).push(TutorialOverlay(
child: TranslateOrderPushPage(isUser,orderId: orderId,scenes: scenes,desc: desc,userStartChat: userStartChat,createTime: createTime,),
child: TranslateOrderPushPage(isUser,orderId: orderId,scenes: scenes,desc: desc,userStartChat: userStartChat,createTime: createTime,userName: userName,),
));
}


+ 5
- 0
lib/utils/HttpUtil.dart Dosyayı Görüntüle

@@ -1502,6 +1502,7 @@ String mobileType = '';
"type": isLogin?1:2,
};
data['sign'] = TokenMgr().getSign(data);
print('请求data : $data');
Response res = await HttpUtil().post('steward/loginRecord', data: data);
if (res == null) {
@@ -1516,4 +1517,8 @@ String mobileType = '';
print('翻译人员上线、下线 失败 ${resData['msg']}');
}
}
}

+ 2
- 1
lib/utils/msgHandler.dart Dosyayı Görüntüle

@@ -1342,6 +1342,7 @@ class MsgHandler {
order.createTime=res.createTime.toInt();
order.tLanguage=res.tLanguage.toInt();
order.scenes=res.scenes.toInt();
order.userName = res.employer.niceName;
TranslateHKMgr().order = order;
MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order);
@@ -1356,7 +1357,7 @@ class MsgHandler {
TranslateHKMgr().order = null;
MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER);
showToast('派送订单已被取消');
showToast(I18n.of(context).translation_butler_order_time_out);
}


Yükleniyor…
İptal
Kaydet