@@ -277,7 +277,7 @@ | |||
"program": "Chương trình", | |||
"select_program": "Vui lòng chọn quốc tịch", | |||
"healthy_exercise": "TDTT", | |||
"night_party": "Tiệc đêm", | |||
"night_party": "Tiệc tùng", | |||
"gourmet_party": "Tham ăn", | |||
"watch_movie": "Xem phim", | |||
"play_games": "Chơi game", | |||
@@ -464,7 +464,7 @@ | |||
"signed_up": "/s1 đã đăng ký tham gia chương trình của bạn", | |||
"favorite_user": "Người dùng bạn yêu thích /s1 đã đăng một tin hẹn hò, nhấp vào đây để xem", | |||
"favorite_user2": "Người dùng bạn yêu thích /s1 đã cập nhật hoạt động mới nhất, nhấp vào đây để xem", | |||
"wallet_reminder": "Hãy chú ý ví của bạn", | |||
"wallet_reminder": "Thông báo số dư ví", | |||
"paid_you": "/s1 đã thanh toán (/s2H coin) để xem ảnh phong bì của bạn", | |||
"paid_you2": "/s1 đã thanh toăn (/s2H coin) để xem album của bạn", | |||
"paid_you3": "/s1 đã trả tiền để mở khóa tất cả thông tin của bạn", | |||
@@ -754,7 +754,7 @@ | |||
"payment_successful": "Thanh toán thành công", | |||
"set_amount": "Cài đặt sô tiền rút", | |||
"enter_amount": "Vui lòng nhập số lượng xu H", | |||
"can_withdraw": "Có thể rút tiền", | |||
"can_withdraw": "Có thể rút", | |||
"language_set": "Cài đặt ngôn ngữ", | |||
"user_agreement": "Thỏa thuận người dùng", | |||
"renewal_fee": "Tiếp tục trả phí", | |||
@@ -1062,8 +1062,8 @@ | |||
"added_friends_tips": "Bạn cần gửi đơn xin xác thực và chờ đối phương thông qua", | |||
"group_chat_name": "Tên nhóm trò chuyện", | |||
"my_group_nickname_tips": "Tại đây bạn có thể đặt biệt hiệu của mình trong nhóm này, và biệt danh này chỉ được hiển thị trong nhóm này", | |||
"man_gold": "Động thái nam thần", | |||
"woman_gold": "Động thái nữ thần", | |||
"man_gold": "Hoạt động của Crush", | |||
"woman_gold": "Hoạt động của Crush", | |||
"choose_group_owner": "Chọn nhóm chủ mới", | |||
"group_announcement": "Thông báo nhóm", | |||
"chat_news": "Tin nhắn trò chuyện", | |||
@@ -1131,7 +1131,7 @@ | |||
"money_tips": "Bạn có thể mua H-coin bằng cách nạp tiền hoặc chuyển đổi, nhưng không thể rút tiền mặt.", | |||
"get_money_detail": "Thu nhập cụ thể", | |||
"hibok_money": "Thu nhập Hibok", | |||
"charge_h": "Chuyển đổi H-coin", | |||
"charge_h": "Đổi H-coin", | |||
"charge_tips": "Quy tắc rút tiền", | |||
"splash_tips1": "Định vị đa dạng", | |||
"splash_tips2": "Robot dịch", | |||
@@ -4,7 +4,6 @@ import 'package:chat/data/translate_hk_data_mgr.dart'; | |||
import 'package:chat/home/audio_chat_view.dart'; | |||
import 'package:chat/utils/screen.dart'; | |||
import 'package:chat/utils/upload_util.dart'; | |||
import 'package:chat/utils/white_opacity_anim.dart'; | |||
import 'package:fixnum/fixnum.dart'; | |||
import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'package:chat/chat/translate_state.dart'; | |||
@@ -41,7 +40,8 @@ import 'package:flutter/services.dart'; | |||
import 'package:oktoast/oktoast.dart'; | |||
import 'package:permission_handler/permission_handler.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; | |||
import 'package:scroll_to_index/scroll_to_index.dart'; | |||
//import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; | |||
import '../r.dart'; | |||
import 'ChatPageItem.dart'; | |||
import 'input_bar.dart'; | |||
@@ -66,11 +66,6 @@ class ChatPage extends StatefulWidget { | |||
} | |||
class _ChatPageState extends State<ChatPage> { | |||
final ItemScrollController itemScrollController = ItemScrollController(); | |||
final ItemPositionsListener itemPositionListener = | |||
ItemPositionsListener.create(); | |||
//ScrollController _scrollCtrl = ScrollController(); | |||
MessageMgr msgMgr = MessageMgr(); | |||
UserInfo friendInfo; | |||
@@ -90,6 +85,8 @@ class _ChatPageState extends State<ChatPage> { | |||
int jumpTime; | |||
AutoScrollController controller; | |||
bool hasChatPermission=false; | |||
@override | |||
@@ -110,13 +107,13 @@ class _ChatPageState extends State<ChatPage> { | |||
super.dispose(); | |||
} | |||
jumpToMsg(time) { | |||
//var screenItemNums = itemPositionListener.itemPositions.value.length; | |||
jumpToMsg(time) async { | |||
hideKeyBoard(); | |||
int jumIndex = 0; | |||
jumpTime = time; | |||
for (int i = 0; i < msgList.length; i++) { | |||
if (time == msgList[i].time) { | |||
jumIndex = i - 1; // - screenItemNums + 2; | |||
jumIndex = i; | |||
break; | |||
} | |||
} | |||
@@ -126,10 +123,10 @@ class _ChatPageState extends State<ChatPage> { | |||
if (jumIndex > msgList.length - 1) { | |||
jumIndex = msgList.length - 1; | |||
} | |||
setState(() { | |||
itemScrollController.scrollTo( | |||
index: jumIndex, duration: new Duration(microseconds: 1)); | |||
}); | |||
await controller.scrollToIndex(jumIndex, | |||
preferPosition: AutoScrollPosition.begin); | |||
controller.highlight(jumIndex, | |||
highlightDuration: new Duration(milliseconds: 100)); | |||
} | |||
@override | |||
@@ -139,6 +136,10 @@ class _ChatPageState extends State<ChatPage> { | |||
getDefaultSetting(); | |||
getUserInfo(); | |||
controller = AutoScrollController( | |||
viewportBoundaryGetter: () => | |||
Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom), | |||
axis: Axis.vertical); | |||
isTranslateButler = widget.isTranslateButler; | |||
///todo 这里再判断是否还在服务时间 | |||
@@ -295,7 +296,7 @@ class _ChatPageState extends State<ChatPage> { | |||
print('接收到的:${widget.enterContent}'); | |||
_sendFile(File(widget.enterContent)); | |||
} else if (widget.enterType == 2) { | |||
} else if (widget.enterType == 2 || widget.enterType == 3) { | |||
//转发消息 | |||
MsgModel originMsg = widget.enterContent; | |||
@@ -545,9 +546,7 @@ class _ChatPageState extends State<ChatPage> { | |||
break; | |||
case 2: | |||
setState(() { | |||
print('连麦关闭GGGGGGGG'); | |||
isActive = false; | |||
isShowZoomButton=false; | |||
}); | |||
break; | |||
} | |||
@@ -728,21 +727,17 @@ class _ChatPageState extends State<ChatPage> { | |||
)) | |||
: NotificationListener( | |||
child: Scrollbar( | |||
child: ScrollablePositionedList.builder( | |||
child: ListView.builder( | |||
controller: controller, | |||
physics: new ClampingScrollPhysics(), | |||
itemCount: msgList.length, | |||
itemBuilder: _buildItem, | |||
itemScrollController: itemScrollController, | |||
itemPositionsListener: itemPositionListener, | |||
//padding: EdgeInsets.all(8.0), | |||
padding: EdgeInsets.symmetric(vertical: 8), | |||
reverse: true, | |||
hitCallback: hideKeyBoard, | |||
shrinkWrap: true, | |||
)), | |||
onNotification: (notification) { | |||
if (notification is ScrollNotification) { | |||
// var offset = notification.metrics.pixels; | |||
// print('滚动事件 offset $offset'); | |||
} | |||
if (notification is ScrollNotification) {} | |||
return true; | |||
}, | |||
), | |||
@@ -757,8 +752,10 @@ class _ChatPageState extends State<ChatPage> { | |||
_keyboardIndexProvider.changeReadOnlyKey(true); | |||
} | |||
sendMsg(MsgModel msg) { | |||
sendMsg(MsgModel msg) async { | |||
// if(widget.isTranslateButler){ ///翻译管家聊天通道 | |||
// msg.channelType = ChatChannelType.TransHK.value; | |||
// } | |||
print('对方是否拉黑你 ${friendInfo.isBlackened}'); | |||
if (BlacklistMgr.isBlack(friendInfo.userId)) { | |||
@@ -775,7 +772,8 @@ class _ChatPageState extends State<ChatPage> { | |||
MsgHandler.sendChatMsg(msg); | |||
if (mounted) { | |||
setState(() {}); | |||
itemScrollController.jumpTo(index: 0); | |||
await controller.scrollToIndex(0, | |||
preferPosition: AutoScrollPosition.begin); | |||
} | |||
} | |||
@@ -811,6 +809,14 @@ class _ChatPageState extends State<ChatPage> { | |||
SqlUtil().deleteSigleRecordWith(msg.sessionId, msg.time); | |||
} | |||
Widget _wrapScrollTag({int index, Widget child}) => AutoScrollTag( | |||
key: ValueKey(index), | |||
controller: controller, | |||
index: index, | |||
child: child, | |||
highlightColor: Colors.white.withOpacity(1), | |||
); | |||
Widget _buildItem(BuildContext context, int index) { | |||
var lastMsgTime; | |||
if (index < msgList.length - 1) { | |||
@@ -818,26 +824,13 @@ class _ChatPageState extends State<ChatPage> { | |||
} | |||
MsgModel msg = msgList[index]; | |||
if (msg.time == jumpTime) { | |||
return WhiteOpacityAnim( | |||
key: Key(msg.time.toString()), | |||
return _wrapScrollTag( | |||
index: index, | |||
child: ChatPageItem( | |||
key: Key(msg.time.toString()), | |||
msg: msg, | |||
hideKeyboard: readOnly, | |||
friendInfo: friendInfo, | |||
lastMsgTime: lastMsgTime), | |||
animFinishCallback: () { | |||
jumpTime = null; | |||
}, | |||
); | |||
} else { | |||
return ChatPageItem( | |||
key: Key(msg.time.toString()), | |||
msg: msg, | |||
hideKeyboard: readOnly, | |||
friendInfo: friendInfo, | |||
lastMsgTime: lastMsgTime); | |||
} | |||
lastMsgTime: lastMsgTime)); | |||
} | |||
} |
@@ -190,7 +190,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
return Container( | |||
width: Screen.width, | |||
margin: const EdgeInsets.symmetric(vertical: 18.0,horizontal: 8), | |||
margin: const EdgeInsets.symmetric(vertical: 10.0,horizontal: 8), | |||
child: Column( | |||
children: <Widget>[ | |||
showTime == null | |||
@@ -794,6 +794,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
child: item, | |||
actions: actions, | |||
onTap: () async { | |||
MessageMgr().emit('Keyboard Hide'); | |||
if (isUrl) { | |||
if (await canLaunch(textList[curTextType])) { | |||
launch(textList[curTextType]); | |||
@@ -189,7 +189,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
return Container( | |||
width: Screen.width, | |||
color: Colors.white.withOpacity(0), | |||
margin: const EdgeInsets.symmetric(vertical: 10.0), | |||
margin: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 8), | |||
child: Column( | |||
children: <Widget>[ | |||
showTime == null | |||
@@ -712,6 +712,7 @@ class _GroupChatPageItemState extends State<GroupChatPageItem> | |||
child: item, | |||
actions: actions, | |||
onTap: () async { | |||
MessageMgr().emit('Keyboard Hide'); | |||
if (isUrl) { | |||
if (await canLaunch(textList[curTextType])) { | |||
launch(textList[curTextType]); | |||
@@ -30,7 +30,7 @@ import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:oktoast/oktoast.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; | |||
import 'package:scroll_to_index/scroll_to_index.dart'; | |||
import '../r.dart'; | |||
import 'input_bar.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
@@ -48,9 +48,7 @@ class GroupChatPage extends StatefulWidget { | |||
} | |||
class _GroupChatPageState extends State<GroupChatPage> { | |||
final ItemScrollController itemScrollController = ItemScrollController(); | |||
final ItemPositionsListener itemPositionListener = | |||
ItemPositionsListener.create(); | |||
AutoScrollController controller; | |||
MessageMgr msgMgr = MessageMgr(); | |||
@@ -101,6 +99,11 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
getDefaultSetting(); | |||
controller = AutoScrollController( | |||
viewportBoundaryGetter: () => | |||
Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom), | |||
axis: Axis.vertical); | |||
startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; | |||
unreadNums = ChatDataMgr() | |||
@@ -162,13 +165,13 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
}); | |||
} | |||
jumpToMsg(time) { | |||
//var screenItemNums = itemPositionListener.itemPositions.value.length; | |||
jumpTime = time; | |||
jumpToMsg(time) async { | |||
hideKeyBoard(); | |||
int jumIndex = 0; | |||
jumpTime = time; | |||
for (int i = 0; i < msgList.length; i++) { | |||
if (time == msgList[i].time) { | |||
jumIndex = i - 1; // - screenItemNums + 2; | |||
jumIndex = i; | |||
break; | |||
} | |||
} | |||
@@ -178,8 +181,10 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
if (jumIndex > msgList.length - 1) { | |||
jumIndex = msgList.length - 1; | |||
} | |||
itemScrollController.scrollTo( | |||
index: jumIndex, duration: new Duration(microseconds: 1)); | |||
await controller.scrollToIndex(jumIndex, | |||
preferPosition: AutoScrollPosition.begin); | |||
controller.highlight(jumIndex, | |||
highlightDuration: new Duration(milliseconds: 500)); | |||
} | |||
void _sendFile(File file) async { | |||
@@ -490,19 +495,26 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
style: TextStyle(color: Colors.grey), | |||
)) | |||
: Scrollbar( | |||
child: ScrollablePositionedList.builder( | |||
child: ListView.builder( | |||
controller: controller, | |||
physics: new ClampingScrollPhysics(), | |||
itemCount: msgList.length, | |||
itemBuilder: _buildItem, | |||
itemScrollController: itemScrollController, | |||
itemPositionsListener: itemPositionListener, | |||
padding: EdgeInsets.all(8.0), | |||
padding: EdgeInsets.symmetric(vertical: 8), | |||
reverse: true, | |||
hitCallback: hideKeyBoard, | |||
shrinkWrap: true, | |||
)), | |||
); | |||
} | |||
Widget _wrapScrollTag({int index, Widget child}) => AutoScrollTag( | |||
key: ValueKey(index), | |||
controller: controller, | |||
index: index, | |||
child: child, | |||
highlightColor: Colors.white.withOpacity(1), | |||
); | |||
hideKeyBoard() { | |||
_keyboardIndexProvider.changeSelectIndex(-1); | |||
} | |||
@@ -511,7 +523,7 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
_keyboardIndexProvider.changeReadOnlyKey(true); | |||
} | |||
sendMsg(MsgModel msg) { | |||
sendMsg(MsgModel msg) async { | |||
if (!widget.groupInfoModel.isInGroup) { | |||
//如果不在该群 | |||
showToast(I18n.of(context).not_in_group); | |||
@@ -521,9 +533,9 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
MsgHandler.insertMsgToDB(msg); | |||
MsgHandler.sendChatMsg(msg); | |||
if (mounted) { | |||
setState(() { | |||
itemScrollController.jumpTo(index: 0); | |||
}); | |||
setState(() {}); | |||
await controller.scrollToIndex(0, | |||
preferPosition: AutoScrollPosition.begin); | |||
} | |||
} | |||
@@ -583,16 +595,7 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
hideKeyboard: readOnly, | |||
lastMsgTime: lastMsgTime); | |||
} | |||
if (msg.time == jumpTime) { | |||
result = WhiteOpacityAnim( | |||
key: Key(msg.time.toString()), | |||
child: result, | |||
animFinishCallback: () { | |||
jumpTime = null; | |||
}, | |||
); | |||
} | |||
return result; | |||
return _wrapScrollTag(index: index, child: result); | |||
} | |||
quiteGroup() { | |||
@@ -865,7 +865,7 @@ class InputBarState extends State<InputBar> | |||
refMsg: refMsg, | |||
refShortTxt: _getRefShortText(), | |||
altUsers: alterUsers, | |||
channelType: channelType); | |||
channelType: channelType); | |||
widget.sendMsg(msg); | |||
@@ -3361,9 +3361,9 @@ class _I18n_vi_VN extends I18n { | |||
/// "TDTT" | |||
@override | |||
String get healthy_exercise => "TDTT"; | |||
/// "Tiệc đêm" | |||
/// "Tiệc tùng" | |||
@override | |||
String get night_party => "Tiệc đêm"; | |||
String get night_party => "Tiệc tùng"; | |||
/// "Tham ăn" | |||
@override | |||
String get gourmet_party => "Tham ăn"; | |||
@@ -3922,9 +3922,9 @@ class _I18n_vi_VN extends I18n { | |||
/// "Người dùng bạn yêu thích /s1 đã cập nhật hoạt động mới nhất, nhấp vào đây để xem" | |||
@override | |||
String get favorite_user2 => "Người dùng bạn yêu thích /s1 đã cập nhật hoạt động mới nhất, nhấp vào đây để xem"; | |||
/// "Hãy chú ý ví của bạn" | |||
/// "Thông báo số dư ví" | |||
@override | |||
String get wallet_reminder => "Hãy chú ý ví của bạn"; | |||
String get wallet_reminder => "Thông báo số dư ví"; | |||
/// "/s1 đã thanh toán (/s2H coin) để xem ảnh phong bì của bạn" | |||
@override | |||
String get paid_you => "/s1 đã thanh toán (/s2H coin) để xem ảnh phong bì của bạn"; | |||
@@ -4792,9 +4792,9 @@ class _I18n_vi_VN extends I18n { | |||
/// "Vui lòng nhập số lượng xu H" | |||
@override | |||
String get enter_amount => "Vui lòng nhập số lượng xu H"; | |||
/// "Có thể rút tiền" | |||
/// "Có thể rút" | |||
@override | |||
String get can_withdraw => "Có thể rút tiền"; | |||
String get can_withdraw => "Có thể rút"; | |||
/// "Cài đặt ngôn ngữ" | |||
@override | |||
String get language_set => "Cài đặt ngôn ngữ"; | |||
@@ -5716,12 +5716,12 @@ class _I18n_vi_VN extends I18n { | |||
/// "Tại đây bạn có thể đặt biệt hiệu của mình trong nhóm này, và biệt danh này chỉ được hiển thị trong nhóm này" | |||
@override | |||
String get my_group_nickname_tips => "Tại đây bạn có thể đặt biệt hiệu của mình trong nhóm này, và biệt danh này chỉ được hiển thị trong nhóm này"; | |||
/// "Động thái nam thần" | |||
/// "Hoạt động của Crush" | |||
@override | |||
String get man_gold => "Động thái nam thần"; | |||
/// "Động thái nữ thần" | |||
String get man_gold => "Hoạt động của Crush"; | |||
/// "Hoạt động của Crush" | |||
@override | |||
String get woman_gold => "Động thái nữ thần"; | |||
String get woman_gold => "Hoạt động của Crush"; | |||
/// "Chọn nhóm chủ mới" | |||
@override | |||
String get choose_group_owner => "Chọn nhóm chủ mới"; | |||
@@ -5923,9 +5923,9 @@ class _I18n_vi_VN extends I18n { | |||
/// "Thu nhập Hibok" | |||
@override | |||
String get hibok_money => "Thu nhập Hibok"; | |||
/// "Chuyển đổi H-coin" | |||
/// "Đổi H-coin" | |||
@override | |||
String get charge_h => "Chuyển đổi H-coin"; | |||
String get charge_h => "Đổi H-coin"; | |||
/// "Quy tắc rút tiền" | |||
@override | |||
String get charge_tips => "Quy tắc rút tiền"; | |||
@@ -3,9 +3,11 @@ import 'dart:io'; | |||
import 'package:chat/home/fans_page.dart'; | |||
import 'package:chat/home/goddess_hot.dart'; | |||
import 'package:chat/home/rich_title.dart'; | |||
import 'package:chat/models/ChatMsg.dart'; | |||
import 'package:chat/models/money_change.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/models/voucher_change.dart'; | |||
import 'package:chat/proto/all.pbserver.dart'; | |||
import 'package:chat/utils/ChargeMoney.dart'; | |||
import 'package:chat/utils/app_navigator.dart'; | |||
import 'package:chat/utils/blacklist_mgr.dart'; | |||
@@ -429,7 +431,6 @@ class _ProfilePageState extends State<ProfilePage> | |||
// } | |||
// } | |||
List<Asset> resultList = List<Asset>(); | |||
resultList = await MultiImagePicker.pickImages( | |||
@@ -452,7 +453,9 @@ class _ProfilePageState extends State<ProfilePage> | |||
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)); | |||
File file = await FileCacheMgr().writeFile( | |||
'temp-photo-${DateTime.now().millisecondsSinceEpoch}-${photoEntity.name}', | |||
byteData.buffer.asInt8List(0)); | |||
fileList.add(file); | |||
} | |||
@@ -469,7 +472,7 @@ class _ProfilePageState extends State<ProfilePage> | |||
if (resData['data']['msg'] != '' && resData['data']['msg'] != null) { | |||
showToast(resData['data']['msg']); | |||
} | |||
if(resData['msg'].split('|').length !=fileList.length){ | |||
if (resData['msg'].split('|').length != fileList.length) { | |||
showToast(I18n.of(context).hava_error_photo); | |||
} | |||
MessageMgr().emit('refresh_photo'); | |||
@@ -1627,6 +1630,20 @@ class _ProfilePageState extends State<ProfilePage> | |||
MessageMgr().emit('do_friend_apply', | |||
{'userId': userInfo.userId, 'state': 1}); | |||
MessageMgr().emit('Add friend'); | |||
//同意好友后发送打招呼 | |||
MsgModel msgModel = MsgHandler.createSendMsg( | |||
ChatType.TextChatType, '现在我们可以开始聊天了。', | |||
friendId: userInfo.userId, | |||
refMsg: null, | |||
refShortTxt: null, | |||
altUsers: null, | |||
channelType: ChatChannelType.Session); | |||
int sessionId = UserData().getSessionId(userInfo.userId); | |||
MsgHandler.updateActiveSesstion(sessionId); | |||
AppNavigator.pushChatPage(context, userInfo.userId, | |||
enterType: 3, enterContent: msgModel); | |||
}); | |||
}, | |||
child: Container( | |||
@@ -1690,7 +1707,10 @@ class _ProfilePageState extends State<ProfilePage> | |||
? BoxDecoration(border: Border(bottom: Constants.GreyBorderSide)) | |||
: null, | |||
alignment: Alignment.center, | |||
padding: EdgeInsets.only(top: 17,bottom: 17,), | |||
padding: EdgeInsets.only( | |||
top: 17, | |||
bottom: 17, | |||
), | |||
margin: EdgeInsets.only(left: 20, bottom: 0, right: 10), | |||
child: Row( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
@@ -1711,7 +1731,6 @@ class _ProfilePageState extends State<ProfilePage> | |||
)); | |||
} | |||
testChatPermission(callback) { | |||
becomeVip() { | |||
Navigator.of(context).push( | |||
@@ -1762,7 +1781,9 @@ class _ProfilePageState extends State<ProfilePage> | |||
// } | |||
//自己是女性,且未认证,提示去认证(好友除外) | |||
if (!UserData().isMan() && !UserData().basicInfo.isAttestation && !FriendListMgr().isMyFriend(userInfo.userId)){ | |||
if (!UserData().isMan() && | |||
!UserData().basicInfo.isAttestation && | |||
!FriendListMgr().isMyFriend(userInfo.userId)) { | |||
CustomUI.buildNotTrue(context); | |||
return; | |||
} | |||
@@ -2353,12 +2374,12 @@ class _ProfilePageState extends State<ProfilePage> | |||
return AddFriendPage( | |||
userId: userInfo.userId, | |||
pageType: | |||
SendMessagePageType.Remark, | |||
SendMessagePageType.Remark, | |||
originalName: Provider.of< | |||
RefNameProvider>( | |||
context) | |||
RefNameProvider>( | |||
context) | |||
.getRefName(userInfo.userId, | |||
userInfo.nickName)); | |||
userInfo.nickName)); | |||
}, | |||
), | |||
); | |||
@@ -2422,8 +2443,6 @@ class _ProfilePageState extends State<ProfilePage> | |||
fontSize: 18, | |||
color: Constants | |||
.BlackTextColor)))), | |||
], | |||
), | |||
), | |||
@@ -1,6 +1,7 @@ | |||
import 'dart:async'; | |||
import 'package:chat/chat/ChatPage.dart'; | |||
import 'package:chat/data/UserData.dart'; | |||
import 'package:chat/data/chat_data_mgr.dart'; | |||
import 'package:chat/data/constants.dart'; | |||
import 'package:chat/data/translate_hk_data_mgr.dart'; | |||
import 'package:chat/generated/i18n.dart'; | |||
@@ -8,8 +9,10 @@ import 'package:chat/home/SystemEditPage.dart'; | |||
import 'package:chat/home/find_page.dart'; | |||
import 'package:chat/home/realtimehelper/real_time_helper_page.dart'; | |||
import 'package:chat/home/unread_dot_widget.dart'; | |||
import 'package:chat/models/ChatMsg.dart'; | |||
import 'package:chat/models/UserInfo.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/proto/all.pbserver.dart'; | |||
import 'package:chat/utils/CustomUI.dart'; | |||
import 'package:chat/utils/HttpUtil.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
@@ -127,11 +130,11 @@ class NavigationIconView { | |||
color: isCenter | |||
? Colors.white | |||
: Constants.BottomIconGreyColor)) | |||
// child: Icon(icon, | |||
// size: iconSize, | |||
// color: isCenter | |||
// ? Colors.white | |||
// : Constants.BottomIconGreyColor)) | |||
// child: Icon(icon, | |||
// size: iconSize, | |||
// color: isCenter | |||
// ? Colors.white | |||
// : Constants.BottomIconGreyColor)) | |||
], | |||
)); | |||
} | |||
@@ -151,7 +154,6 @@ class _HomeMainState extends State<HomeMain> { | |||
@override | |||
void initState() { | |||
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); | |||
super.initState(); | |||
LocalNotificationUtil.instance.initState(context); | |||
@@ -164,7 +166,8 @@ class _HomeMainState extends State<HomeMain> { | |||
MessageMgr().on('Show My Profile', showMyProfile); | |||
MessageMgr().on('test_Permission', msgTestPermission); | |||
MessageMgr().on(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | |||
MessageMgr().on(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr() | |||
.on(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr().on(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||
///初始化语音播放是外放还是听筒-默认外放 | |||
@@ -254,7 +257,8 @@ class _HomeMainState extends State<HomeMain> { | |||
MessageMgr().off('Show My Profile', showMyProfile); | |||
MessageMgr().off('test_Permission', msgTestPermission); | |||
MessageMgr().off(MessageMgr.RECEIVE_THIRD_SHARE, goShareInfo); | |||
MessageMgr().off(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr() | |||
.off(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, receiveTranslateOrder); | |||
MessageMgr().off(MessageMgr.TRANSLATE_HK_START_CHAT, startTranslateHKChat); | |||
LocalNotificationUtil.instance.dispose(); | |||
if (time != null) { | |||
@@ -316,7 +320,6 @@ class _HomeMainState extends State<HomeMain> { | |||
} | |||
msgTestPermission(data) async { | |||
PermissionStatus status = | |||
await LocationPermissions().checkPermissionStatus(); | |||
@@ -476,8 +479,6 @@ class _HomeMainState extends State<HomeMain> { | |||
// userId: UserData().basicInfo.userId, | |||
// ), | |||
// ]; | |||
} | |||
@override | |||
@@ -21,7 +21,7 @@ class UnreadCountProvider { | |||
} | |||
setAlterMe(int sessionId, int time) { | |||
isHaveAlterme[sessionId] = time; | |||
if (isHaveAlterme[sessionId] == null) isHaveAlterme[sessionId] = time; | |||
} | |||
clear() { | |||
@@ -243,7 +243,6 @@ class MsgHandler { | |||
seq.targetId = curActiveSession; | |||
if (curActiveSession == 10000) { | |||
seq.channelType = ChatChannelType.CSD; | |||
} else { | |||
seq.channelType = | |||
@@ -253,17 +252,17 @@ class MsgHandler { | |||
NetWork().sendMsg(ComId.Chat, 5, seq); | |||
} | |||
static int tempGroupId=0; | |||
static int tempGroupId = 0; | |||
static int mLastClickTime = 0; | |||
static int timeInterval = 2500; | |||
// static int receivedCount=0; | |||
static handlerReceiveMsg(PushChat chat) async { | |||
bool isGroup = false; | |||
bool isTranslateHK= false; | |||
bool isTranslateHK = false; | |||
if (chat.channelType == ChatChannelType.Group) { | |||
print('群聊消息'); | |||
isGroup = true; | |||
}else if (chat.channelType == ChatChannelType.TransHK) { | |||
} else if (chat.channelType == ChatChannelType.TransHK) { | |||
print('聊天管家消息'); | |||
isTranslateHK = true; | |||
} | |||
@@ -411,8 +410,7 @@ class MsgHandler { | |||
chat.contentBuff, chat.sendTime.toInt(), chat.targetId, | |||
channelType: ChatChannelType.Group.value); | |||
} | |||
} | |||
else if(isTranslateHK){ | |||
} else if (isTranslateHK) { | |||
var myId = UserData().basicInfo.userId; | |||
TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff); | |||
BaseUserInfo friendId ; | |||
@@ -452,8 +450,8 @@ class MsgHandler { | |||
print('chat.contentBuff cccc'); | |||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_END_CHAT, friendId.id); | |||
} | |||
}else{//私聊通知消息 | |||
} else { | |||
//私聊通知消息 | |||
if (chat.cType == ChatType.RedWalletChatType) { | |||
//系统红包通知消息 | |||
RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff); | |||
@@ -478,11 +476,8 @@ class MsgHandler { | |||
print('未知私聊通知消息'); | |||
} | |||
} | |||
} else { //聊天消息 | |||
} else { | |||
//聊天消息 | |||
int sessionId = chat.targetId; | |||
print('sessionId $sessionId'); | |||
@@ -494,12 +489,12 @@ class MsgHandler { | |||
if (groupInfo != null) { | |||
showGroup = groupInfo.messageFree == 0; | |||
} | |||
if (showGroup ) { | |||
if (showGroup) { | |||
int nowTime = DateTime.now().millisecondsSinceEpoch; | |||
if (nowTime - mLastClickTime < timeInterval && tempGroupId==sessionId) { //2秒内同一群不重复弹出 | |||
if (nowTime - mLastClickTime < timeInterval && | |||
tempGroupId == sessionId) { | |||
//2秒内同一群不重复弹出 | |||
return; | |||
} | |||
@@ -526,8 +521,6 @@ class MsgHandler { | |||
// print('当前收到消息条数$receivedCount $content'); | |||
// } | |||
if (chat.hasTencentTranslate()) { | |||
msgModel.translateContent = chat.tencentTranslate; | |||
} | |||
@@ -562,7 +555,9 @@ class MsgHandler { | |||
for (var i = 0; i < msgModel.altUsers.length; i++) { | |||
if (msgModel.altUsers[i] == myId && curActiveSession != sessionId) { | |||
print('有人@了你'); | |||
ChatDataMgr().groupUnreadProvider.setAlterMe(sessionId,msgModel.time); | |||
ChatDataMgr() | |||
.groupUnreadProvider | |||
.setAlterMe(sessionId, msgModel.time); | |||
//to do | |||
} | |||
} | |||
@@ -587,7 +582,8 @@ class MsgHandler { | |||
print('消息为空,无法保存'); | |||
return; | |||
} | |||
print('收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); | |||
print( | |||
'收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}'); | |||
ChatDataMgr().saveMsg(msgModel); | |||
if (msgModel.msgType == ChatType.ShortVoiceChatType.value) { | |||
//如果是语音消息,自动下载 | |||
@@ -606,11 +602,10 @@ class MsgHandler { | |||
} | |||
} | |||
if (msgModel.sessionId == 10000 ) { | |||
print('收到反馈小助手消息'); | |||
} | |||
if (msgModel.sessionId == 10000) { | |||
print('收到反馈小助手消息'); | |||
} | |||
if (msgModel.sessionId == curActiveSession) { | |||
MessageMgr().emit('New Chat Message', msgModel.sessionId); | |||
} | |||
} | |||
@@ -643,7 +638,6 @@ class MsgHandler { | |||
switch (notice.changeType) { | |||
case GroupChangeType.AddMember: | |||
if (optId.id == myId) { | |||
var otherNames = ''; | |||
for (var i = 0; i < optedIds.length; i++) { | |||
@@ -967,21 +961,19 @@ class MsgHandler { | |||
handlerAgreeMember(content); | |||
} else if (msgId == 228) { | |||
handlerUpdateMemberMsgFree(content); | |||
}else if (msgId == 230) { | |||
} else if (msgId == 230) { | |||
handlerGroupIsShowMenberNiceName(content); | |||
} | |||
break; | |||
case ComId.TranslateOrder: | |||
if(msgId==2){ | |||
if (msgId == 2) { | |||
handlerCreateTranslateOrder(content); | |||
}else if(msgId ==4){ | |||
} else if (msgId == 4) { | |||
handlerReceiveOrder(content); | |||
}else if(msgId ==6){ | |||
} else if (msgId == 6) { | |||
handlerCancelTranslateOrder(content); | |||
}else if(msgId==20){ | |||
} else if (msgId == 20) { | |||
handlerDeliveryInterpreterOrderPush(content); | |||
}else if(msgId==21){ | |||
handlerCancellationTransHKOrderPush(content); | |||
@@ -1267,27 +1259,24 @@ class MsgHandler { | |||
NetWork().sendMsg(ComId.Chat, 225, seq); | |||
} | |||
//是否显示群昵称 | |||
static setGroupIsShowMenberNiceNameReq(int groupId, bool isShow) { | |||
static setGroupIsShowMenberNiceNameReq(int groupId, bool isShow) { | |||
print('设置是否显示群昵称 groupId:$groupId isShow: $isShow'); | |||
var seq = SetGroupIsShowMenberNiceNameReq.create(); | |||
seq.groupId = groupId; | |||
seq.isShowMenberNiceName=isShow; | |||
seq.isShowMenberNiceName = isShow; | |||
NetWork().sendMsg(ComId.Chat, 229, seq); | |||
} | |||
//发布翻译管家帮助订单 | |||
static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) { | |||
TranslateHKMgr().isUser=true; | |||
debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' ); | |||
var seq = IssueTransHKOrderReq.create(); | |||
seq.tLanguage = fromLanguage|toLanguage; | |||
seq.scenes =scences; | |||
seq.tLanguage = fromLanguage | toLanguage; | |||
seq.scenes = scences; | |||
seq.desc = extraDesc; | |||
NetWork().sendMsg(ComId.TranslateOrder, 1, seq); | |||
} | |||
@@ -1300,7 +1289,7 @@ class MsgHandler { | |||
if (res.errorCode == 0) { | |||
TranslateHKMgr().orderId = res.orderId; | |||
TranslateHKMgr().waitNum = res.waitNum; | |||
TranslateHKMgr().orderStatus=TranslateHKMgr.ORDER_STATUS_WAITING; | |||
TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_WAITING; | |||
MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER); | |||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}'); | |||
@@ -1337,10 +1326,8 @@ class MsgHandler { | |||
//撤销订单消息 | |||
static sendCancelTranslateOrder( ) { | |||
debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}' ); | |||
static sendCancelTranslateOrder() { | |||
debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}'); | |||
var seq = CancellationTransHKOrderReq.create(); | |||
seq.orderId = TranslateHKMgr().orderId; | |||
@@ -1352,7 +1339,6 @@ class MsgHandler { | |||
debugPrint('撤销订单消息回应'); | |||
var res = CancellationTransHKOrderRes.fromBuffer(msgContent); | |||
if (res.errorCode == 0) { | |||
debugPrint('撤销订单消息回应成功: ${res.orderId}'); | |||
} else { | |||
debugPrint('撤销订单消息回应成功失败${res.errorCode}'); | |||
@@ -1363,7 +1349,8 @@ class MsgHandler { | |||
static handlerDeliveryInterpreterOrderPush(List<int> msgContent) { | |||
debugPrint('派送订单推送'); | |||
var res = DeliveryTransHKOrderPush.fromBuffer(msgContent); | |||
print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); | |||
print( | |||
'OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}'); | |||
TranslateOrder order = new TranslateOrder(); | |||
order.orderId=res.orderId; | |||
@@ -1392,13 +1379,13 @@ class MsgHandler { | |||
//接收订单请求 | |||
static sendReceiveOrder( ) { | |||
static sendReceiveOrder() { | |||
TranslateOrder order = TranslateHKMgr().order; | |||
debugPrint('接收订单消息请求 orderId:${order.orderId}' ); | |||
debugPrint('接收订单消息请求 orderId:${order.orderId}'); | |||
var seq = ReceivingTransHKOrderReq.create(); | |||
seq.orderId = order.orderId; | |||
NetWork().sendMsg(ComId.TranslateOrder,3, seq); | |||
NetWork().sendMsg(ComId.TranslateOrder, 3, seq); | |||
} | |||
//接收订单消息回应 | |||
@@ -1406,7 +1393,6 @@ class MsgHandler { | |||
debugPrint('接收订单消息回应'); | |||
var res = ReceivingTransHKOrderRes.fromBuffer(msgContent); | |||
if (res.errorCode == 0) { | |||
// GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree); | |||
debugPrint('接收订单消息回应成功: '); | |||
} else { | |||
@@ -1456,8 +1442,6 @@ class MsgHandler { | |||
} | |||
} | |||
//消息免打扰请求结果 | |||
static handlerUpdateMemberMsgFree(List<int> msgContent) { | |||
print('消息免打扰请求结果'); | |||
@@ -1470,8 +1454,6 @@ class MsgHandler { | |||
} | |||
} | |||
//群主批准其他人加入群结果 | |||
static handlerAgreeMember(List<int> msgContent) { | |||
print('群主批准其他人加入群结果'); | |||
@@ -1498,8 +1480,6 @@ class MsgHandler { | |||
NetWork().sendMsg(ComId.Chat, 227, seq); | |||
} | |||
//请求群列表求结果 | |||
static handlerGetGroupListRes(List<int> msgContent) async { | |||
var res = QueryUserRelationGroupRes.fromBuffer(msgContent); | |||
@@ -923,15 +923,13 @@ packages: | |||
url: "https://pub.flutter-io.cn" | |||
source: hosted | |||
version: "0.22.6" | |||
scrollable_positioned_list: | |||
scroll_to_index: | |||
dependency: "direct main" | |||
description: | |||
path: "." | |||
ref: HEAD | |||
resolved-ref: "6ac696b0550694de0eac3f4c30956e21a6dad748" | |||
url: "https://github.com/KerwinZheng/scrollable_positioned_list.git" | |||
source: git | |||
version: "0.1.2" | |||
name: scroll_to_index | |||
url: "https://pub.flutter-io.cn" | |||
source: hosted | |||
version: "1.0.6" | |||
share: | |||
dependency: "direct main" | |||
description: | |||
@@ -177,10 +177,10 @@ dependencies: | |||
share_extend: ^1.1.1 | |||
#多图片选择 | |||
multi_image_picker: ^4.6.4 | |||
scrollable_positioned_list: | |||
git: https://github.com/KerwinZheng/scrollable_positioned_list.git | |||
#设备信息 | |||
device_info: ^0.4.2+1 | |||
#跳转到指定索引 | |||
scroll_to_index: any | |||
dev_dependencies: | |||
flutter_test: | |||