Ver a proveniência

1. 优化添加某人好友成功后。双方都要获得消息推送

2.优化点击聊天内容收起输入框
3.修复bug:私聊界面回复他人输入框消失
4.部分越南语翻译替换
master
KerwinZheng há 5 anos
ascendente
cometimento
02cead903d
13 ficheiros alterados com 213 adições e 220 eliminações
  1. +6
    -6
      i18n/vi-VN.json
  2. +36
    -42
      lib/chat/ChatPage.dart
  3. +2
    -1
      lib/chat/ChatPageItem.dart
  4. +2
    -1
      lib/chat/group_chat_item.dart
  5. +32
    -29
      lib/chat/group_chat_view.dart
  6. +1
    -1
      lib/chat/input_bar.dart
  7. +18
    -18
      lib/generated/i18n.dart
  8. +31
    -12
      lib/home/ProfilePage.dart
  9. +16
    -14
      lib/home/homeMain.dart
  10. +1
    -1
      lib/models/unread_count_provider.dart
  11. +61
    -86
      lib/utils/msgHandler.dart
  12. +5
    -7
      pubspec.lock
  13. +2
    -2
      pubspec.yaml

+ 6
- 6
i18n/vi-VN.json Ver ficheiro

@@ -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",


+ 36
- 42
lib/chat/ChatPage.dart Ver ficheiro

@@ -3,7 +3,6 @@ import 'dart:io';
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';
@@ -38,7 +37,8 @@ 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 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
import '../r.dart';
import 'ChatPageItem.dart';
import 'input_bar.dart';
@@ -63,11 +63,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;
@@ -83,6 +78,8 @@ class _ChatPageState extends State<ChatPage> {
int jumpTime;
AutoScrollController controller;
@override
void dispose() {
var endTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
@@ -100,13 +97,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;
}
}
@@ -116,10 +113,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
@@ -129,6 +126,11 @@ class _ChatPageState extends State<ChatPage> {
getDefaultSetting();
getUserInfo();
controller = AutoScrollController(
viewportBoundaryGetter: () =>
Rect.fromLTRB(0, 0, 0, MediaQuery.of(context).padding.bottom),
axis: Axis.vertical);
startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
msgList = ChatDataMgr().getRecord();
@@ -239,7 +241,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;
@@ -629,21 +631,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;
},
),
@@ -658,7 +656,7 @@ class _ChatPageState extends State<ChatPage> {
_keyboardIndexProvider.changeReadOnlyKey(true);
}
sendMsg(MsgModel msg) {
sendMsg(MsgModel msg) async {
// if(widget.isTranslateButler){ ///翻译管家聊天通道
// msg.channelType = ChatChannelType.TransHK.value;
// }
@@ -678,7 +676,8 @@ class _ChatPageState extends State<ChatPage> {
MsgHandler.sendChatMsg(msg);
if (mounted) {
setState(() {});
itemScrollController.jumpTo(index: 0);
await controller.scrollToIndex(0,
preferPosition: AutoScrollPosition.begin);
}
}
@@ -714,6 +713,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) {
@@ -721,26 +728,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));
}
}

+ 2
- 1
lib/chat/ChatPageItem.dart Ver ficheiro

@@ -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
@@ -789,6 +789,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]);


+ 2
- 1
lib/chat/group_chat_item.dart Ver ficheiro

@@ -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]);


+ 32
- 29
lib/chat/group_chat_view.dart Ver ficheiro

@@ -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() {


+ 1
- 1
lib/chat/input_bar.dart Ver ficheiro

@@ -853,7 +853,7 @@ class InputBarState extends State<InputBar>
refMsg: refMsg,
refShortTxt: _getRefShortText(),
altUsers: alterUsers,
channelType: channelType);
channelType: channelType);
widget.sendMsg(msg);


+ 18
- 18
lib/generated/i18n.dart Ver ficheiro

@@ -3335,9 +3335,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";
@@ -3896,9 +3896,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";
@@ -4766,9 +4766,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ữ";
@@ -5690,12 +5690,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";
@@ -5897,9 +5897,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";
@@ -14795,9 +14795,9 @@ class _I18n_ko_KR extends I18n {
/// "그의 사교 아이디"
@override
String get his_account => "그의 사교 아이디";
/// "복"
/// "복"
@override
String get copy => "복";
String get copy => "복";
/// "내 사교 아이디를 보내기"
@override
String get send_account => "내 사교 아이디를 보내기";
@@ -15155,12 +15155,12 @@ class _I18n_ko_KR extends I18n {
/// "앱을 친구에게 공유하다"
@override
String get share_app => "앱을 친구에게 공유하다";
/// "질문이 있으니까 도움이 필요하다"
/// "질문&도움"
@override
String get need_help => "질문이 있으니까 도움이 필요하다";
/// "고객을 연락하다"
String get need_help => "질문&도움";
/// "고객센터"
@override
String get need_help2 => "고객을 연락하다";
String get need_help2 => "고객센터";
/// "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"
@override
String get need_help3 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!";


+ 31
- 12
lib/home/ProfilePage.dart Ver ficheiro

@@ -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)))),
],
),
),


+ 16
- 14
lib/home/homeMain.dart Ver ficheiro

@@ -1,14 +1,17 @@
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/generated/i18n.dart';
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';
@@ -126,11 +129,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))
],
));
}
@@ -150,7 +153,6 @@ class _HomeMainState extends State<HomeMain> {
@override
void initState() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
super.initState();
LocalNotificationUtil.instance.initState(context);
@@ -163,7 +165,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);
///初始化语音播放是外放还是听筒-默认外放
@@ -253,7 +256,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) {
@@ -275,14 +279,15 @@ class _HomeMainState extends State<HomeMain> {
}
receiveTranslateOrder(var data) async {
CustomUI.buildTranslationHelperOrderDialog(context,false,orderId: data.orderId,scenes: data.scenes,desc: data.desc);
CustomUI.buildTranslationHelperOrderDialog(context, false,
orderId: data.orderId, scenes: data.scenes, desc: data.desc);
}
startTranslateHKChat(var friendID){
startTranslateHKChat(var friendID) {
Navigator.of(context).push(
new MaterialPageRoute(
builder: (context) {
return ChatPage(
return ChatPage(
key: Key('Chat'),
friendId: friendID,
isTranslateButler: true,
@@ -292,7 +297,6 @@ class _HomeMainState extends State<HomeMain> {
);
}
msgTestPermission(data) async {
PermissionStatus status =
await LocationPermissions().checkPermissionStatus();
@@ -452,8 +456,6 @@ class _HomeMainState extends State<HomeMain> {
// userId: UserData().basicInfo.userId,
// ),
// ];
}
@override


+ 1
- 1
lib/models/unread_count_provider.dart Ver ficheiro

@@ -21,7 +21,7 @@ class UnreadCountProvider {
}
setAlterMe(int sessionId, int time) {
isHaveAlterme[sessionId] = time;
if (isHaveAlterme[sessionId] == null) isHaveAlterme[sessionId] = time;
}
clear() {


+ 61
- 86
lib/utils/msgHandler.dart Ver ficheiro

@@ -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,21 +410,20 @@ 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 ;
TransHKChatNotice notice =
TransHKChatNotice.fromBuffer(chat.contentBuff);
BaseUserInfo friendId;
if(notice.operateduId[0].id==myId){
friendId =notice.operateduId[1];
}else{
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} ');
print('friend id: ${friendId.id} ');
int sessionId = chat.targetId;
if (chat.cType == ChatType.GroupChatNoticeType) {
@@ -436,24 +434,20 @@ class MsgHandler {
}
///接到开始翻译管家消息-打开翻译管家页面
if(notice.noticeType==TransHKChatNoticeType.StartChat){
if(TranslateHKMgr().isUser){
if (notice.noticeType == TransHKChatNoticeType.StartChat) {
if (TranslateHKMgr().isUser) {
//TRANSLATE_HK_RECEIVE_ORDER 发送开始聊天弹窗
}else{
Future.delayed(Duration(seconds: 3),(){
} else {
Future.delayed(Duration(seconds: 3), () {
curActiveSession = sessionId;
print('curActiveSession:$curActiveSession');
MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id);
MessageMgr()
.emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id);
});
}
}
}else{//私聊通知消息
} else {
//私聊通知消息
if (chat.cType == ChatType.RedWalletChatType) {
//系统红包通知消息
RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff);
@@ -478,11 +472,8 @@ class MsgHandler {
print('未知私聊通知消息');
}
}
} else { //聊天消息
} else {
//聊天消息
int sessionId = chat.targetId;
print('sessionId $sessionId');
@@ -494,12 +485,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 +517,6 @@ class MsgHandler {
// print('当前收到消息条数$receivedCount $content');
// }
if (chat.hasTencentTranslate()) {
msgModel.translateContent = chat.tencentTranslate;
}
@@ -562,7 +551,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 +578,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 +598,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 +634,6 @@ class MsgHandler {
switch (notice.changeType) {
case GroupChangeType.AddMember:
if (optId.id == myId) {
var otherNames = '';
for (var i = 0; i < optedIds.length; i++) {
@@ -963,21 +953,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);
}
break;
@@ -1257,29 +1245,26 @@ 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) {
debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' );
static sendCreateTranslateOrder(
int fromLanguage, int toLanguage, int scences, String extraDesc) {
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;
TranslateHKMgr().isUser=true;
TranslateHKMgr().isUser = true;
NetWork().sendMsg(ComId.TranslateOrder, 1, seq);
}
@@ -1291,7 +1276,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}');
@@ -1301,10 +1286,8 @@ class MsgHandler {
}
//撤销订单消息
static sendCancelTranslateOrder( ) {
debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}' );
static sendCancelTranslateOrder() {
debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}');
var seq = CancellationTransHKOrderReq.create();
seq.orderId = TranslateHKMgr().orderId;
@@ -1316,7 +1299,6 @@ class MsgHandler {
debugPrint('撤销订单消息回应');
var res = CancellationTransHKOrderRes.fromBuffer(msgContent);
if (res.errorCode == 0) {
debugPrint('撤销订单消息回应成功: ${res.orderId}');
} else {
debugPrint('撤销订单消息回应成功失败${res.errorCode}');
@@ -1327,28 +1309,27 @@ 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;
order.desc=res.desc;
order.createTime=res.createTime.toInt();
order.tLanguage=res.tLanguage.toInt();
order.scenes=res.scenes.toInt();
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( ) {
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);
}
//接收订单消息回应
@@ -1356,13 +1337,13 @@ class MsgHandler {
debugPrint('接收订单消息回应');
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('翻译官价聊天开始推送');
@@ -1381,8 +1362,6 @@ class MsgHandler {
}
}
//消息免打扰请求结果
static handlerUpdateMemberMsgFree(List<int> msgContent) {
print('消息免打扰请求结果');
@@ -1395,8 +1374,6 @@ class MsgHandler {
}
}
//群主批准其他人加入群结果
static handlerAgreeMember(List<int> msgContent) {
print('群主批准其他人加入群结果');
@@ -1423,8 +1400,6 @@ class MsgHandler {
NetWork().sendMsg(ComId.Chat, 227, seq);
}
//请求群列表求结果
static handlerGetGroupListRes(List<int> msgContent) async {
var res = QueryUserRelationGroupRes.fromBuffer(msgContent);


+ 5
- 7
pubspec.lock Ver ficheiro

@@ -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:


+ 2
- 2
pubspec.yaml Ver ficheiro

@@ -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:


Carregando…
Cancelar
Guardar