@@ -5,11 +5,12 @@ | |||||
}, | }, | ||||
"client":{ | "client":{ | ||||
"cp_id":"890086000300385560", | "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":{ | "service":{ | ||||
"analytics":{ | "analytics":{ | ||||
@@ -18,9 +19,9 @@ | |||||
"channel_id":"" | "channel_id":"" | ||||
}, | }, | ||||
"ml":{ | "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", | "region":"SG", | ||||
"configuration_version":"1.0" | "configuration_version":"1.0" | ||||
} | |||||
} |
@@ -70,7 +70,7 @@ android { | |||||
XIAOMI_APPKEY:"MI-5221829498125",//小米平台注册的appkey | XIAOMI_APPKEY:"MI-5221829498125",//小米平台注册的appkey | ||||
XIAOMI_APPID:"MI-2882303761518294125",//小米平台注册的appid | XIAOMI_APPID:"MI-2882303761518294125",//小米平台注册的appid | ||||
// | // | ||||
HUAWEI_APPID:"101598177",//华为平台注册的appid | |||||
HUAWEI_APPID:"101961905",//华为平台注册的appid | |||||
OPPO_APPKEY : "OP-cd9ece5049514019842f54d537068018", // OPPO平台注册的appkey | OPPO_APPKEY : "OP-cd9ece5049514019842f54d537068018", // OPPO平台注册的appkey | ||||
@@ -1226,5 +1226,19 @@ | |||||
"forward":"Forward", | "forward":"Forward", | ||||
"copy_download_url":"复制下载地址", | "copy_download_url":"复制下载地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -1226,5 +1226,18 @@ | |||||
"forward":"转发", | "forward":"转发", | ||||
"copy_download_url":"复制下载地址", | "copy_download_url":"复制下载地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -1226,5 +1226,19 @@ | |||||
"forward":"转发", | "forward":"转发", | ||||
"copy_download_url":"复制下载地址", | "copy_download_url":"复制下载地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -1226,5 +1226,18 @@ | |||||
"forward": "转发", | "forward": "转发", | ||||
"copy_download_url": "复制下载地址", | "copy_download_url": "复制下载地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -1226,5 +1226,19 @@ | |||||
"forward":"转发", | "forward":"转发", | ||||
"copy_download_url":"复制下载地址", | "copy_download_url":"复制下载地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -1226,5 +1226,18 @@ | |||||
"forward":"转发", | "forward":"转发", | ||||
"copy_download_url":"複製下載地址", | "copy_download_url":"複製下載地址", | ||||
"total_friends_nus":"共/s1位朋友", | "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": "翻译订单超时已被取消" | |||||
} | } |
@@ -30,6 +30,8 @@ PODS: | |||||
- connectivity (0.0.1): | - connectivity (0.0.1): | ||||
- Flutter | - Flutter | ||||
- Reachability | - Reachability | ||||
- device_info (0.0.1): | |||||
- Flutter | |||||
- easy_contact_picker (0.0.1): | - easy_contact_picker (0.0.1): | ||||
- Flutter | - Flutter | ||||
- FBSDKCoreKit (5.13.1): | - FBSDKCoreKit (5.13.1): | ||||
@@ -167,6 +169,7 @@ DEPENDENCIES: | |||||
- auto_orientation (from `.symlinks/plugins/auto_orientation/ios`) | - auto_orientation (from `.symlinks/plugins/auto_orientation/ios`) | ||||
- city_pickers (from `.symlinks/plugins/city_pickers/ios`) | - city_pickers (from `.symlinks/plugins/city_pickers/ios`) | ||||
- connectivity (from `.symlinks/plugins/connectivity/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`) | - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`) | ||||
- file_picker (from `.symlinks/plugins/file_picker/ios`) | - file_picker (from `.symlinks/plugins/file_picker/ios`) | ||||
- Flutter (from `Flutter`) | - Flutter (from `Flutter`) | ||||
@@ -249,6 +252,8 @@ EXTERNAL SOURCES: | |||||
:path: ".symlinks/plugins/city_pickers/ios" | :path: ".symlinks/plugins/city_pickers/ios" | ||||
connectivity: | connectivity: | ||||
:path: ".symlinks/plugins/connectivity/ios" | :path: ".symlinks/plugins/connectivity/ios" | ||||
device_info: | |||||
:path: ".symlinks/plugins/device_info/ios" | |||||
easy_contact_picker: | easy_contact_picker: | ||||
:path: ".symlinks/plugins/easy_contact_picker/ios" | :path: ".symlinks/plugins/easy_contact_picker/ios" | ||||
file_picker: | file_picker: | ||||
@@ -351,6 +356,7 @@ SPEC CHECKSUMS: | |||||
Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f | Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f | ||||
city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35 | city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35 | ||||
connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 | connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75 | ||||
device_info: cbf09d2ec12aa7110e0b09fabe54b5bd6c8efe74 | |||||
easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730 | easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730 | ||||
FBSDKCoreKit: 8fb98209109fb684937f05d534305edb18c20207 | FBSDKCoreKit: 8fb98209109fb684937f05d534305edb18c20207 | ||||
FBSDKLoginKit: c7c6ffd9ca9ea45aee32361840af040ad8f6706a | FBSDKLoginKit: c7c6ffd9ca9ea45aee32361840af040ad8f6706a | ||||
@@ -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 | //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() { | Widget getAudioChatView() { | ||||
@@ -510,7 +522,7 @@ class _ChatPageState extends State<ChatPage> { | |||||
bool isShowZoomButton = true; | bool isShowZoomButton = true; | ||||
GlobalKey mykey = GlobalKey(); | GlobalKey mykey = GlobalKey(); | ||||
double dx = Screen.width , dy = Screen.height/2; | |||||
double dx = 0 , dy = 0; | |||||
double zoomButtonSize = 60; | double zoomButtonSize = 60; | ||||
void dragEvent(DragUpdateDetails details) { | void dragEvent(DragUpdateDetails details) { | ||||
@@ -1543,6 +1543,9 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
Widget _buildServiceCard(bool isStart, Function callBack) { | 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( | return Container( | ||||
alignment: Alignment.center, | alignment: Alignment.center, | ||||
@@ -1558,28 +1561,28 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), | padding: EdgeInsets.only(left: 10, right: 10, top: 15, bottom: 15), | ||||
child: Row( | child: Row( | ||||
children: <Widget>[ | 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() | ? Container() | ||||
: Expanded( | : Expanded( | ||||
child: Container( | child: Container( | ||||
@@ -7,6 +7,7 @@ class TranslateOrder{ | |||||
int tLanguage; | int tLanguage; | ||||
int scenes; | int scenes; | ||||
String desc; | String desc; | ||||
String userName; | |||||
} | } | ||||
class TranslateHKMgr { | class TranslateHKMgr { | ||||
@@ -25,6 +26,7 @@ class TranslateHKMgr { | |||||
String orderId; ///用户发起的订单Id | String orderId; ///用户发起的订单Id | ||||
int waitNum=0; | int waitNum=0; | ||||
int startWaitTime=0; | |||||
bool isUser=false; ///是用户或者翻译官 | bool isUser=false; ///是用户或者翻译官 | ||||
@@ -2489,6 +2489,32 @@ class I18n implements WidgetsLocalizations { | |||||
String get total_friends_nus => "共/s1位朋友"; | String get total_friends_nus => "共/s1位朋友"; | ||||
/// "有图片违规" | /// "有图片违规" | ||||
String get hava_error_photo => "有图片违规"; | 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 { | class _I18n_en_US extends I18n { | ||||
@@ -6185,6 +6211,42 @@ class _I18n_vi_VN extends I18n { | |||||
/// "有图片违规" | /// "有图片违规" | ||||
@override | @override | ||||
String get hava_error_photo => "有图片违规"; | 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 | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -9877,6 +9939,42 @@ class _I18n_zh_HK extends I18n { | |||||
/// "有圖片違規" | /// "有圖片違規" | ||||
@override | @override | ||||
String get hava_error_photo => "有圖片違規"; | 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 | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -13569,6 +13667,45 @@ class _I18n_zh_CN extends _I18n_zh_HK { | |||||
/// "有图片违规" | /// "有图片违规" | ||||
@override | @override | ||||
String get hava_error_photo => "有图片违规"; | 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 | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -14795,9 +14932,9 @@ class _I18n_ko_KR extends I18n { | |||||
/// "그의 사교 아이디" | /// "그의 사교 아이디" | ||||
@override | @override | ||||
String get his_account => "그의 사교 아이디"; | String get his_account => "그의 사교 아이디"; | ||||
/// "복제" | |||||
/// "복사" | |||||
@override | @override | ||||
String get copy => "복제"; | |||||
String get copy => "복사"; | |||||
/// "내 사교 아이디를 보내기" | /// "내 사교 아이디를 보내기" | ||||
@override | @override | ||||
String get send_account => "내 사교 아이디를 보내기"; | String get send_account => "내 사교 아이디를 보내기"; | ||||
@@ -15155,12 +15292,12 @@ class _I18n_ko_KR extends I18n { | |||||
/// "앱을 친구에게 공유하다" | /// "앱을 친구에게 공유하다" | ||||
@override | @override | ||||
String get share_app => "앱을 친구에게 공유하다"; | String get share_app => "앱을 친구에게 공유하다"; | ||||
/// "질문이 있으니까 도움이 필요하다" | |||||
/// "질문&도움" | |||||
@override | @override | ||||
String get need_help => "질문이 있으니까 도움이 필요하다"; | |||||
/// "고객을 연락하다" | |||||
String get need_help => "질문&도움"; | |||||
/// "고객센터" | |||||
@override | @override | ||||
String get need_help2 => "고객을 연락하다"; | |||||
String get need_help2 => "고객센터"; | |||||
/// "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!" | /// "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!" | ||||
@override | @override | ||||
String get need_help3 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"; | String get need_help3 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"; | ||||
@@ -17261,6 +17398,45 @@ class _I18n_ko_KR extends I18n { | |||||
/// "有图片违规" | /// "有图片违规" | ||||
@override | @override | ||||
String get hava_error_photo => "有图片违规"; | 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 | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -20953,6 +21129,42 @@ class _I18n_ja_JP extends I18n { | |||||
/// "有图片违规" | /// "有图片违规" | ||||
@override | @override | ||||
String get hava_error_photo => "有图片违规"; | 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 | @override | ||||
TextDirection get textDirection => TextDirection.ltr; | TextDirection get textDirection => TextDirection.ltr; | ||||
@@ -279,7 +279,7 @@ class _HomeMainState extends State<HomeMain> { | |||||
TranslateOrder order = data; | 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){ | startTranslateHKChat(var friendID){ | ||||
@@ -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/home/realtimehelper/travel_butler_page.dart'; | ||||
import 'package:chat/models/group_info_model.dart'; | import 'package:chat/models/group_info_model.dart'; | ||||
import 'package:chat/utils/HttpUtil.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:chat/utils/screen.dart'; | ||||
import 'package:dio/dio.dart'; | |||||
import 'package:flutter/cupertino.dart'; | import 'package:flutter/cupertino.dart'; | ||||
import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
@@ -25,19 +28,64 @@ class RealTimeHelperPage extends StatefulWidget { | |||||
class RealTimeHelperPageState extends State<RealTimeHelperPage> { | class RealTimeHelperPageState extends State<RealTimeHelperPage> { | ||||
bool isTranslateHKLogin = true; | |||||
bool isTranslateHKLogin = false; | |||||
bool isReady=false; | |||||
@override | @override | ||||
void initState() { | void initState() { | ||||
super.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 | @override | ||||
void dispose() { | void dispose() { | ||||
// MessageMgr().off('Update Group Info', updateGroupInfo); | |||||
super.dispose(); | super.dispose(); | ||||
MessageMgr().on('update_system',refresh); | |||||
} | } | ||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
Widget appBar = AppBar( | Widget appBar = AppBar( | ||||
@@ -80,7 +128,7 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> { | |||||
children: <Widget>[ | children: <Widget>[ | ||||
Container( | Container( | ||||
alignment: Alignment.center, | 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: (){ | UnconstrainedBox(child: InkWell(onTap: (){ | ||||
@@ -99,16 +147,16 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> { | |||||
decoration: BoxDecoration( | decoration: BoxDecoration( | ||||
border: Border.all(color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, width: 1), | border: Border.all(color: isTranslateHKLogin?Color(0xFFFEE645):Colors.white, width: 1), | ||||
borderRadius: BorderRadius.circular(11)), | 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( | Container( | ||||
padding: EdgeInsets.only(left: 13,top: 20), | 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, | helperCard(I18n.of(context).translation_butler, | ||||
R.assetsImagesImgTranslationButler, () { | R.assetsImagesImgTranslationButler, () { | ||||
if (UserData().isTranslateUser) { | if (UserData().isTranslateUser) { | ||||
showToast('翻译人员无法进入创建订单'); | |||||
showToast(I18n.of(context).translation_butler_stop_tips); | |||||
} else { | } else { | ||||
Navigator.of(context).push( | Navigator.of(context).push( | ||||
MaterialPageRoute( | MaterialPageRoute( | ||||
@@ -199,7 +247,7 @@ class RealTimeHelperPageState extends State<RealTimeHelperPage> { | |||||
), | ), | ||||
), | ), | ||||
), | ), | ||||
onTap: callBack, | |||||
onTap: isReady?callBack:null, | |||||
); | ); | ||||
} | } | ||||
} | } |
@@ -1,4 +1,5 @@ | |||||
import 'dart:async'; | import 'dart:async'; | ||||
import 'dart:ffi'; | |||||
import 'package:chat/data/UserData.dart'; | import 'package:chat/data/UserData.dart'; | ||||
import 'package:chat/data/translate_hk_data_mgr.dart'; | import 'package:chat/data/translate_hk_data_mgr.dart'; | ||||
@@ -84,6 +85,12 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
setState(() {}); | setState(() {}); | ||||
} | } | ||||
///订单没有人接,超时,服务器会发送取消订单通知 | |||||
cancelOrder(args){ | |||||
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; | |||||
refreshOrder(null); | |||||
} | |||||
@override | @override | ||||
void initState() { | void initState() { | ||||
super.initState(); | super.initState(); | ||||
@@ -94,7 +101,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
initData(); | initData(); | ||||
MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | ||||
MessageMgr().on(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); | |||||
WidgetsBinding.instance.addPostFrameCallback((_) { | WidgetsBinding.instance.addPostFrameCallback((_) { | ||||
@@ -143,7 +150,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
return; | return; | ||||
} | } | ||||
isCreatingOrder=true; | isCreatingOrder=true; | ||||
TranslateHKMgr().startWaitTime=DateTime.now().millisecondsSinceEpoch; | |||||
MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); | MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); | ||||
extraMsg=''; | extraMsg=''; | ||||
@@ -176,6 +183,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
void dispose() { | void dispose() { | ||||
waitTimer?.cancel(); | waitTimer?.cancel(); | ||||
MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | ||||
MessageMgr().off(MessageMgr.TRANSLATE_HK_CANCEL_ORDER, cancelOrder); | |||||
if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { | if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { | ||||
print('保存时间戳$timeStamp'); | print('保存时间戳$timeStamp'); | ||||
SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); | SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); | ||||
@@ -1,3 +1,4 @@ | |||||
import 'package:chat/data/UserData.dart'; | |||||
import 'package:chat/data/constants.dart'; | import 'package:chat/data/constants.dart'; | ||||
import 'package:chat/data/translate_hk_data_mgr.dart'; | import 'package:chat/data/translate_hk_data_mgr.dart'; | ||||
import 'package:chat/generated/i18n.dart'; | import 'package:chat/generated/i18n.dart'; | ||||
@@ -18,13 +19,15 @@ class TranslateOrderPushPage extends StatefulWidget { | |||||
String desc; | String desc; | ||||
Function userStartChat; | Function userStartChat; | ||||
int createTime; | int createTime; | ||||
String userName; | |||||
TranslateOrderPushPage(this.isUser, | TranslateOrderPushPage(this.isUser, | ||||
{this.orderId, | {this.orderId, | ||||
this.scenes, | this.scenes, | ||||
this.desc, | this.desc, | ||||
this.userStartChat, | this.userStartChat, | ||||
this.createTime}); | |||||
this.createTime, | |||||
this.userName}); | |||||
@override | @override | ||||
State<StatefulWidget> createState() { | State<StatefulWidget> createState() { | ||||
@@ -59,6 +62,10 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> { | |||||
super.didChangeDependencies(); | super.didChangeDependencies(); | ||||
} | } | ||||
String withZero(int num){ | |||||
return num<10?'0$num':'$num'; | |||||
} | |||||
@override | @override | ||||
Widget build(BuildContext context) { | Widget build(BuildContext context) { | ||||
// TODO: implement build | // TODO: implement build | ||||
@@ -69,8 +76,19 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> { | |||||
I18n.of(context).translation_scenes_4, | 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( | return UnconstrainedBox( | ||||
alignment: Alignment.topCenter, | alignment: Alignment.topCenter, | ||||
@@ -109,7 +127,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> { | |||||
), | ), | ||||
Text( | Text( | ||||
I18n.of(context).translation_butler_dialog_order.replaceAll( | 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, | textScaleFactor: 1.0, | ||||
textAlign: TextAlign.left, | textAlign: TextAlign.left, | ||||
style: TextStyle( | style: TextStyle( | ||||
@@ -128,7 +146,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> { | |||||
widget.isUser | widget.isUser | ||||
? Container() | ? Container() | ||||
: Text( | : Text( | ||||
'场景:${scenesList[widget.scenes]}', | |||||
'${I18n.of(context).translation_butler_scenes2}:${scenesList[widget.scenes]}', | |||||
textScaleFactor: 1.0, | textScaleFactor: 1.0, | ||||
textAlign: TextAlign.left, | textAlign: TextAlign.left, | ||||
style: | style: | ||||
@@ -138,7 +156,7 @@ class TranslateOrderPushPageState extends State<TranslateOrderPushPage> { | |||||
widget.isUser | widget.isUser | ||||
? Container() | ? Container() | ||||
: Text( | : Text( | ||||
'更多描述:${widget.desc}', | |||||
'${I18n.of(context).translation_more_desc}:${widget.desc}', | |||||
textScaleFactor: 1.0, | textScaleFactor: 1.0, | ||||
textAlign: TextAlign.left, | textAlign: TextAlign.left, | ||||
style: | style: | ||||
@@ -247,7 +247,7 @@ class TravelButlerPageState extends State<TravelButlerPage> { | |||||
Widget positionLayout(bool isStart){ | 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){ | if(isStart && startResult!=null && startResult.address!=null){ | ||||
str = startResult.address; | str = startResult.address; | ||||
}else if (!isStart && endResult!=null &&endResult.address!=null){ | }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>[ | return Container(height:50,child: Row(mainAxisSize: MainAxisSize.max, children: <Widget>[ | ||||
Expanded(child: Container( child: fixedText(str,color: Colors.black,fontSize: 16),)), | 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) | |||||
],),); | ],),); | ||||
@@ -140,15 +140,14 @@ class _LastMsgDescriptionState extends State<LastMsgDescription> { | |||||
if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ | if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ | ||||
///翻译管家的 通知消息 | ///翻译管家的 通知消息 | ||||
desc = '翻译管家---'; | |||||
print('翻译管家的 通知消息-'); | print('翻译管家的 通知消息-'); | ||||
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | ||||
if(res.noticeType==TransHKChatNoticeType.StartChat){ | if(res.noticeType==TransHKChatNoticeType.StartChat){ | ||||
return '[翻译管家服务开始]'; | |||||
desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_start; | |||||
}else if(res.noticeType==TransHKChatNoticeType.EndChat){ | }else if(res.noticeType==TransHKChatNoticeType.EndChat){ | ||||
return '[翻译管家服务结束]'; | |||||
desc = I18n.of(Constants.getCurrentContext()).translation_butler_last_item_end; | |||||
}else{ | }else{ | ||||
return ''; | |||||
desc = ''; | |||||
} | } | ||||
@@ -263,10 +263,11 @@ class EndTransHKOrderRes extends $pb.GeneratedMessage { | |||||
class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { | class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { | ||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeliveryTransHKOrderPush', package: const $pb.PackageName('yl_pb')) | static final $pb.BuilderInfo _i = $pb.BuilderInfo('DeliveryTransHKOrderPush', package: const $pb.PackageName('yl_pb')) | ||||
..aOS(1, 'orderId') | ..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 | ..hasRequiredFields = false | ||||
; | ; | ||||
@@ -289,25 +290,30 @@ class DeliveryTransHKOrderPush extends $pb.GeneratedMessage { | |||||
$core.bool hasOrderId() => $_has(0); | $core.bool hasOrderId() => $_has(0); | ||||
void clearOrderId() => clearField(1); | 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 { | class CancellationTransHKOrderPush extends $pb.GeneratedMessage { | ||||
@@ -90,10 +90,11 @@ const DeliveryTransHKOrderPush$json = const { | |||||
'1': 'DeliveryTransHKOrderPush', | '1': 'DeliveryTransHKOrderPush', | ||||
'2': const [ | '2': const [ | ||||
const {'1': 'OrderId', '3': 1, '4': 1, '5': 9, '10': 'OrderId'}, | 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'}, | |||||
], | ], | ||||
}; | }; | ||||
@@ -68,10 +68,11 @@ message EndTransHKOrderRes{ | |||||
//Msg= 20 派送订单推送 | //Msg= 20 派送订单推送 | ||||
message DeliveryTransHKOrderPush { | message DeliveryTransHKOrderPush { | ||||
optional string OrderId =1; //订单号 | 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 订单取消推送 | //Msg= 21 订单取消推送 | ||||
@@ -1267,11 +1267,11 @@ class CustomUI { | |||||
///** isUser 是否是用户,或为 翻译 | ///** isUser 是否是用户,或为 翻译 | ||||
static void buildTranslationHelperOrderDialog( | static void buildTranslationHelperOrderDialog( | ||||
BuildContext context, bool isUser, | 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( | 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,), | |||||
)); | )); | ||||
} | } | ||||
@@ -1502,6 +1502,7 @@ String mobileType = ''; | |||||
"type": isLogin?1:2, | "type": isLogin?1:2, | ||||
}; | }; | ||||
data['sign'] = TokenMgr().getSign(data); | data['sign'] = TokenMgr().getSign(data); | ||||
print('请求data : $data'); | |||||
Response res = await HttpUtil().post('steward/loginRecord', data: data); | Response res = await HttpUtil().post('steward/loginRecord', data: data); | ||||
if (res == null) { | if (res == null) { | ||||
@@ -1516,4 +1517,8 @@ String mobileType = ''; | |||||
print('翻译人员上线、下线 失败 ${resData['msg']}'); | print('翻译人员上线、下线 失败 ${resData['msg']}'); | ||||
} | } | ||||
} | } | ||||
} | } |
@@ -1342,6 +1342,7 @@ class MsgHandler { | |||||
order.createTime=res.createTime.toInt(); | order.createTime=res.createTime.toInt(); | ||||
order.tLanguage=res.tLanguage.toInt(); | order.tLanguage=res.tLanguage.toInt(); | ||||
order.scenes=res.scenes.toInt(); | order.scenes=res.scenes.toInt(); | ||||
order.userName = res.employer.niceName; | |||||
TranslateHKMgr().order = order; | TranslateHKMgr().order = order; | ||||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order); | MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order); | ||||
@@ -1356,7 +1357,7 @@ class MsgHandler { | |||||
TranslateHKMgr().order = null; | TranslateHKMgr().order = null; | ||||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER); | MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER); | ||||
showToast('派送订单已被取消'); | |||||
showToast(I18n.of(context).translation_butler_order_time_out); | |||||
} | } | ||||