From 02cead903dffc65ec5e1f1f52ba29e5fe782c7c9 Mon Sep 17 00:00:00 2001 From: KerwinZheng <772112648@qq.com> Date: Tue, 31 Mar 2020 20:35:47 +0800 Subject: [PATCH] =?UTF-8?q?1.=09=E4=BC=98=E5=8C=96=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9F=90=E4=BA=BA=E5=A5=BD=E5=8F=8B=E6=88=90=E5=8A=9F=E5=90=8E?= =?UTF-8?q?=E3=80=82=E5=8F=8C=E6=96=B9=E9=83=BD=E8=A6=81=E8=8E=B7=E5=BE=97?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=202.=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E8=81=8A=E5=A4=A9=E5=86=85=E5=AE=B9=E6=94=B6?= =?UTF-8?q?=E8=B5=B7=E8=BE=93=E5=85=A5=E6=A1=86=203.=E4=BF=AE=E5=A4=8Dbug?= =?UTF-8?q?=EF=BC=9A=E7=A7=81=E8=81=8A=E7=95=8C=E9=9D=A2=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E4=BB=96=E4=BA=BA=E8=BE=93=E5=85=A5=E6=A1=86=E6=B6=88=E5=A4=B1?= =?UTF-8?q?=204.=E9=83=A8=E5=88=86=E8=B6=8A=E5=8D=97=E8=AF=AD=E7=BF=BB?= =?UTF-8?q?=E8=AF=91=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/vi-VN.json | 12 +-- lib/chat/ChatPage.dart | 78 +++++++------- lib/chat/ChatPageItem.dart | 3 +- lib/chat/group_chat_item.dart | 3 +- lib/chat/group_chat_view.dart | 61 ++++++----- lib/chat/input_bar.dart | 2 +- lib/generated/i18n.dart | 36 +++---- lib/home/ProfilePage.dart | 43 +++++--- lib/home/homeMain.dart | 30 +++--- lib/models/unread_count_provider.dart | 2 +- lib/utils/msgHandler.dart | 147 +++++++++++--------------- pubspec.lock | 12 +-- pubspec.yaml | 4 +- 13 files changed, 213 insertions(+), 220 deletions(-) diff --git a/i18n/vi-VN.json b/i18n/vi-VN.json index 3937c86..15cf9bc 100644 --- a/i18n/vi-VN.json +++ b/i18n/vi-VN.json @@ -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", diff --git a/lib/chat/ChatPage.dart b/lib/chat/ChatPage.dart index e2df0cf..c0130e2 100644 --- a/lib/chat/ChatPage.dart +++ b/lib/chat/ChatPage.dart @@ -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 { - 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 { int jumpTime; + AutoScrollController controller; + @override void dispose() { var endTime = DateTime.now().millisecondsSinceEpoch ~/ 1000; @@ -100,13 +97,13 @@ class _ChatPageState extends State { 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 { 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 { 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 { 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 { )) : 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 { _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 { 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 { 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 { } 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)); } } diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart index 3d501a3..998edc7 100644 --- a/lib/chat/ChatPageItem.dart +++ b/lib/chat/ChatPageItem.dart @@ -190,7 +190,7 @@ class _ChatPageItemState extends State 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: [ showTime == null @@ -789,6 +789,7 @@ class _ChatPageItemState extends State child: item, actions: actions, onTap: () async { + MessageMgr().emit('Keyboard Hide'); if (isUrl) { if (await canLaunch(textList[curTextType])) { launch(textList[curTextType]); diff --git a/lib/chat/group_chat_item.dart b/lib/chat/group_chat_item.dart index 99252c0..451d994 100644 --- a/lib/chat/group_chat_item.dart +++ b/lib/chat/group_chat_item.dart @@ -189,7 +189,7 @@ class _GroupChatPageItemState extends State 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: [ showTime == null @@ -712,6 +712,7 @@ class _GroupChatPageItemState extends State child: item, actions: actions, onTap: () async { + MessageMgr().emit('Keyboard Hide'); if (isUrl) { if (await canLaunch(textList[curTextType])) { launch(textList[curTextType]); diff --git a/lib/chat/group_chat_view.dart b/lib/chat/group_chat_view.dart index 5cceb18..3193d5b 100644 --- a/lib/chat/group_chat_view.dart +++ b/lib/chat/group_chat_view.dart @@ -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 { - final ItemScrollController itemScrollController = ItemScrollController(); - final ItemPositionsListener itemPositionListener = - ItemPositionsListener.create(); + AutoScrollController controller; MessageMgr msgMgr = MessageMgr(); @@ -101,6 +99,11 @@ class _GroupChatPageState extends State { 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 { }); } - 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 { 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 { 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 { _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 { 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 { 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() { diff --git a/lib/chat/input_bar.dart b/lib/chat/input_bar.dart index 1c731be..dfa7926 100644 --- a/lib/chat/input_bar.dart +++ b/lib/chat/input_bar.dart @@ -853,7 +853,7 @@ class InputBarState extends State refMsg: refMsg, refShortTxt: _getRefShortText(), altUsers: alterUsers, - channelType: channelType); + channelType: channelType); widget.sendMsg(msg); diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 1f762a6..1f6d354 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -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 => "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!"; diff --git a/lib/home/ProfilePage.dart b/lib/home/ProfilePage.dart index 3d96bfa..c5adf24 100644 --- a/lib/home/ProfilePage.dart +++ b/lib/home/ProfilePage.dart @@ -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 // } // } - List resultList = List(); resultList = await MultiImagePicker.pickImages( @@ -452,7 +453,9 @@ class _ProfilePageState extends State 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 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 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 ? 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 )); } - testChatPermission(callback) { becomeVip() { Navigator.of(context).push( @@ -1762,7 +1781,9 @@ class _ProfilePageState extends State // } //自己是女性,且未认证,提示去认证(好友除外) - 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 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 fontSize: 18, color: Constants .BlackTextColor)))), - - ], ), ), diff --git a/lib/home/homeMain.dart b/lib/home/homeMain.dart index c197457..66e27ed 100644 --- a/lib/home/homeMain.dart +++ b/lib/home/homeMain.dart @@ -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 { @override void initState() { - SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light); super.initState(); LocalNotificationUtil.instance.initState(context); @@ -163,7 +165,8 @@ class _HomeMainState extends State { 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 { 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 { } 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 { ); } - msgTestPermission(data) async { PermissionStatus status = await LocationPermissions().checkPermissionStatus(); @@ -452,8 +456,6 @@ class _HomeMainState extends State { // userId: UserData().basicInfo.userId, // ), // ]; - - } @override diff --git a/lib/models/unread_count_provider.dart b/lib/models/unread_count_provider.dart index 01bb242..74017c8 100644 --- a/lib/models/unread_count_provider.dart +++ b/lib/models/unread_count_provider.dart @@ -21,7 +21,7 @@ class UnreadCountProvider { } setAlterMe(int sessionId, int time) { - isHaveAlterme[sessionId] = time; + if (isHaveAlterme[sessionId] == null) isHaveAlterme[sessionId] = time; } clear() { diff --git a/lib/utils/msgHandler.dart b/lib/utils/msgHandler.dart index 3e6edf2..df52514 100644 --- a/lib/utils/msgHandler.dart +++ b/lib/utils/msgHandler.dart @@ -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 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 msgContent) { debugPrint('翻译官价聊天开始推送'); @@ -1381,8 +1362,6 @@ class MsgHandler { } } - - //消息免打扰请求结果 static handlerUpdateMemberMsgFree(List msgContent) { print('消息免打扰请求结果'); @@ -1395,8 +1374,6 @@ class MsgHandler { } } - - //群主批准其他人加入群结果 static handlerAgreeMember(List msgContent) { print('群主批准其他人加入群结果'); @@ -1423,8 +1400,6 @@ class MsgHandler { NetWork().sendMsg(ComId.Chat, 227, seq); } - - //请求群列表求结果 static handlerGetGroupListRes(List msgContent) async { var res = QueryUserRelationGroupRes.fromBuffer(msgContent); diff --git a/pubspec.lock b/pubspec.lock index 40911db..55ac707 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index cb0f3d3..16a42d9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: