@@ -7,5 +7,5 @@ export "FLUTTER_BUILD_DIR=build" | |||||
export "SYMROOT=${SOURCE_ROOT}/../build/ios" | export "SYMROOT=${SOURCE_ROOT}/../build/ios" | ||||
export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios" | export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios" | ||||
export "FLUTTER_BUILD_NAME=1.0.9" | export "FLUTTER_BUILD_NAME=1.0.9" | ||||
export "FLUTTER_BUILD_NUMBER=13" | |||||
export "FLUTTER_BUILD_NUMBER=14" | |||||
export "TRACK_WIDGET_CREATION=true" | export "TRACK_WIDGET_CREATION=true" |
@@ -365,12 +365,6 @@ class _ChatPageState extends State<ChatPage> { | |||||
widget.isTranslateButler | widget.isTranslateButler | ||||
? _buildTranslationButler() | ? _buildTranslationButler() | ||||
: Container(), | : Container(), | ||||
widget.isTranslateButler | |||||
? _buildServiceCard(true, () {}) | |||||
: Container(), | |||||
widget.isTranslateButler | |||||
? _buildServiceCard(false, () {}) | |||||
: Container(), | |||||
Expanded(child: _buildMessageList()), | Expanded(child: _buildMessageList()), | ||||
InputBar(sendMsg: sendMsg), | InputBar(sendMsg: sendMsg), | ||||
], | ], | ||||
@@ -396,8 +390,8 @@ class _ChatPageState extends State<ChatPage> { | |||||
); | ); | ||||
}, | }, | ||||
))), | ))), | ||||
widget.isTranslateButler ? getAudioChatView() : Container(), | |||||
widget.isTranslateButler ? zoomAudioButton() : Container() | |||||
// widget.isTranslateButler ? getAudioChatView() : Container(), | |||||
// widget.isTranslateButler ? zoomAudioButton() : Container() | |||||
], | ], | ||||
); | ); | ||||
} | } | ||||
@@ -580,7 +574,7 @@ class _ChatPageState extends State<ChatPage> { | |||||
() { | () { | ||||
Navigator.of(context).pop(); | Navigator.of(context).pop(); | ||||
}, | }, | ||||
countDownTime: 360, | |||||
countDownTime: 3600, | |||||
align: Alignment.centerRight, | align: Alignment.centerRight, | ||||
onPress: () {}, | onPress: () {}, | ||||
), | ), | ||||
@@ -591,67 +585,6 @@ class _ChatPageState extends State<ChatPage> { | |||||
); | ); | ||||
} | } | ||||
Widget _buildServiceCard(bool isStart, Function callBack) { | |||||
return Container( | |||||
margin: EdgeInsets.all(10), | |||||
child: Card( | |||||
elevation: 2, | |||||
// 阴影 | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: BorderRadius.circular(10), | |||||
// side: BorderSide(color: Colors.green,width: 25), | |||||
), | |||||
child: Padding( | |||||
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: AppColors.NewAppbarTextColor, fontSize: 13), | |||||
) | |||||
], | |||||
), | |||||
isStart | |||||
? Container() | |||||
: Expanded( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 15), | |||||
height: 30, | |||||
child: RaisedButton( | |||||
color: Color(0xff3875E9), | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: | |||||
BorderRadius.all(Radius.circular(10))), | |||||
child: Text( | |||||
I18n.of(context).translation_butler_evaluation, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle(color: Colors.white, fontSize: 15), | |||||
), | |||||
onPressed: () { | |||||
CustomUI.buildTranslationEvaluationDialog(context); | |||||
}), | |||||
)), | |||||
], | |||||
), | |||||
), | |||||
), | |||||
); | |||||
} | |||||
Widget _buildMessageList() { | Widget _buildMessageList() { | ||||
return Container( | return Container( | ||||
@@ -695,11 +628,16 @@ class _ChatPageState extends State<ChatPage> { | |||||
} | } | ||||
sendMsg(MsgModel msg) { | sendMsg(MsgModel msg) { | ||||
// if(widget.isTranslateButler){ ///翻译管家聊天通道 | |||||
// msg.channelType = ChatChannelType.TransHK.value; | |||||
// } | |||||
print('对方是否拉黑你 ${friendInfo.isBlackened}'); | print('对方是否拉黑你 ${friendInfo.isBlackened}'); | ||||
if (BlacklistMgr.isBlack(friendInfo.userId)) { | if (BlacklistMgr.isBlack(friendInfo.userId)) { | ||||
return; | return; | ||||
} | } | ||||
print('chat page session id:${msg.sessionId}'); | |||||
if (!friendInfo.isCanStrangerNews && | if (!friendInfo.isCanStrangerNews && | ||||
!FriendListMgr().isMyFriend(friendInfo.userId)) { | !FriendListMgr().isMyFriend(friendInfo.userId)) { | ||||
showToast(I18n.of(context).stranger_close_tips); | showToast(I18n.of(context).stranger_close_tips); | ||||
@@ -22,6 +22,7 @@ import 'package:chat/models/keyboard_provider.dart'; | |||||
import 'package:chat/models/ref_name_provider.dart'; | import 'package:chat/models/ref_name_provider.dart'; | ||||
import 'package:chat/proto/chat.pbenum.dart'; | import 'package:chat/proto/chat.pbenum.dart'; | ||||
import 'package:chat/proto/chat.pbserver.dart'; | import 'package:chat/proto/chat.pbserver.dart'; | ||||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||||
import 'package:chat/utils/CustomUI.dart'; | import 'package:chat/utils/CustomUI.dart'; | ||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
@@ -210,6 +211,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
} | } | ||||
_msgWidget() { | _msgWidget() { | ||||
if (widget.msg.from == 0) { | if (widget.msg.from == 0) { | ||||
return _serverNotifyMsg(); | return _serverNotifyMsg(); | ||||
} else { | } else { | ||||
@@ -257,24 +259,44 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
} else { | } else { | ||||
///todo 翻译管家系统通知消息 | ///todo 翻译管家系统通知消息 | ||||
print('这里应该要有翻译管家'); | |||||
if (type == ChatType.GroupChatNoticeType.value && widget.msg.channelType ==ChatChannelType.Session.value) { | |||||
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.msg.msgContent); | |||||
if(res.noticeType==TransHKChatNoticeType.StartChat){ | |||||
///开始翻译服务 | |||||
return _buildServiceCard(true, () {}); | |||||
}else if(res.noticeType==TransHKChatNoticeType.EndChat){ | |||||
///翻译服务结束 | |||||
return _buildServiceCard(false, () {}); | |||||
}else{ | |||||
return Container(); | |||||
} | |||||
// return Container(); | |||||
} | |||||
// else{ | |||||
// if (type == ChatType.GroupChatNoticeType.value) { | |||||
// var res = GroupChatNotice.fromBuffer(widget.msg.msgContent); | |||||
// | |||||
// var groupInfoModel = Provider.of<GroupInfoModel>(context); | |||||
// var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel); | |||||
// return Container( | |||||
// alignment: Alignment.center, | |||||
// constraints: BoxConstraints(maxWidth: Screen.width - 120), | |||||
// child: Text( | |||||
// showStr, | |||||
// textScaleFactor: 1.0, | |||||
// textAlign: TextAlign.center, | |||||
// style: TextStyle(color: Constants.GreyTextColor, fontSize: 12), | |||||
// ), | |||||
// ); | |||||
// } | |||||
// } | |||||
if (type == ChatType.GroupChatNoticeType.value) { | |||||
var res = GroupChatNotice.fromBuffer(widget.msg.msgContent); | |||||
var groupInfoModel = Provider.of<GroupInfoModel>(context); | |||||
var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel); | |||||
return Container( | |||||
alignment: Alignment.center, | |||||
constraints: BoxConstraints(maxWidth: Screen.width - 120), | |||||
child: Text( | |||||
showStr, | |||||
textScaleFactor: 1.0, | |||||
textAlign: TextAlign.center, | |||||
style: TextStyle(color: Constants.GreyTextColor, fontSize: 12), | |||||
), | |||||
); | |||||
} | |||||
} | } | ||||
return Container(); | return Container(); | ||||
} | } | ||||
@@ -1048,7 +1070,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
isAutoDown: false, | isAutoDown: false, | ||||
msg: widget.msg, | msg: widget.msg, | ||||
onFinishTap: (){ | onFinishTap: (){ | ||||
widget.hideKeyboard(); | |||||
showFullImg(context, widget.msg); | showFullImg(context, widget.msg); | ||||
}, | }, | ||||
child: Container( | child: Container( | ||||
@@ -1297,6 +1319,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
void showFullImg(BuildContext context, MsgModel msg) { | void showFullImg(BuildContext context, MsgModel msg) { | ||||
print('显示图片'); | print('显示图片'); | ||||
widget.hideKeyboard(); | |||||
Navigator.push(context, | Navigator.push(context, | ||||
MaterialPageRoute<void>(builder: (BuildContext context) { | MaterialPageRoute<void>(builder: (BuildContext context) { | ||||
return PhotoPage(msg: msg); | return PhotoPage(msg: msg); | ||||
@@ -1399,4 +1422,70 @@ class _ChatPageItemState extends State<ChatPageItem> | |||||
: Container() | : Container() | ||||
]); | ]); | ||||
} | } | ||||
Widget _buildServiceCard(bool isStart, Function callBack) { | |||||
return Container( | |||||
alignment: Alignment.center, | |||||
margin: EdgeInsets.all(10), | |||||
child: Card( | |||||
elevation: 2, | |||||
// 阴影 | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: BorderRadius.circular(10), | |||||
// side: BorderSide(color: Colors.green,width: 25), | |||||
), | |||||
child: Padding( | |||||
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: AppColors.NewAppbarTextColor, fontSize: 13), | |||||
) | |||||
], | |||||
), | |||||
isStart | |||||
? Container() | |||||
: Expanded( | |||||
child: Container( | |||||
margin: EdgeInsets.only(left: 15), | |||||
height: 30, | |||||
child: RaisedButton( | |||||
color: Color(0xff3875E9), | |||||
shape: RoundedRectangleBorder( | |||||
borderRadius: | |||||
BorderRadius.all(Radius.circular(10))), | |||||
child: Text( | |||||
I18n.of(context).translation_butler_evaluation, | |||||
textScaleFactor: 1.0, | |||||
style: TextStyle(color: Colors.white, fontSize: 15), | |||||
), | |||||
onPressed: () { | |||||
CustomUI.buildTranslationEvaluationDialog(context); | |||||
}), | |||||
)), | |||||
], | |||||
), | |||||
), | |||||
), | |||||
); | |||||
} | |||||
} | } |
@@ -172,7 +172,7 @@ class _CompanyServerPageState extends State<CompanyServerPage> { | |||||
for (var i = 0; i < resultList.length; i++) { | for (var i = 0; i < resultList.length; i++) { | ||||
Asset photoEntity = resultList[i]; | Asset photoEntity = resultList[i]; | ||||
ByteData byteData = await photoEntity.getByteData(); | ByteData byteData = await photoEntity.getByteData(); | ||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||||
_sendPhotoFile(file); | _sendPhotoFile(file); | ||||
} | } | ||||
} | } | ||||
@@ -1055,7 +1055,6 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
isAutoDown: false, | isAutoDown: false, | ||||
msg: widget.msg, | msg: widget.msg, | ||||
onFinishTap: (){ | onFinishTap: (){ | ||||
widget.hideKeyboard(); | |||||
showFullImg(context, widget.msg); | showFullImg(context, widget.msg); | ||||
}, | }, | ||||
child: Container( | child: Container( | ||||
@@ -1080,7 +1079,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
return InkWell( | return InkWell( | ||||
onTap: () { | onTap: () { | ||||
if (widget.msg.localFile != null) { | if (widget.msg.localFile != null) { | ||||
widget.hideKeyboard(); | |||||
showVideoPage(context, widget.msg.localFile); | showVideoPage(context, widget.msg.localFile); | ||||
} | } | ||||
}, | }, | ||||
@@ -1101,6 +1100,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
} | } | ||||
showVideoPage(BuildContext context, String filePath) { | showVideoPage(BuildContext context, String filePath) { | ||||
widget.hideKeyboard(); | |||||
Navigator.push(context, | Navigator.push(context, | ||||
MaterialPageRoute<void>(builder: (BuildContext context) { | MaterialPageRoute<void>(builder: (BuildContext context) { | ||||
return VideoPage(videoPath: filePath); | return VideoPage(videoPath: filePath); | ||||
@@ -1285,6 +1285,9 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||||
void showFullImg(BuildContext context, MsgModel msg) { | void showFullImg(BuildContext context, MsgModel msg) { | ||||
print('显示图片'); | print('显示图片'); | ||||
if( widget.hideKeyboard!=null){ | |||||
widget.hideKeyboard(); | |||||
} | |||||
Navigator.push(context, | Navigator.push(context, | ||||
MaterialPageRoute<void>(builder: (BuildContext context) { | MaterialPageRoute<void>(builder: (BuildContext context) { | ||||
return PhotoPage(msg: msg); | return PhotoPage(msg: msg); | ||||
@@ -707,7 +707,7 @@ class InputBarState extends State<InputBar> | |||||
for (var i = 0; i < resultList.length; i++) { | for (var i = 0; i < resultList.length; i++) { | ||||
Asset photoEntity = resultList[i]; | Asset photoEntity = resultList[i]; | ||||
ByteData byteData = await photoEntity.getByteData(); | ByteData byteData = await photoEntity.getByteData(); | ||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||||
_sendPhotoFile(file); | _sendPhotoFile(file); | ||||
} | } | ||||
} | } | ||||
@@ -93,7 +93,7 @@ class _TranslateSateWidgetState extends State<TranslateSateWidget> { | |||||
if (mounted) { | if (mounted) { | ||||
setState(() {}); | setState(() {}); | ||||
} | } | ||||
MsgHandler.swtichTranslateState(newState); | |||||
// MsgHandler.swtichTranslateState(newState); | |||||
} | } | ||||
} | } | ||||
@@ -121,7 +121,7 @@ class _TranslateSateWidgetState extends State<TranslateSateWidget> { | |||||
translateStatus = TranslateState.valueOf(status); | translateStatus = TranslateState.valueOf(status); | ||||
//同步双方翻译状态 | //同步双方翻译状态 | ||||
MsgHandler.swtichTranslateState(translateStatus); | |||||
// MsgHandler.swtichTranslateState(translateStatus); | |||||
if (mounted) { | if (mounted) { | ||||
setState(() {}); | setState(() {}); | ||||
} | } | ||||
@@ -313,6 +313,11 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); | showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); | ||||
return; | return; | ||||
} | } | ||||
///ios存在着文件夹才打得开 | |||||
File newFile= await FileCacheMgr().writeFile(file.path.split('/').last, file.readAsBytesSync()); | |||||
int friendId = 0; | int friendId = 0; | ||||
if (!widget.isGroup) { | if (!widget.isGroup) { | ||||
@@ -336,7 +341,7 @@ class _UtilKeyboardState extends State<UtilKeyboard> { | |||||
var msg = MsgHandler.createSendMsg( | var msg = MsgHandler.createSendMsg( | ||||
ChatType.FileChatType, fileMsg.writeToBuffer(), | ChatType.FileChatType, fileMsg.writeToBuffer(), | ||||
friendId: friendId, | friendId: friendId, | ||||
localFile: file.path, | |||||
localFile: newFile.path, | |||||
channelType: | channelType: | ||||
widget.isGroup ? ChatChannelType.Group : ChatChannelType.Session); | widget.isGroup ? ChatChannelType.Group : ChatChannelType.Session); | ||||
@@ -280,8 +280,9 @@ class ChatDataMgr { | |||||
} | } | ||||
var result = getMsgBy(msg.sessionId, msg.time, true); | var result = getMsgBy(msg.sessionId, msg.time, true); | ||||
if (result != null) { | if (result != null) { | ||||
// print('消息存在!!!!'); | |||||
print('消息存在!!!!'); | |||||
} else { | } else { | ||||
print('插入消息!!!!'); | |||||
insertToDB(msg, record); | insertToDB(msg, record); | ||||
} | } | ||||
} else { | } else { | ||||
@@ -386,6 +387,7 @@ class ChatDataMgr { | |||||
groupUnreadProvider.updateUnreadCount(msgModel.sessionId, 1); | groupUnreadProvider.updateUnreadCount(msgModel.sessionId, 1); | ||||
} | } | ||||
} else { | } else { | ||||
print('更新最后一条记录msgModel friendid :${msgModel.friendId}'); | |||||
lastMsgProvider.updateLastMsg(msgModel); | lastMsgProvider.updateLastMsg(msgModel); | ||||
if (msgModel.readState == 1) { | if (msgModel.readState == 1) { | ||||
unreadCountProvider.updateUnreadCount(msgModel.sessionId, 1); | unreadCountProvider.updateUnreadCount(msgModel.sessionId, 1); | ||||
@@ -0,0 +1,47 @@ | |||||
import 'dart:convert'; | |||||
import 'package:chat/data/UserData.dart'; | |||||
import 'package:chat/data/chat_data_mgr.dart'; | |||||
import 'package:chat/models/group_info_model.dart'; | |||||
import 'package:chat/proto/chat.pbserver.dart'; | |||||
import 'package:chat/utils/MessageMgr.dart'; | |||||
import 'package:chat/utils/group_member_model.dart'; | |||||
import 'package:chat/utils/sql_util.dart'; | |||||
import 'package:chat/utils/upload_util.dart'; | |||||
import 'package:crclib/crclib.dart'; | |||||
class TranslateOrder{ | |||||
String orderId; | |||||
int createTime; | |||||
int tLanguage; | |||||
int scenes; | |||||
String desc; | |||||
} | |||||
class TranslateHKMgr { | |||||
static TranslateHKMgr _instance; | |||||
factory TranslateHKMgr() => _getInstance(); | |||||
TranslateHKMgr._(); | |||||
static TranslateHKMgr _getInstance() { | |||||
if (_instance == null) { | |||||
_instance = TranslateHKMgr._(); | |||||
} | |||||
return _instance; | |||||
} | |||||
TranslateOrder order; | |||||
String orderId; | |||||
int waitNum=0; | |||||
int orderStatus=0; | |||||
static const ORDER_STATUS_EMPTY=0; ///未创建订单 | |||||
static const ORDER_STATUS_WAITING=1;///等待翻译官 | |||||
static const ORDER_STATUS_START=1;///翻译管家开始 | |||||
} |
@@ -733,8 +733,10 @@ class _AddProgramState extends State<AddProgram> { | |||||
List<File> fileList = []; | List<File> fileList = []; | ||||
for (var i = 0; i < resultList.length; i++) { | for (var i = 0; i < resultList.length; i++) { | ||||
Asset photoEntity = resultList[i]; | Asset photoEntity = resultList[i]; | ||||
print('名字:${photoEntity.name}'); | |||||
ByteData byteData = await photoEntity.getByteData(); | ByteData byteData = await photoEntity.getByteData(); | ||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||||
fileList.add(file); | fileList.add(file); | ||||
} | } | ||||
print('文件列表${fileList.length}'); | print('文件列表${fileList.length}'); | ||||
@@ -204,7 +204,7 @@ class _InformUserPageState extends State<InformUserPage> { | |||||
for (var i = 0; i < resultList.length; i++) { | for (var i = 0; i < resultList.length; i++) { | ||||
Asset photoEntity = resultList[i]; | Asset photoEntity = resultList[i]; | ||||
ByteData byteData = await photoEntity.getByteData(); | ByteData byteData = await photoEntity.getByteData(); | ||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-$i', byteData.buffer.asInt8List(0)); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||||
fileList.add(file); | fileList.add(file); | ||||
} | } | ||||
Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | Map data = {"type": 3, "userId": UserData().basicInfo.userId}; | ||||
@@ -12,6 +12,7 @@ import 'package:chat/utils/ChargeMoney.dart'; | |||||
import 'package:chat/utils/app_navigator.dart'; | import 'package:chat/utils/app_navigator.dart'; | ||||
import 'package:chat/utils/blacklist_mgr.dart'; | import 'package:chat/utils/blacklist_mgr.dart'; | ||||
import 'package:chat/utils/conversation_table.dart'; | import 'package:chat/utils/conversation_table.dart'; | ||||
import 'package:chat/utils/file_cache_mgr.dart'; | |||||
import 'package:chat/utils/friend_list_mgr.dart'; | import 'package:chat/utils/friend_list_mgr.dart'; | ||||
import 'package:chat/utils/msgHandler.dart'; | import 'package:chat/utils/msgHandler.dart'; | ||||
import 'package:chat/utils/screen.dart'; | import 'package:chat/utils/screen.dart'; | ||||
@@ -38,6 +39,7 @@ import 'package:flutter/services.dart'; | |||||
import 'package:image_cropper/image_cropper.dart'; | import 'package:image_cropper/image_cropper.dart'; | ||||
import 'package:image_picker/image_picker.dart'; | import 'package:image_picker/image_picker.dart'; | ||||
import 'package:multi_image_picker/multi_image_picker.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:permission_handler/permission_handler.dart'; | import 'package:permission_handler/permission_handler.dart'; | ||||
import 'package:photo_manager/photo_manager.dart'; | import 'package:photo_manager/photo_manager.dart'; | ||||
@@ -429,18 +431,35 @@ class _ProfilePageState extends State<ProfilePage> | |||||
// ); | // ); | ||||
// } | // } | ||||
// } | // } | ||||
var photos = await PhotoPicker.pickAsset( | |||||
context: context, | |||||
themeColor: Color(0xFFF0F0F0), | |||||
textColor: Color(0xFF3F3F3F), | |||||
pickType: PickType.onlyImage); | |||||
if (photos != null && photos.length > 0) { | |||||
List<Asset> resultList = List<Asset>(); | |||||
resultList = await MultiImagePicker.pickImages( | |||||
maxImages: 9, | |||||
enableCamera: false, | |||||
selectedAssets: [], | |||||
cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"), | |||||
materialOptions: MaterialOptions( | |||||
actionBarColor: "#50A7F9", | |||||
actionBarTitle: "Hibok", | |||||
allViewTitle: "", | |||||
useDetailsView: false, | |||||
selectCircleStrokeColor: "#000000", | |||||
), | |||||
); | |||||
if (resultList != null && resultList.length > 0) { | |||||
List<File> fileList = []; | List<File> fileList = []; | ||||
for (var i = 0; i < photos.length; i++) { | |||||
AssetEntity photoEntity = photos[i]; | |||||
fileList.add(await photoEntity.file); | |||||
for (var i = 0; i < resultList.length; i++) { | |||||
Asset photoEntity = resultList[i]; | |||||
print('名字:${photoEntity.name}'); | |||||
ByteData byteData = await photoEntity.getByteData(); | |||||
File file = await FileCacheMgr().writeFile('temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', byteData.buffer.asInt8List(0)); | |||||
fileList.add(file); | |||||
} | } | ||||
print('文件列表${fileList.length}'); | |||||
Map data = {"type": 2, "userId": UserData().basicInfo.userId}; | Map data = {"type": 2, "userId": UserData().basicInfo.userId}; | ||||
data['sign'] = TokenMgr().getSign(data); | data['sign'] = TokenMgr().getSign(data); | ||||
data['sex'] = UserData().basicInfo.sex; | data['sex'] = UserData().basicInfo.sex; | ||||
@@ -453,12 +472,43 @@ class _ProfilePageState extends State<ProfilePage> | |||||
if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | ||||
showToast(resData['data']['msg']); | showToast(resData['data']['msg']); | ||||
} | } | ||||
if(resData['msg'].split('|').length !=photos.length){ | |||||
if(resData['msg'].split('|').length !=fileList.length){ | |||||
showToast(I18n.of(context).hava_error_photo); | showToast(I18n.of(context).hava_error_photo); | ||||
} | } | ||||
MessageMgr().emit('refresh_photo'); | MessageMgr().emit('refresh_photo'); | ||||
} | } | ||||
} | } | ||||
// var photos = await PhotoPicker.pickAsset( | |||||
// context: context, | |||||
// themeColor: Color(0xFFF0F0F0), | |||||
// textColor: Color(0xFF3F3F3F), | |||||
// pickType: PickType.onlyImage); | |||||
// if (photos != null && photos.length > 0) { | |||||
// List<File> fileList = []; | |||||
// for (var i = 0; i < photos.length; i++) { | |||||
// AssetEntity photoEntity = photos[i]; | |||||
// fileList.add(await photoEntity.file); | |||||
// } | |||||
// Map data = {"type": 2, "userId": UserData().basicInfo.userId}; | |||||
// data['sign'] = TokenMgr().getSign(data); | |||||
// data['sex'] = UserData().basicInfo.sex; | |||||
// data['isBurn'] = 0; | |||||
// Response res = await HttpUtil().uploadFiles( | |||||
// fileList, data, 'upload/post/postfiles', 'image', | |||||
// isShowLoading: true); | |||||
// var resData = res.data; | |||||
// if (resData['code'] == 0) { | |||||
// if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | |||||
// showToast(resData['data']['msg']); | |||||
// } | |||||
// if(resData['msg'].split('|').length !=photos.length){ | |||||
// showToast(I18n.of(context).hava_error_photo); | |||||
// } | |||||
// MessageMgr().emit('refresh_photo'); | |||||
// } | |||||
// } | |||||
} | } | ||||
void _sendPicture() async { | void _sendPicture() async { | ||||
@@ -35,7 +35,7 @@ class AudioChatPage extends StatefulWidget { | |||||
final bool isReplay; | final bool isReplay; | ||||
final bool isTranslateButler; | final bool isTranslateButler; | ||||
final Function translateButlerCloseCallBack; | final Function translateButlerCloseCallBack; | ||||
AudioChatPage({@required this.userInfo, this.isReplay = false, this.isTranslateButler,this.translateButlerCloseCallBack}); | |||||
AudioChatPage({@required this.userInfo, this.isReplay = false, this.isTranslateButler=false,this.translateButlerCloseCallBack}); | |||||
@override | @override | ||||
_AudioChatPageState createState() => _AudioChatPageState(); | _AudioChatPageState createState() => _AudioChatPageState(); | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
import 'dart:async'; | import 'dart:async'; | ||||
import 'package:chat/chat/ChatPage.dart'; | |||||
import 'package:chat/data/UserData.dart'; | import 'package:chat/data/UserData.dart'; | ||||
import 'package:chat/data/constants.dart'; | import 'package:chat/data/constants.dart'; | ||||
import 'package:chat/generated/i18n.dart'; | import 'package:chat/generated/i18n.dart'; | ||||
@@ -8,6 +9,8 @@ import 'package:chat/home/realtimehelper/real_time_helper_page.dart'; | |||||
import 'package:chat/home/unread_dot_widget.dart'; | import 'package:chat/home/unread_dot_widget.dart'; | ||||
import 'package:chat/models/UserInfo.dart'; | import 'package:chat/models/UserInfo.dart'; | ||||
import 'package:chat/models/ref_name_provider.dart'; | import 'package:chat/models/ref_name_provider.dart'; | ||||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||||
import 'package:chat/utils/CustomUI.dart'; | |||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
import 'package:chat/utils/TokenMgr.dart'; | import 'package:chat/utils/TokenMgr.dart'; | ||||
@@ -162,6 +165,8 @@ class _HomeMainState extends State<HomeMain> { | |||||
MessageMgr().on('Show My Profile', showMyProfile); | MessageMgr().on('Show My Profile', showMyProfile); | ||||
MessageMgr().on('test_Permission', msgTestPermission); | MessageMgr().on('test_Permission', msgTestPermission); | ||||
MessageMgr().on(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | MessageMgr().on(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | ||||
MessageMgr().on(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||||
MessageMgr().on(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||||
///初始化语音播放是外放还是听筒-默认外放 | ///初始化语音播放是外放还是听筒-默认外放 | ||||
SoundUtils.instance.initPlayMode(); | SoundUtils.instance.initPlayMode(); | ||||
@@ -250,6 +255,8 @@ class _HomeMainState extends State<HomeMain> { | |||||
MessageMgr().off('Show My Profile', showMyProfile); | MessageMgr().off('Show My Profile', showMyProfile); | ||||
MessageMgr().off('test_Permission', msgTestPermission); | MessageMgr().off('test_Permission', msgTestPermission); | ||||
MessageMgr().off(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | MessageMgr().off(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | ||||
MessageMgr().off(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||||
MessageMgr().off(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||||
LocalNotificationUtil.instance.dispose(); | LocalNotificationUtil.instance.dispose(); | ||||
if (time != null) { | if (time != null) { | ||||
time.cancel(); | time.cancel(); | ||||
@@ -269,6 +276,25 @@ class _HomeMainState extends State<HomeMain> { | |||||
}); | }); | ||||
} | } | ||||
receiveTranslateOrder(var data) async { | |||||
CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: data.orderId,scenes: data.scenes,desc: data.desc); | |||||
} | |||||
startTranslateHKChat(var friendID){ | |||||
Navigator.of(context).push( | |||||
new MaterialPageRoute( | |||||
builder: (context) { | |||||
return ChatPage( | |||||
key: Key('Chat'), | |||||
friendId: friendID, | |||||
isTranslateButler: true, | |||||
); | |||||
}, | |||||
), | |||||
); | |||||
} | |||||
msgTestPermission(data) async { | msgTestPermission(data) async { | ||||
PermissionStatus status = | PermissionStatus status = | ||||
await LocationPermissions().checkPermissionStatus(); | await LocationPermissions().checkPermissionStatus(); | ||||
@@ -313,79 +339,22 @@ class _HomeMainState extends State<HomeMain> { | |||||
I18n.of(context).me | I18n.of(context).me | ||||
]; | ]; | ||||
// _navigationViews = [ | |||||
// NavigationIconView( | |||||
// title: _titles[2], | |||||
// icon: IconData( | |||||
// 0xe67c, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// isShowdot: true, | |||||
// iconSize: 29), | |||||
// NavigationIconView( | |||||
// title: _titles[0], | |||||
// isShowdot: true, | |||||
// iconMargin: EdgeInsets.only(top: 2), | |||||
// type: 5, | |||||
// icon: IconData( | |||||
// 0xe66e, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// iconSize: 26.5), | |||||
// NavigationIconView( | |||||
// title: _titles[1], | |||||
// icon: IconData( | |||||
// 0xe656, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// isCenter: true, | |||||
// iconSize: 31), | |||||
// NavigationIconView( | |||||
// title: _titles[1], | |||||
// isShowdot: true, | |||||
// icon: IconData( | |||||
// 0xe60b, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// type: 6, | |||||
// iconSize: 26.5), | |||||
// NavigationIconView( | |||||
// title: _titles[3], | |||||
// icon: IconData( | |||||
// 0xe67b, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// iconSize: 26.5), | |||||
// ]; | |||||
// | |||||
// _pages = [ | |||||
// RealTimeHelperPage(), | |||||
// FriendPage(), | |||||
// FindPage(), | |||||
// ConversActionPage(), | |||||
//// GroupChatListPage(), | |||||
// ProfilePage( | |||||
// userId: UserData().basicInfo.userId, | |||||
// ), | |||||
// ]; | |||||
_navigationViews = [ | _navigationViews = [ | ||||
NavigationIconView( | NavigationIconView( | ||||
title: _titles[1], | |||||
isShowdot: true, | |||||
title: _titles[2], | |||||
icon: IconData( | icon: IconData( | ||||
0xe60b, | |||||
0xe67c, | |||||
fontFamily: 'iconfont', | fontFamily: 'iconfont', | ||||
), | ), | ||||
type: 1, | |||||
iconSize: 26.5), | |||||
isShowdot: true, | |||||
iconSize: 29), | |||||
NavigationIconView( | NavigationIconView( | ||||
title: _titles[0], | title: _titles[0], | ||||
isShowdot: true, | isShowdot: true, | ||||
iconMargin: EdgeInsets.only(top: 2), | iconMargin: EdgeInsets.only(top: 2), | ||||
type: 5, | type: 5, | ||||
icon: IconData( | icon: IconData( | ||||
0xe663, | |||||
0xe66e, | |||||
fontFamily: 'iconfont', | fontFamily: 'iconfont', | ||||
), | ), | ||||
iconSize: 26.5), | iconSize: 26.5), | ||||
@@ -397,17 +366,15 @@ class _HomeMainState extends State<HomeMain> { | |||||
), | ), | ||||
isCenter: true, | isCenter: true, | ||||
iconSize: 31), | iconSize: 31), | ||||
NavigationIconView( | NavigationIconView( | ||||
title: _titles[3], | |||||
title: _titles[1], | |||||
isShowdot: true, | isShowdot: true, | ||||
icon: IconData( | icon: IconData( | ||||
0xe66e, | |||||
0xe60b, | |||||
fontFamily: 'iconfont', | fontFamily: 'iconfont', | ||||
), | ), | ||||
type: 4, | |||||
type: 6, | |||||
iconSize: 26.5), | iconSize: 26.5), | ||||
NavigationIconView( | NavigationIconView( | ||||
title: _titles[3], | title: _titles[3], | ||||
icon: IconData( | icon: IconData( | ||||
@@ -418,17 +385,76 @@ class _HomeMainState extends State<HomeMain> { | |||||
]; | ]; | ||||
_pages = [ | _pages = [ | ||||
ConversActionPage(), | |||||
// RealTimeHelperPage(), | |||||
RealTimeHelperPage(), | |||||
FriendPage(), | FriendPage(), | ||||
FindPage(), | FindPage(), | ||||
// ConversActionPage(), | |||||
GroupChatListPage(), | |||||
ConversActionPage(), | |||||
// GroupChatListPage(), | |||||
ProfilePage( | ProfilePage( | ||||
userId: UserData().basicInfo.userId, | userId: UserData().basicInfo.userId, | ||||
), | ), | ||||
]; | ]; | ||||
// _navigationViews = [ | |||||
// NavigationIconView( | |||||
// title: _titles[1], | |||||
// isShowdot: true, | |||||
// icon: IconData( | |||||
// 0xe60b, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// type: 1, | |||||
// iconSize: 26.5), | |||||
// NavigationIconView( | |||||
// title: _titles[0], | |||||
// isShowdot: true, | |||||
// iconMargin: EdgeInsets.only(top: 2), | |||||
// type: 5, | |||||
// icon: IconData( | |||||
// 0xe663, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// iconSize: 26.5), | |||||
// NavigationIconView( | |||||
// title: _titles[1], | |||||
// icon: IconData( | |||||
// 0xe656, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// isCenter: true, | |||||
// iconSize: 31), | |||||
// | |||||
// NavigationIconView( | |||||
// title: _titles[3], | |||||
// isShowdot: true, | |||||
// icon: IconData( | |||||
// 0xe66e, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// type: 4, | |||||
// iconSize: 26.5), | |||||
// | |||||
// NavigationIconView( | |||||
// title: _titles[3], | |||||
// icon: IconData( | |||||
// 0xe67b, | |||||
// fontFamily: 'iconfont', | |||||
// ), | |||||
// iconSize: 26.5), | |||||
// ]; | |||||
// | |||||
// _pages = [ | |||||
// ConversActionPage(), | |||||
//// RealTimeHelperPage(), | |||||
// FriendPage(), | |||||
// FindPage(), | |||||
//// ConversActionPage(), | |||||
// GroupChatListPage(), | |||||
// ProfilePage( | |||||
// userId: UserData().basicInfo.userId, | |||||
// ), | |||||
// ]; | |||||
} | } | ||||
@@ -5,12 +5,14 @@ import 'package:chat/chat/ChatPage.dart'; | |||||
import 'package:chat/data/UserData.dart'; | import 'package:chat/data/UserData.dart'; | ||||
import 'package:chat/data/chat_data_mgr.dart'; | import 'package:chat/data/chat_data_mgr.dart'; | ||||
import 'package:chat/data/group_data_mgr.dart'; | import 'package:chat/data/group_data_mgr.dart'; | ||||
import 'package:chat/data/translate_hk_data_mgr.dart'; | |||||
import 'package:chat/home/add_friend.dart'; | import 'package:chat/home/add_friend.dart'; | ||||
import 'package:chat/home/group_announcement.dart'; | import 'package:chat/home/group_announcement.dart'; | ||||
import 'package:chat/home/group_manage_page.dart'; | import 'package:chat/home/group_manage_page.dart'; | ||||
import 'package:chat/models/group_info_model.dart'; | import 'package:chat/models/group_info_model.dart'; | ||||
import 'package:chat/models/money_change.dart'; | import 'package:chat/models/money_change.dart'; | ||||
import 'package:chat/models/ref_name_provider.dart'; | import 'package:chat/models/ref_name_provider.dart'; | ||||
import 'package:chat/utils/LoadingDialog.dart'; | |||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
import 'package:chat/utils/group_member_model.dart'; | import 'package:chat/utils/group_member_model.dart'; | ||||
import 'package:chat/utils/msgHandler.dart'; | import 'package:chat/utils/msgHandler.dart'; | ||||
@@ -53,41 +55,62 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
int curToLang = 1; | int curToLang = 1; | ||||
int curSourceLang = UserData().language; | int curSourceLang = UserData().language; | ||||
int curScenes = 0; | int curScenes = 0; | ||||
List<ValueModel> langList; | |||||
List<ValueModel> scenesList; | |||||
List<ValueModel> langList; ///语言列表 | |||||
List<ValueModel> scenesList; ///场景列表 | |||||
String extraMsg; | |||||
String extraMsg=''; | |||||
FocusNode focusNode = new FocusNode(); | FocusNode focusNode = new FocusNode(); | ||||
String textLimitTips=''; | String textLimitTips=''; | ||||
ScrollController _scrollController = new ScrollController(); | ScrollController _scrollController = new ScrollController(); | ||||
int orderStatus = 0; ///订单状态 | |||||
int secondsPassed = 1;///等待时间计数 | |||||
int timeStamp; ///订单开始时间戳 | |||||
Timer waitTimer;///等待时间计时器 | |||||
int time60=1; ///60秒一圈计数 | |||||
int waitNum=0; | |||||
refreshOrder(args){ | |||||
orderStatus = TranslateHKMgr().orderStatus; | |||||
waitNum = TranslateHKMgr().waitNum; | |||||
waitTimer = Timer.periodic(Duration(seconds: 1), (Timer t) { | |||||
handleTick(); | |||||
}); | |||||
setState(() {}); | |||||
} | |||||
@override | @override | ||||
void initState() { | void initState() { | ||||
super.initState(); | super.initState(); | ||||
initData(); | |||||
orderStatus = TranslateHKMgr().orderStatus; | |||||
waitNum = TranslateHKMgr().waitNum; | |||||
initData(); | |||||
MessageMgr().on(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | |||||
WidgetsBinding.instance.addPostFrameCallback((_) { | WidgetsBinding.instance.addPostFrameCallback((_) { | ||||
Future.delayed(Duration(seconds: 1), () { | |||||
// CustomUI.buildTranslationHelperOrderDialog(context,true); | |||||
Navigator.of(context).push( | |||||
new MaterialPageRoute( | |||||
builder: (context) { | |||||
return ChatPage( | |||||
key: Key('Chat'), | |||||
friendId: 100029, | |||||
isTranslateButler: true, | |||||
); | |||||
}, | |||||
), | |||||
); | |||||
}); | |||||
// Future.delayed(Duration(seconds: 1), () { | |||||
//// CustomUI.buildTranslationHelperOrderDialog(context,true); | |||||
// Navigator.of(context).push( | |||||
// new MaterialPageRoute( | |||||
// builder: (context) { | |||||
// return ChatPage( | |||||
// key: Key('Chat'), | |||||
// friendId: 100029, | |||||
// isTranslateButler: true, | |||||
// ); | |||||
// }, | |||||
// ), | |||||
// ); | |||||
// }); | |||||
@@ -113,19 +136,18 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
} | } | ||||
} | } | ||||
bool isCreatingOrder=false; | |||||
apply() { | apply() { | ||||
if(isCreatingOrder){ | |||||
return; | |||||
} | |||||
isCreatingOrder=true; | |||||
MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); | MsgHandler.sendCreateTranslateOrder(langList[curSourceLang].key,langList[curToLang].key,scenesList[curScenes].key,extraMsg); | ||||
isApply = false; | |||||
timer = Timer.periodic(Duration(seconds: 1), (Timer t) { | |||||
handleTick(); | |||||
}); | |||||
setState(() {}); | |||||
} | } | ||||
@override | @override | ||||
@@ -152,9 +174,9 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
@override | @override | ||||
void dispose() { | void dispose() { | ||||
timer?.cancel(); | |||||
if (!isApply && timeStamp != null) { | |||||
waitTimer?.cancel(); | |||||
MessageMgr().off(MessageMgr.TRANSLATE_HK_REFRESH_ORDER, refreshOrder); | |||||
if (orderStatus==TranslateHKMgr.ORDER_STATUS_WAITING && timeStamp != null) { | |||||
print('保存时间戳$timeStamp'); | print('保存时间戳$timeStamp'); | ||||
SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); | SPUtils.save(Constants.TranslationHelper, timeStamp.toString()); | ||||
} | } | ||||
@@ -320,13 +342,13 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
body: SafeArea( | body: SafeArea( | ||||
child: Container( | child: Container( | ||||
color: Color(0xffE8EAF0), | color: Color(0xffE8EAF0), | ||||
child: isApply ? applyPage() : waitPage(), | |||||
child: orderStatus==TranslateHKMgr.ORDER_STATUS_EMPTY ? createOrderPage() : waitPage(), | |||||
), | ), | ||||
), | ), | ||||
); | ); | ||||
} | } | ||||
Widget applyPage() { | |||||
Widget createOrderPage() { | |||||
return ListView( | return ListView( | ||||
controller: _scrollController, | controller: _scrollController, | ||||
children: <Widget>[ | children: <Widget>[ | ||||
@@ -575,7 +597,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
textAlign: TextAlign.center, | textAlign: TextAlign.center, | ||||
text: TextSpan(children: [ | text: TextSpan(children: [ | ||||
TextSpan( | TextSpan( | ||||
text: '333', | |||||
text: '$waitNum', | |||||
style: TextStyle( | style: TextStyle( | ||||
color: Color(0xffFF1010), | color: Color(0xffFF1010), | ||||
fontSize: 27)), | fontSize: 27)), | ||||
@@ -608,7 +630,7 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
textAlign: TextAlign.center, | textAlign: TextAlign.center, | ||||
text: TextSpan(children: [ | text: TextSpan(children: [ | ||||
TextSpan( | TextSpan( | ||||
text: '666', | |||||
text: '${waitNum*5}', | |||||
style: TextStyle( | style: TextStyle( | ||||
color: Color(0xff3875E9), | color: Color(0xff3875E9), | ||||
fontSize: 27)), | fontSize: 27)), | ||||
@@ -693,9 +715,11 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
onPressed: () async { | onPressed: () async { | ||||
await SPUtils.save(Constants.TranslationHelper, null); | await SPUtils.save(Constants.TranslationHelper, null); | ||||
setState(() { | setState(() { | ||||
isApply = true; | |||||
timer?.cancel(); | |||||
orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; | |||||
waitTimer?.cancel(); | |||||
secondsPassed = 0; | secondsPassed = 0; | ||||
MsgHandler.sendCancelTranslateOrder(); | |||||
}); | }); | ||||
}), | }), | ||||
), | ), | ||||
@@ -717,13 +741,9 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
); | ); | ||||
} | } | ||||
bool isApply = true; | |||||
int secondsPassed = 1; | |||||
int timeStamp; | |||||
Timer timer; | |||||
int time60=1; | |||||
void handleTick() { | void handleTick() { | ||||
// if (isActive) { | |||||
setState(() { | setState(() { | ||||
secondsPassed = secondsPassed + 1; //需要更新UI | secondsPassed = secondsPassed + 1; //需要更新UI | ||||
@@ -732,7 +752,6 @@ class TranslationButlerPageState extends State<TranslationButlerPage> { | |||||
time60=0; | time60=0; | ||||
} | } | ||||
}); | }); | ||||
// } | |||||
} | } | ||||
getFull(int sec) { | getFull(int sec) { | ||||
@@ -32,6 +32,12 @@ class LastMessageModel { | |||||
friendId = msgModel.from; | friendId = msgModel.from; | ||||
} | } | ||||
///翻译管家 | |||||
if(msgModel.channelType==ChatChannelType.Session.value && msgModel.msgType==ChatType.GroupChatNoticeType.value){ | |||||
friendId = msgModel.friendId; | |||||
} | |||||
channelType = msgModel.channelType; | channelType = msgModel.channelType; | ||||
type = ChatType.valueOf(msgModel.msgType); | type = ChatType.valueOf(msgModel.msgType); | ||||
@@ -7,6 +7,7 @@ import 'package:chat/generated/i18n.dart'; | |||||
import 'package:chat/models/last_message_model.dart'; | import 'package:chat/models/last_message_model.dart'; | ||||
import 'package:chat/models/ref_name_provider.dart'; | import 'package:chat/models/ref_name_provider.dart'; | ||||
import 'package:chat/proto/chat.pb.dart'; | import 'package:chat/proto/chat.pb.dart'; | ||||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||||
import 'package:chat/utils/HttpUtil.dart'; | import 'package:chat/utils/HttpUtil.dart'; | ||||
import 'package:chat/utils/MessageMgr.dart'; | import 'package:chat/utils/MessageMgr.dart'; | ||||
import 'package:chat/utils/msgHandler.dart'; | import 'package:chat/utils/msgHandler.dart'; | ||||
@@ -136,17 +137,36 @@ class _LastMsgDescriptionState extends State<LastMsgDescription> { | |||||
break; | break; | ||||
case ChatType.GroupChatNoticeType: | case ChatType.GroupChatNoticeType: | ||||
var notice = | |||||
GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||||
print('widget.lastMessageModel.type ${widget.lastMessageModel.type}'); | |||||
var groupInfo = await GroupInfoMgr() | |||||
.getGroupInfo(widget.lastMessageModel.sessionId); | |||||
desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo); | |||||
print('ggdesc $desc}'); | |||||
if (desc.contains('\$')) { | |||||
desc = desc.substring(0, desc.indexOf('\$')); | |||||
} else {} | |||||
if(widget.lastMessageModel.channelType==ChatChannelType.Session.value){ | |||||
///翻译管家的 通知消息 | |||||
desc = '翻译管家---'; | |||||
print('翻译管家的 通知消息-'); | |||||
TransHKChatNotice res = TransHKChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||||
if(res.noticeType==TransHKChatNoticeType.StartChat){ | |||||
return '[翻译管家服务开始]'; | |||||
}else if(res.noticeType==TransHKChatNoticeType.EndChat){ | |||||
return '[翻译管家服务结束]'; | |||||
}else{ | |||||
return ''; | |||||
} | |||||
}else{ | |||||
var notice = | |||||
GroupChatNotice.fromBuffer(widget.lastMessageModel.msgContent); | |||||
print('widget.lastMessageModel.type ${widget.lastMessageModel.type}'); | |||||
var groupInfo = await GroupInfoMgr() | |||||
.getGroupInfo(widget.lastMessageModel.sessionId); | |||||
desc = MsgHandler.getGroupNoticeMsg(notice, groupInfo); | |||||
print('ggdesc $desc}'); | |||||
if (desc.contains('\$')) { | |||||
desc = desc.substring(0, desc.indexOf('\$')); | |||||
} else {} | |||||
} | |||||
break; | break; | ||||
@@ -12,6 +12,8 @@ import 'package:protobuf/protobuf.dart' as $pb; | |||||
import 'chat.pb.dart' as $0; | import 'chat.pb.dart' as $0; | ||||
import 'transhousekeeper.pbenum.dart'; | |||||
export 'transhousekeeper.pbenum.dart'; | export 'transhousekeeper.pbenum.dart'; | ||||
class IssueTransHKOrderReq extends $pb.GeneratedMessage { | class IssueTransHKOrderReq extends $pb.GeneratedMessage { | ||||
@@ -276,79 +278,38 @@ class CancellationTransHKOrderPush extends $pb.GeneratedMessage { | |||||
void clearOrderId() => clearField(1); | void clearOrderId() => clearField(1); | ||||
} | } | ||||
class TransHKChatStartPush extends $pb.GeneratedMessage { | |||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatStartPush', package: const $pb.PackageName('yl_pb')) | |||||
..aInt64(1, 'startTime') | |||||
..a<$core.int>(2, 'targetId', $pb.PbFieldType.OU3) | |||||
..a<$0.BaseUserInfo>(3, 'employer', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||||
..a<$0.BaseUserInfo>(4, 'inter', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||||
..hasRequiredFields = false | |||||
; | |||||
TransHKChatStartPush._() : super(); | |||||
factory TransHKChatStartPush() => create(); | |||||
factory TransHKChatStartPush.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||||
factory TransHKChatStartPush.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||||
TransHKChatStartPush clone() => TransHKChatStartPush()..mergeFromMessage(this); | |||||
TransHKChatStartPush copyWith(void Function(TransHKChatStartPush) updates) => super.copyWith((message) => updates(message as TransHKChatStartPush)); | |||||
$pb.BuilderInfo get info_ => _i; | |||||
@$core.pragma('dart2js:noInline') | |||||
static TransHKChatStartPush create() => TransHKChatStartPush._(); | |||||
TransHKChatStartPush createEmptyInstance() => create(); | |||||
static $pb.PbList<TransHKChatStartPush> createRepeated() => $pb.PbList<TransHKChatStartPush>(); | |||||
static TransHKChatStartPush getDefault() => _defaultInstance ??= create()..freeze(); | |||||
static TransHKChatStartPush _defaultInstance; | |||||
Int64 get startTime => $_getI64(0); | |||||
set startTime(Int64 v) { $_setInt64(0, v); } | |||||
$core.bool hasStartTime() => $_has(0); | |||||
void clearStartTime() => clearField(1); | |||||
$core.int get targetId => $_get(1, 0); | |||||
set targetId($core.int v) { $_setUnsignedInt32(1, v); } | |||||
$core.bool hasTargetId() => $_has(1); | |||||
void clearTargetId() => clearField(2); | |||||
$0.BaseUserInfo get employer => $_getN(2); | |||||
set employer($0.BaseUserInfo v) { setField(3, v); } | |||||
$core.bool hasEmployer() => $_has(2); | |||||
void clearEmployer() => clearField(3); | |||||
$0.BaseUserInfo get inter => $_getN(3); | |||||
set inter($0.BaseUserInfo v) { setField(4, v); } | |||||
$core.bool hasInter() => $_has(3); | |||||
void clearInter() => clearField(4); | |||||
} | |||||
class TransHKChatEndPush extends $pb.GeneratedMessage { | |||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatEndPush', package: const $pb.PackageName('yl_pb')) | |||||
..a<$core.int>(1, 'targetId', $pb.PbFieldType.OU3) | |||||
..aInt64(2, 'endTime') | |||||
class TransHKChatNotice extends $pb.GeneratedMessage { | |||||
static final $pb.BuilderInfo _i = $pb.BuilderInfo('TransHKChatNotice', package: const $pb.PackageName('yl_pb')) | |||||
..e<TransHKChatNoticeType>(1, 'noticeType', $pb.PbFieldType.OE, TransHKChatNoticeType.StartChat, TransHKChatNoticeType.valueOf, TransHKChatNoticeType.values) | |||||
..a<$0.BaseUserInfo>(2, 'operatuId', $pb.PbFieldType.OM, $0.BaseUserInfo.getDefault, $0.BaseUserInfo.create) | |||||
..pc<$0.BaseUserInfo>(3, 'operateduId', $pb.PbFieldType.PM,$0.BaseUserInfo.create) | |||||
..hasRequiredFields = false | ..hasRequiredFields = false | ||||
; | ; | ||||
TransHKChatEndPush._() : super(); | |||||
factory TransHKChatEndPush() => create(); | |||||
factory TransHKChatEndPush.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||||
factory TransHKChatEndPush.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||||
TransHKChatEndPush clone() => TransHKChatEndPush()..mergeFromMessage(this); | |||||
TransHKChatEndPush copyWith(void Function(TransHKChatEndPush) updates) => super.copyWith((message) => updates(message as TransHKChatEndPush)); | |||||
TransHKChatNotice._() : super(); | |||||
factory TransHKChatNotice() => create(); | |||||
factory TransHKChatNotice.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); | |||||
factory TransHKChatNotice.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); | |||||
TransHKChatNotice clone() => TransHKChatNotice()..mergeFromMessage(this); | |||||
TransHKChatNotice copyWith(void Function(TransHKChatNotice) updates) => super.copyWith((message) => updates(message as TransHKChatNotice)); | |||||
$pb.BuilderInfo get info_ => _i; | $pb.BuilderInfo get info_ => _i; | ||||
@$core.pragma('dart2js:noInline') | @$core.pragma('dart2js:noInline') | ||||
static TransHKChatEndPush create() => TransHKChatEndPush._(); | |||||
TransHKChatEndPush createEmptyInstance() => create(); | |||||
static $pb.PbList<TransHKChatEndPush> createRepeated() => $pb.PbList<TransHKChatEndPush>(); | |||||
static TransHKChatEndPush getDefault() => _defaultInstance ??= create()..freeze(); | |||||
static TransHKChatEndPush _defaultInstance; | |||||
$core.int get targetId => $_get(0, 0); | |||||
set targetId($core.int v) { $_setUnsignedInt32(0, v); } | |||||
$core.bool hasTargetId() => $_has(0); | |||||
void clearTargetId() => clearField(1); | |||||
Int64 get endTime => $_getI64(1); | |||||
set endTime(Int64 v) { $_setInt64(1, v); } | |||||
$core.bool hasEndTime() => $_has(1); | |||||
void clearEndTime() => clearField(2); | |||||
static TransHKChatNotice create() => TransHKChatNotice._(); | |||||
TransHKChatNotice createEmptyInstance() => create(); | |||||
static $pb.PbList<TransHKChatNotice> createRepeated() => $pb.PbList<TransHKChatNotice>(); | |||||
static TransHKChatNotice getDefault() => _defaultInstance ??= create()..freeze(); | |||||
static TransHKChatNotice _defaultInstance; | |||||
TransHKChatNoticeType get noticeType => $_getN(0); | |||||
set noticeType(TransHKChatNoticeType v) { setField(1, v); } | |||||
$core.bool hasNoticeType() => $_has(0); | |||||
void clearNoticeType() => clearField(1); | |||||
$0.BaseUserInfo get operatuId => $_getN(1); | |||||
set operatuId($0.BaseUserInfo v) { setField(2, v); } | |||||
$core.bool hasOperatuId() => $_has(1); | |||||
void clearOperatuId() => clearField(2); | |||||
$core.List<$0.BaseUserInfo> get operateduId => $_getList(2); | |||||
} | } | ||||
@@ -30,3 +30,18 @@ class TransHKOrderState extends $pb.ProtobufEnum { | |||||
const TransHKOrderState._($core.int v, $core.String n) : super(v, n); | const TransHKOrderState._($core.int v, $core.String n) : super(v, n); | ||||
} | } | ||||
class TransHKChatNoticeType extends $pb.ProtobufEnum { | |||||
static const TransHKChatNoticeType StartChat = TransHKChatNoticeType._(1, 'StartChat'); | |||||
static const TransHKChatNoticeType EndChat = TransHKChatNoticeType._(2, 'EndChat'); | |||||
static const $core.List<TransHKChatNoticeType> values = <TransHKChatNoticeType> [ | |||||
StartChat, | |||||
EndChat, | |||||
]; | |||||
static final $core.Map<$core.int, TransHKChatNoticeType> _byValue = $pb.ProtobufEnum.initByValue(values); | |||||
static TransHKChatNoticeType valueOf($core.int value) => _byValue[value]; | |||||
const TransHKChatNoticeType._($core.int v, $core.String n) : super(v, n); | |||||
} | |||||
@@ -16,6 +16,14 @@ const TransHKOrderState$json = const { | |||||
], | ], | ||||
}; | }; | ||||
const TransHKChatNoticeType$json = const { | |||||
'1': 'TransHKChatNoticeType', | |||||
'2': const [ | |||||
const {'1': 'StartChat', '2': 1}, | |||||
const {'1': 'EndChat', '2': 2}, | |||||
], | |||||
}; | |||||
const IssueTransHKOrderReq$json = const { | const IssueTransHKOrderReq$json = const { | ||||
'1': 'IssueTransHKOrderReq', | '1': 'IssueTransHKOrderReq', | ||||
'2': const [ | '2': const [ | ||||
@@ -81,21 +89,12 @@ const CancellationTransHKOrderPush$json = const { | |||||
], | ], | ||||
}; | }; | ||||
const TransHKChatStartPush$json = const { | |||||
'1': 'TransHKChatStartPush', | |||||
'2': const [ | |||||
const {'1': 'StartTime', '3': 1, '4': 1, '5': 3, '10': 'StartTime'}, | |||||
const {'1': 'TargetId', '3': 2, '4': 1, '5': 13, '10': 'TargetId'}, | |||||
const {'1': 'Employer', '3': 3, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Employer'}, | |||||
const {'1': 'Inter', '3': 4, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'Inter'}, | |||||
], | |||||
}; | |||||
const TransHKChatEndPush$json = const { | |||||
'1': 'TransHKChatEndPush', | |||||
const TransHKChatNotice$json = const { | |||||
'1': 'TransHKChatNotice', | |||||
'2': const [ | '2': const [ | ||||
const {'1': 'TargetId', '3': 1, '4': 1, '5': 13, '10': 'TargetId'}, | |||||
const {'1': 'EndTime', '3': 2, '4': 1, '5': 3, '10': 'EndTime'}, | |||||
const {'1': 'NoticeType', '3': 1, '4': 1, '5': 14, '6': '.yl_pb.TransHKChatNoticeType', '10': 'NoticeType'}, | |||||
const {'1': 'OperatuId', '3': 2, '4': 1, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperatuId'}, | |||||
const {'1': 'OperateduId', '3': 3, '4': 3, '5': 11, '6': '.yl_pb.BaseUserInfo', '10': 'OperateduId'}, | |||||
], | ], | ||||
}; | }; | ||||
@@ -13,6 +13,12 @@ enum TransHKOrderState{ | |||||
Completed = 5; //已完成 | Completed = 5; //已完成 | ||||
} | } | ||||
//comid = 3 | |||||
enum TransHKChatNoticeType{ | |||||
StartChat = 1; //开始 | |||||
EndChat = 2; //结束 | |||||
} | |||||
//-------------------------------------------消息------------------------- | //-------------------------------------------消息------------------------- | ||||
//Msg=1 发布翻译管家帮助订单 | //Msg=1 发布翻译管家帮助订单 | ||||
message IssueTransHKOrderReq { | message IssueTransHKOrderReq { | ||||
@@ -66,17 +72,9 @@ message CancellationTransHKOrderPush { | |||||
} | } | ||||
//Msg = 30 翻译官价聊天开始推送 | |||||
message TransHKChatStartPush { | |||||
optional int64 StartTime = 1; //开始时间 | |||||
optional uint32 TargetId = 2; //目标聊天用户 | |||||
optional BaseUserInfo Employer = 3; //雇主信息 | |||||
optional BaseUserInfo Inter = 4; //翻译官信息 | |||||
} | |||||
//Msg = 31 翻译官价聊天结束推送 | |||||
message TransHKChatEndPush { | |||||
optional uint32 TargetId = 1; //发送目标Id SessionId or GroudId | |||||
optional int64 EndTime = 2; //结束时间 | |||||
//翻译会话通告消息 | |||||
message TransHKChatNotice { | |||||
optional TransHKChatNoticeType NoticeType = 1; //公告类型 | |||||
optional BaseUserInfo OperatuId = 2; //操作用户Id | |||||
repeated BaseUserInfo OperateduId = 3; //被操作用户Ids 有可能是多人 | |||||
} | } |
@@ -1389,9 +1389,12 @@ class CustomUI { | |||||
I18n.of(context) | I18n.of(context) | ||||
.translation_butler_dialog_start_service, | .translation_butler_dialog_start_service, | ||||
() { | () { | ||||
MsgHandler.sendReceiveOrder(orderId); | |||||
Navigator.of(context).pop(); | Navigator.of(context).pop(); | ||||
}), | |||||
},onPress: (){ | |||||
MsgHandler.sendReceiveOrder(); | |||||
Navigator.of(context).pop(); | |||||
},), | |||||
) | ) | ||||
], | ], | ||||
), | ), | ||||
@@ -44,9 +44,9 @@ class HttpUtil { | |||||
//static const String BaseUrl = 'http://192.168.0.223:7001/'; | //static const String BaseUrl = 'http://192.168.0.223:7001/'; | ||||
//static const String BaseUrl = 'http://192.168.0.207:9080/'; | //static const String BaseUrl = 'http://192.168.0.207:9080/'; | ||||
// static const String BaseUrl = 'http://120.79.107.63:9080/'; | |||||
static const String BaseUrl = 'http://120.79.107.63:9080/'; | |||||
//static const String BaseUrl = 'http://192.168.0.177:9016/'; | //static const String BaseUrl = 'http://192.168.0.177:9016/'; | ||||
static const String BaseUrl = 'https://datasm.chengyouhd.com/'; | |||||
// static const String BaseUrl = 'https://datasm.chengyouhd.com/'; | |||||
static HttpUtil _getInstance() { | static HttpUtil _getInstance() { | ||||
if (_instance == null) { | if (_instance == null) { | ||||
@@ -6,6 +6,10 @@ class MessageMgr { | |||||
static const String REFRESH_PUSH_PERMISSION ='refresh_push_permission'; | static const String REFRESH_PUSH_PERMISSION ='refresh_push_permission'; | ||||
static const String RECEIVE_THIRD_SHARE ='receive_third_share'; | static const String RECEIVE_THIRD_SHARE ='receive_third_share'; | ||||
static const String TRANSLATE_HK_REFRESH_ORDER ='translate_hk_refresh_order'; | |||||
static const String TRANSLATE_HK_RECEIVE_ORDER ='translate_hk_receive_order'; | |||||
static const String TRANSLATE_HK_START_CHAT ='translate_hk_start_chat'; | |||||
//私有构造函数 | //私有构造函数 | ||||
MessageMgr._internal(); | MessageMgr._internal(); | ||||
@@ -189,7 +189,7 @@ class WidgetUtil { | |||||
//防止头像文件被清除后 | //防止头像文件被清除后 | ||||
Uint8List pngBytes = file.readAsBytesSync(); | Uint8List pngBytes = file.readAsBytesSync(); | ||||
print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}'); | |||||
// print('pngBytes.lengthInBytes length;${pngBytes.lengthInBytes}'); | |||||
if (pngBytes.lengthInBytes > 8000) { | if (pngBytes.lengthInBytes > 8000) { | ||||
return ClipRRect( | return ClipRRect( | ||||
borderRadius: BorderRadius.circular(5), | borderRadius: BorderRadius.circular(5), | ||||
@@ -221,7 +221,7 @@ class WidgetUtil { | |||||
Uint8List pngBytes = byteData.buffer.asUint8List(); | Uint8List pngBytes = byteData.buffer.asUint8List(); | ||||
File file = await FileCacheMgr() | File file = await FileCacheMgr() | ||||
.writeFile(model.sessionId.toString(), pngBytes); | .writeFile(model.sessionId.toString(), pngBytes); | ||||
print('图片地址byteData${byteData.lengthInBytes}'); | |||||
// print('图片地址byteData${byteData.lengthInBytes}'); | |||||
if (byteData.lengthInBytes > 8000 && members.length > 1) { | if (byteData.lengthInBytes > 8000 && members.length > 1) { | ||||
//图片保存成功 | //图片保存成功 | ||||
GroupInfoMgr().updateAvatar(model.sessionId, file.path); | GroupInfoMgr().updateAvatar(model.sessionId, file.path); | ||||
@@ -6,11 +6,14 @@ import 'package:chat/data/UserData.dart'; | |||||
import 'package:chat/data/chat_data_mgr.dart'; | import 'package:chat/data/chat_data_mgr.dart'; | ||||
import 'package:chat/data/constants.dart'; | import 'package:chat/data/constants.dart'; | ||||
import 'package:chat/data/group_data_mgr.dart'; | import 'package:chat/data/group_data_mgr.dart'; | ||||
import 'package:chat/data/translate_hk_data_mgr.dart'; | |||||
import 'package:chat/generated/i18n.dart'; | import 'package:chat/generated/i18n.dart'; | ||||
import 'package:chat/home/IndexPage.dart'; | import 'package:chat/home/IndexPage.dart'; | ||||
import 'package:chat/home/realtimehelper/translation_butler_page.dart'; | |||||
import 'package:chat/models/ChatMsg.dart'; | import 'package:chat/models/ChatMsg.dart'; | ||||
import 'package:chat/models/group_info_model.dart'; | import 'package:chat/models/group_info_model.dart'; | ||||
import 'package:chat/proto/all.pbserver.dart'; | import 'package:chat/proto/all.pbserver.dart'; | ||||
import 'package:chat/proto/transhousekeeper.pb.dart'; | |||||
import 'package:chat/utils/NetUtil.dart'; | import 'package:chat/utils/NetUtil.dart'; | ||||
import 'package:chat/utils/blacklist_mgr.dart'; | import 'package:chat/utils/blacklist_mgr.dart'; | ||||
import 'package:chat/utils/friend_list_mgr.dart'; | import 'package:chat/utils/friend_list_mgr.dart'; | ||||
@@ -23,6 +26,7 @@ import 'package:flutter/material.dart'; | |||||
import 'package:oktoast/oktoast.dart'; | import 'package:oktoast/oktoast.dart'; | ||||
import 'package:fixnum/fixnum.dart'; | import 'package:fixnum/fixnum.dart'; | ||||
import 'LoadingDialog.dart'; | |||||
import 'MessageMgr.dart'; | import 'MessageMgr.dart'; | ||||
const MaxMsgContentSize = 1024 * 1024 * 3; | const MaxMsgContentSize = 1024 * 1024 * 3; | ||||
@@ -257,9 +261,13 @@ class MsgHandler { | |||||
// static int receivedCount=0; | // static int receivedCount=0; | ||||
static handlerReceiveMsg(PushChat chat) async { | static handlerReceiveMsg(PushChat chat) async { | ||||
bool isGroup = false; | bool isGroup = false; | ||||
bool isTranslateHK= false; | |||||
if (chat.channelType == ChatChannelType.Group) { | if (chat.channelType == ChatChannelType.Group) { | ||||
print('群聊消息'); | print('群聊消息'); | ||||
isGroup = true; | isGroup = true; | ||||
}else if (chat.channelType == ChatChannelType.TransHK) { | |||||
print('聊天管家消息'); | |||||
isTranslateHK = true; | |||||
} | } | ||||
MsgModel msgModel; | MsgModel msgModel; | ||||
@@ -313,7 +321,7 @@ class MsgHandler { | |||||
} | } | ||||
} else { | } else { | ||||
if (chat.sendUserId == 0) { | if (chat.sendUserId == 0) { | ||||
print('服务器通知消息 ${chat.sendTime.toInt()}'); | |||||
print('服务器通知消息 ${chat.sendTime.toInt()} 是否是翻译管家 $isTranslateHK'); | |||||
if (isGroup) { | if (isGroup) { | ||||
if (chat.cType == ChatType.GroupChatNoticeType) { | if (chat.cType == ChatType.GroupChatNoticeType) { | ||||
@@ -405,7 +413,40 @@ class MsgHandler { | |||||
chat.contentBuff, chat.sendTime.toInt(), chat.targetId, | chat.contentBuff, chat.sendTime.toInt(), chat.targetId, | ||||
channelType: ChatChannelType.Group.value); | channelType: ChatChannelType.Group.value); | ||||
} | } | ||||
} else {//私聊通知消息 | |||||
} | |||||
else if(isTranslateHK){ //TODO ddddd | |||||
var myId = UserData().basicInfo.userId; | |||||
TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff); | |||||
BaseUserInfo friendId ; | |||||
if(notice.operateduId[0].id==myId){ | |||||
friendId =notice.operateduId[1]; | |||||
}else{ | |||||
friendId = notice.operateduId[0]; | |||||
} | |||||
print('notice.operateduId length ${notice.operateduId.length}'); | |||||
print('friend id: ${friendId.id} '); | |||||
int sessionId = chat.targetId; | |||||
if (chat.cType == ChatType.GroupChatNoticeType) { | |||||
print('是群公告哦'); | |||||
msgModel = MsgModel(0, friendId.id, chat.cType.value, | |||||
chat.contentBuff, chat.sendTime.toInt(), sessionId, | |||||
channelType: ChatChannelType.Session.value); | |||||
} | |||||
///接到开始翻译管家消息-打开翻译管家页面 | |||||
if(notice.noticeType==TransHKChatNoticeType.StartChat){ | |||||
Future.delayed(Duration(seconds: 3),(){ | |||||
curActiveSession = sessionId; | |||||
print('curActiveSession:$curActiveSession'); | |||||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id); | |||||
}); | |||||
} | |||||
}else{//私聊通知消息 | |||||
if (chat.cType == ChatType.RedWalletChatType) { | if (chat.cType == ChatType.RedWalletChatType) { | ||||
//系统红包通知消息 | //系统红包通知消息 | ||||
RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff); | RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff); | ||||
@@ -430,9 +471,9 @@ class MsgHandler { | |||||
print('未知私聊通知消息'); | print('未知私聊通知消息'); | ||||
} | } | ||||
} | } | ||||
} else { //聊天消息 | |||||
} | |||||
else { //聊天消息 | |||||
// receivedCount++; | |||||
@@ -539,7 +580,7 @@ class MsgHandler { | |||||
print('消息为空,无法保存'); | print('消息为空,无法保存'); | ||||
return; | return; | ||||
} | } | ||||
// print('收到消息,准备保存 会话Id:${msgModel.sessionId}'); | |||||
print('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); | |||||
ChatDataMgr().saveMsg(msgModel); | ChatDataMgr().saveMsg(msgModel); | ||||
if (msgModel.msgType == ChatType.ShortVoiceChatType.value) { | if (msgModel.msgType == ChatType.ShortVoiceChatType.value) { | ||||
//如果是语音消息,自动下载 | //如果是语音消息,自动下载 | ||||
@@ -929,7 +970,7 @@ class MsgHandler { | |||||
handlerReceiveOrder(content); | handlerReceiveOrder(content); | ||||
}else if(msgId ==6){ | }else if(msgId ==6){ | ||||
handlerCancelTranslateOrder(content); | handlerCancelTranslateOrder(content); | ||||
}else if(msgId==50){ | |||||
}else if(msgId==20){ | |||||
handlerDeliveryInterpreterOrderPush(content); | handlerDeliveryInterpreterOrderPush(content); | ||||
} | } | ||||
break; | break; | ||||
@@ -1224,84 +1265,101 @@ class MsgHandler { | |||||
//发布翻译管家帮助订单 | //发布翻译管家帮助订单 | ||||
static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { | static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { | ||||
showToast('正在创建订单...'); | |||||
debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); | debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); | ||||
// var seq = IssueInterpreterOrderReq.create(); | |||||
// seq.tLanguage = fromLanguage|toLanguage; | |||||
// | |||||
// NetWork().sendMsg(ComId.TranslateOrder, 1, seq); | |||||
var seq = IssueTransHKOrderReq.create(); | |||||
seq.tLanguage = fromLanguage | toLanguage; | |||||
seq.scenes = 0; | |||||
seq.desc = extraDesc; | |||||
NetWork().sendMsg(ComId.TranslateOrder, 1, seq); | |||||
} | } | ||||
//发布翻译管家帮助订单回应 | //发布翻译管家帮助订单回应 | ||||
static handlerCreateTranslateOrder(List<int> msgContent) { | static handlerCreateTranslateOrder(List<int> msgContent) { | ||||
debugPrint('发布翻译管家帮助订单回应'); | debugPrint('发布翻译管家帮助订单回应'); | ||||
// var res = IssueInterpreterOrderRes.fromBuffer(msgContent); | |||||
// if (res.errorCode == 0) { | |||||
// | |||||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||||
// debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}'); | |||||
// } else { | |||||
// debugPrint('发布翻译管家帮助订单回应${res.errorCode}'); | |||||
// } | |||||
// LoadingManage().closeLoading(); | |||||
var res = IssueTransHKOrderRes.fromBuffer(msgContent); | |||||
if (res.errorCode == 0) { | |||||
TranslateHKMgr().orderId = res.orderId; | |||||
TranslateHKMgr().waitNum = res.waitNum; | |||||
TranslateHKMgr().orderStatus=TranslateHKMgr.ORDER_STATUS_WAITING; | |||||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER); | |||||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||||
debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}'); | |||||
} else { | |||||
debugPrint('发布翻译管家帮助订单回应${res.errorCode}'); | |||||
} | |||||
} | } | ||||
//撤销订单消息 | //撤销订单消息 | ||||
static sendCancelTranslateOrder( String orderId) { | |||||
// debugPrint('取消订单 fromLanguage:$orderId' ); | |||||
// var seq = CancellationInterpreterOrderReq.create(); | |||||
// seq.orderId = orderId; | |||||
// | |||||
// NetWork().sendMsg(ComId.TranslateOrder, 5, seq); | |||||
static sendCancelTranslateOrder( ) { | |||||
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY; | |||||
String orderId= TranslateHKMgr().orderId; | |||||
debugPrint('取消订单 fromLanguage:$orderId' ); | |||||
var seq = CancellationTransHKOrderReq.create(); | |||||
seq.orderId = orderId; | |||||
NetWork().sendMsg(ComId.TranslateOrder, 5, seq); | |||||
} | } | ||||
//撤销订单消息回应 | //撤销订单消息回应 | ||||
static handlerCancelTranslateOrder(List<int> msgContent) { | static handlerCancelTranslateOrder(List<int> msgContent) { | ||||
debugPrint('撤销订单消息回应'); | debugPrint('撤销订单消息回应'); | ||||
// var res = CancellationInterpreterOrderRes.fromBuffer(msgContent); | |||||
// if (res.errorCode == 0) { | |||||
// | |||||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||||
// debugPrint('撤销订单消息回应成功: ${res.orderId}'); | |||||
// } else { | |||||
// debugPrint('撤销订单消息回应成功失败${res.errorCode}'); | |||||
// } | |||||
var res = CancellationTransHKOrderRes.fromBuffer(msgContent); | |||||
if (res.errorCode == 0) { | |||||
debugPrint('撤销订单消息回应成功: ${res.orderId}'); | |||||
} else { | |||||
debugPrint('撤销订单消息回应成功失败${res.errorCode}'); | |||||
} | |||||
} | } | ||||
//派送订单推送 | //派送订单推送 | ||||
static handlerDeliveryInterpreterOrderPush(List<int> msgContent) { | static handlerDeliveryInterpreterOrderPush(List<int> msgContent) { | ||||
// debugPrint('撤销订单消息回应'); | |||||
// var res = DeliveryInterpreterOrderPush.fromBuffer(msgContent); | |||||
// print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); | |||||
debugPrint('派送订单推送'); | |||||
var res = DeliveryTransHKOrderPush.fromBuffer(msgContent); | |||||
print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); | |||||
TranslateOrder order = new TranslateOrder(); | |||||
order.orderId=res.orderId; | |||||
order.desc=res.desc; | |||||
order.createTime=res.createTime.toInt(); | |||||
order.tLanguage=res.tLanguage.toInt(); | |||||
order.scenes=res.scenes.toInt(); | |||||
TranslateHKMgr().order = order; | |||||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, res); | |||||
} | } | ||||
//接收订单请求 | //接收订单请求 | ||||
static sendReceiveOrder( String orderId) { | |||||
static sendReceiveOrder( ) { | |||||
TranslateOrder order = TranslateHKMgr().order; | |||||
debugPrint('接收订单消息请求 orderId:${order.orderId}' ); | |||||
var seq = ReceivingTransHKOrderReq.create(); | |||||
seq.orderId = order.orderId; | |||||
// debugPrint('接收订单消息请求 orderId:$orderId' ); | |||||
// var seq = ReceivingInterpreterOrderReq.create(); | |||||
// seq.orderId = orderId; | |||||
// | |||||
// NetWork().sendMsg(ComId.TranslateOrder,3, seq); | |||||
NetWork().sendMsg(ComId.TranslateOrder,3, seq); | |||||
} | } | ||||
//接收订单消息回应 | //接收订单消息回应 | ||||
static handlerReceiveOrder(List<int> msgContent) { | static handlerReceiveOrder(List<int> msgContent) { | ||||
debugPrint('接收订单消息回应'); | debugPrint('接收订单消息回应'); | ||||
// var res = ReceivingInterpreterOrderRes.fromBuffer(msgContent); | |||||
// if (res.errorCode == 0) { | |||||
// | |||||
//// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||||
// debugPrint('接收订单消息回应成功: '); | |||||
// } else { | |||||
// debugPrint('接收订单消息回应失败${res.errorCode}'); | |||||
// } | |||||
} | |||||
var res = ReceivingTransHKOrderRes.fromBuffer(msgContent); | |||||
if (res.errorCode == 0) { | |||||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||||
debugPrint('接收订单消息回应成功: '); | |||||
} else { | |||||
debugPrint('接收订单消息回应失败${res.errorCode}'); | |||||
} | |||||
} | |||||
///翻译官价聊天开始推送 | |||||
static handlerTranslateStart(List<int> msgContent) { | |||||
debugPrint('翻译官价聊天开始推送'); | |||||
// var res = TransHKChatStartPush.fromBuffer(msgContent); | |||||
} | |||||
//消息免打扰请求结果 | //消息免打扰请求结果 | ||||
static handlerGroupIsShowMenberNiceName(List<int> msgContent) { | static handlerGroupIsShowMenberNiceName(List<int> msgContent) { | ||||
@@ -1428,14 +1486,15 @@ class MsgHandler { | |||||
NetWork().sendMsg(ComId.Chat, 100, seq); | NetWork().sendMsg(ComId.Chat, 100, seq); | ||||
} | } | ||||
static swtichTranslateState(TranslateState transState) { | |||||
print('请求切换人工翻译状态'); | |||||
var seq = RequestSetHTranslReq.create(); | |||||
seq.sessionId = curActiveSession; | |||||
seq.hTransl = transState; | |||||
NetWork().sendMsg(ComId.Chat, 7, seq); | |||||
} | |||||
///服务端已作废 | |||||
// static swtichTranslateState(TranslateState transState) { | |||||
// print('请求切换人工翻译状态'); | |||||
// var seq = RequestSetHTranslReq.create(); | |||||
// seq.sessionId = curActiveSession; | |||||
// seq.hTransl = transState; | |||||
// | |||||
// NetWork().sendMsg(ComId.Chat, 7, seq); | |||||
// } | |||||
static void receiveTranslateState(msg) { | static void receiveTranslateState(msg) { | ||||
var res = PushHTranslState.fromBuffer(msg); | var res = PushHTranslState.fromBuffer(msg); | ||||
@@ -1,7 +1,7 @@ | |||||
name: chat | name: chat | ||||
description: A new Flutter project. | description: A new Flutter project. | ||||
#修改版本号后get-clean | #修改版本号后get-clean | ||||
version: 1.0.9+13 | |||||
version: 1.0.9+14 | |||||
environment: | environment: | ||||
sdk: ">=2.1.0 <3.0.0" | sdk: ">=2.1.0 <3.0.0" | ||||