diff --git a/android/app/build.gradle b/android/app/build.gradle index eaf4d92..bfd9259 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -56,9 +56,9 @@ android { // manifestPlaceholders = [ // AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key // ] - ndk { - abiFilters 'armeabi-v7a' - } + // ndk { + // abiFilters 'armeabi-v7a' + // } multiDexEnabled true manifestPlaceholders = [ JPUSH_PKGNAME : 'com.cyhd.henhoandroid', diff --git a/lib/chat/ChatPage.dart b/lib/chat/ChatPage.dart index faef9eb..65e2574 100644 --- a/lib/chat/ChatPage.dart +++ b/lib/chat/ChatPage.dart @@ -385,7 +385,7 @@ class _ChatPageState extends State { ]), ], )); - actions.add(TranslateSateWidget(friendId: friendInfo.userId)); + //actions.add(TranslateSateWidget(friendId: friendInfo.userId)); actions.add(Container( margin: EdgeInsets.only(top: 1), child: myPop.PopupMenuButton( @@ -715,7 +715,9 @@ class _ChatPageState extends State { return Container( padding: EdgeInsets.fromLTRB(10, 10, 10, 10), - decoration: BoxDecoration(color: Colors.white,border: Border(bottom: BorderSide(color: Colors.grey, width: .3))), + decoration: BoxDecoration( + color: Colors.white, + border: Border(bottom: BorderSide(color: Colors.grey, width: .3))), child: Row( children: [ ClipRRect( @@ -877,7 +879,11 @@ class _ChatPageState extends State { } _deleteItem(msg) { - MessageMgr().emit('Cancel Request', msg); + if (msg.state == MsgState.Uploading) { + print('取消上传'); + UploadUtil().cancelSendMsg(msg); + } + print('#### 开始删除--'); msgList.remove(msg); setState(() {}); diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart index ab1b0d9..7ddc02d 100644 --- a/lib/chat/ChatPageItem.dart +++ b/lib/chat/ChatPageItem.dart @@ -13,6 +13,7 @@ import 'package:chat/chat/redbag_widget.dart'; import 'package:chat/chat/upload_item.dart'; import 'package:chat/chat/video_view.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/models/ChatMsg.dart'; @@ -31,6 +32,7 @@ import 'package:chat/utils/file_cache_mgr.dart'; import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/screen.dart'; import 'package:chat/utils/sound_util.dart'; +import 'package:chat/utils/sql_util.dart'; import 'package:chat/utils/upload_util.dart'; import 'package:chat/utils/video_anim.dart'; import 'package:chat/utils/wpop/w_popup_menu.dart'; @@ -86,8 +88,6 @@ class _ChatPageItemState extends State String curSoundUrl; - CancelToken _cancelToken = CancelToken(); - bool isLongPressed = false; double maxWidth = Screen.width - 140; @@ -105,28 +105,14 @@ class _ChatPageItemState extends State textList = widget.msg.getTransTextList(); MessageMgr().on('Update Translate Message', updateTranslateMsg); - MessageMgr().on('Cancel Request', _deleteItem); - - MessageMgr().on('Cancel Request', _deleteItem); } @override void dispose() { - MessageMgr().off('Cancel Request', _deleteItem); MessageMgr().off('Update Translate Message', updateTranslateMsg); super.dispose(); } - _deleteItem(msg) { - if (msg == widget.msg) { - print(widget.msg.state); - if (widget.msg.state == MsgState.Uploading) { - print('取消上传'); - UploadUtil().cancelRequests(_cancelToken); - } - } - } - updateTextList() { textList.clear(); curTextType = 0; @@ -616,7 +602,6 @@ class _ChatPageItemState extends State child: ClipRRect( child: UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( height: imgSize.height, width: imgSize.width, @@ -641,7 +626,6 @@ class _ChatPageItemState extends State children: [ UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( width: imgSize.width, height: imgSize.height, @@ -702,7 +686,6 @@ class _ChatPageItemState extends State Widget _fileMsgItem() { return UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( height: 100, constraints: BoxConstraints(maxWidth: Screen.width - 120), @@ -1083,7 +1066,8 @@ class _ChatPageItemState extends State print('请求人工翻译成功,进行扣费'); setState(() { widget.msg.transTag = 2; - + SqlUtil().updateUserTranslateState(widget.msg.sessionId, + widget.msg.time, widget.msg.transTag); //优先扣券 if (voucher > 0) { int costQuan = min(voucher, needMoney); @@ -1402,13 +1386,13 @@ class _ChatPageItemState extends State double width = 130; double minWidth = 0; - if (textList.length > 0 && textList[curTextType].length>0) { + if (textList.length > 0 && textList[curTextType].length > 0) { print('textList哒哒哒哒哒 ${textList[curTextType]}'); width = _getTextWidth(textList[curTextType]) + 20; width = min(width, Screen.width - 120); - if(width<130){ - width=130; + if (width < 130) { + width = 130; } showMsg.add(Padding( diff --git a/lib/chat/group_chat_item.dart b/lib/chat/group_chat_item.dart index 7548100..71f0e79 100644 --- a/lib/chat/group_chat_item.dart +++ b/lib/chat/group_chat_item.dart @@ -14,6 +14,7 @@ import 'package:chat/chat/video_view.dart'; import 'package:chat/data/UserData.dart'; import 'package:chat/data/constants.dart'; import 'package:chat/utils/friend_list_mgr.dart'; +import 'package:chat/utils/sql_util.dart'; import 'package:chat/utils/wpop/w_popup_menu.dart'; import 'package:flutter/services.dart'; import 'package:chat/generated/i18n.dart'; @@ -87,8 +88,6 @@ class _GroupChatPageItemState extends State String curSoundUrl; - CancelToken _cancelToken = CancelToken(); - bool isLongPressed = false; double maxWidth = Screen.width - 140; @@ -106,26 +105,14 @@ class _GroupChatPageItemState extends State textList = widget.msg.getTransTextList(); MessageMgr().on('Update Translate Message', updateTranslateMsg); - MessageMgr().on('Cancel Request', _deleteItem); } @override void dispose() { - MessageMgr().off('Cancel Request', _deleteItem); MessageMgr().off('Update Translate Message', updateTranslateMsg); super.dispose(); } - _deleteItem(msg) { - if (msg == widget.msg) { - print(widget.msg.state); - if (widget.msg.state == MsgState.Uploading) { - print('取消上传'); - UploadUtil().cancelRequests(_cancelToken); - } - } - } - updateTextList() { textList.clear(); curTextType = 0; @@ -578,7 +565,6 @@ class _GroupChatPageItemState extends State child: ClipRRect( child: UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( height: imgSize.height, width: imgSize.width, @@ -603,7 +589,6 @@ class _GroupChatPageItemState extends State children: [ UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( width: imgSize.width, height: imgSize.height, @@ -660,7 +645,6 @@ class _GroupChatPageItemState extends State Widget _fileMsgItem() { return UploadImgItem( msg: widget.msg, - cancelToken: _cancelToken, child: Container( height: 100, constraints: BoxConstraints(maxWidth: Screen.width - 120), @@ -1063,7 +1047,8 @@ class _GroupChatPageItemState extends State print('请求人工翻译成功,进行扣费'); setState(() { widget.msg.transTag = 2; - + SqlUtil().updateUserTranslateState(widget.msg.sessionId, + widget.msg.time, widget.msg.transTag); //优先扣券 if (voucher > 0) { int costQuan = min(voucher, needMoney); @@ -1367,13 +1352,13 @@ class _GroupChatPageItemState extends State double width = 130; double minWidth = 0; - if (textList.length > 0 && textList[curTextType].length>0) { + if (textList.length > 0 && textList[curTextType].length > 0) { width = _getTextWidth(textList[curTextType]) + 20; width = min(width, Screen.width - 120); minWidth = max(width, 150); - if(width<130){ - width=130; + if (width < 130) { + width = 130; } showMsg.add(Padding( diff --git a/lib/chat/group_chat_view.dart b/lib/chat/group_chat_view.dart index a33f2b9..1701c2a 100644 --- a/lib/chat/group_chat_view.dart +++ b/lib/chat/group_chat_view.dart @@ -307,122 +307,127 @@ class _GroupChatPageState extends State { Provider.value(value: widget.groupInfoModel), ], child: GestureDetector( - onTap:hideKeyBoard, child: ExtendedTextSelectionPointerHandler( - ///选择文字,消除弹窗 - builder: (states) { - return Listener( - child: Scaffold( - resizeToAvoidBottomInset: false, - backgroundColor: const Color(0xFFE2E9F1), - appBar: AppBar( - backgroundColor: AppColors.NewAppbarBgColor, - title: Text( - widget.groupInfoModel.getGroupName(refMap), - textScaleFactor: 1.0, - style: TextStyle( - color: Constants.BlackTextColor, fontSize: 16.47), - ), - leading: CustomUI.buildCustomLeading(context), - titleSpacing: -10, - elevation: 1, - centerTitle: false, - actions: actions), - body: SafeArea( - child: Stack( - children: [ - Column( + onTap: hideKeyBoard, + child: ExtendedTextSelectionPointerHandler( + ///选择文字,消除弹窗 + builder: (states) { + return Listener( + child: Scaffold( + resizeToAvoidBottomInset: false, + backgroundColor: const Color(0xFFE2E9F1), + appBar: AppBar( + backgroundColor: AppColors.NewAppbarBgColor, + title: Text( + widget.groupInfoModel.getGroupName(refMap), + textScaleFactor: 1.0, + style: TextStyle( + color: Constants.BlackTextColor, + fontSize: 16.47), + ), + leading: CustomUI.buildCustomLeading(context), + titleSpacing: -10, + elevation: 1, + centerTitle: false, + actions: actions), + body: SafeArea( + child: Stack( children: [ - NetStateWidget(), - Expanded(child: _buildMessageList()), - InputBar(sendMsg: sendMsg), - ], - ), - isHaveUnreadNews - ? Positioned( - top: 32.5, - right: 0, - child: InkWell( - onTap: () { - jumpToMsg( - isAlterYou ? alterTime : unreadTime); - clearUnreadNews(); - }, - child: Container( - alignment: Alignment.center, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Color(0x33000000), //阴影颜色 - blurRadius: 7, //阴影大小 - ) - ], - borderRadius: BorderRadius.only( - topLeft: Radius.circular(80), - bottomLeft: Radius.circular(80)), - color: Colors.white, - ), - constraints: BoxConstraints(minWidth: 120), - height: 39, - child: Row( - children: [ - SizedBox(width: 16.5), - Image.asset( - 'assets/images/up.png', - width: 12, + Column( + children: [ + NetStateWidget(), + Expanded(child: _buildMessageList()), + InputBar(sendMsg: sendMsg), + ], + ), + isHaveUnreadNews + ? Positioned( + top: 32.5, + right: 0, + child: InkWell( + onTap: () { + jumpToMsg(isAlterYou + ? alterTime + : unreadTime); + clearUnreadNews(); + }, + child: Container( + alignment: Alignment.center, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color(0x33000000), //阴影颜色 + blurRadius: 7, //阴影大小 + ) + ], + borderRadius: BorderRadius.only( + topLeft: Radius.circular(80), + bottomLeft: Radius.circular(80)), + color: Colors.white, ), - SizedBox(width: 10), - Container( - child: Text( + constraints: + BoxConstraints(minWidth: 120), + height: 39, + child: Row( + children: [ + SizedBox(width: 16.5), + Image.asset( + 'assets/images/up.png', + width: 12, + ), + SizedBox(width: 10), + Container( + child: Text( + isAlterYou + ? '$alterUserName' + : I18n.of(context) + .new_msg + .replaceFirst( + '/s1', + unreadNums + .toString()), + style: TextStyle( + color: Color(0xFF3875E9)), + overflow: + TextOverflow.ellipsis, + ), + constraints: BoxConstraints( + maxWidth: isAlterYou + ? 60 + : Screen.width)), + Text( isAlterYou - ? '$alterUserName' - : I18n.of(context) - .new_msg - .replaceFirst( - '/s1', - unreadNums - .toString()), + ? '@${I18n.of(context).you}' + : '', style: TextStyle( color: Color(0xFF3875E9)), - overflow: TextOverflow.ellipsis, ), - constraints: BoxConstraints( - maxWidth: isAlterYou - ? 60 - : Screen.width)), - Text( - isAlterYou - ? '@${I18n.of(context).you}' - : '', - style: TextStyle( - color: Color(0xFF3875E9)), + SizedBox(width: 14), + ], ), - SizedBox(width: 14), - ], - ), - ))) - : Container() - ], - ))), - onPointerDown: (value) { - for (var state in states) { - if (!state.containsPosition(value.position)) { - //clear other selection - state.clearSelection(); - } - } - }, - onPointerMove: (value) { - //clear other selection - for (var state in states) { - if (!state.containsPosition(value.position)) { + ))) + : Container() + ], + ))), + onPointerDown: (value) { + for (var state in states) { + if (!state.containsPosition(value.position)) { + //clear other selection + state.clearSelection(); + } + } + }, + onPointerMove: (value) { //clear other selection - state.clearSelection(); - } - } + for (var state in states) { + if (!state.containsPosition(value.position)) { + //clear other selection + state.clearSelection(); + } + } + }, + ); }, - ); - }, - ))); + ))); } Widget _buildMessageList() { @@ -510,7 +515,11 @@ class _GroupChatPageState extends State { } _deleteItem(msg) { - MessageMgr().emit('Cancel Request', msg); + if (msg.state == MsgState.Uploading) { + print('取消上传'); + UploadUtil().cancelSendMsg(msg); + } + print('#### 开始删除--'); msgList.remove(msg); setState(() {}); diff --git a/lib/chat/input_bar.dart b/lib/chat/input_bar.dart index 68f5f1b..edd1918 100644 --- a/lib/chat/input_bar.dart +++ b/lib/chat/input_bar.dart @@ -902,6 +902,13 @@ class InputBarState extends State } _sendMessage(String messageText, [bool isGift = false]) { + + var testMsg = messageText.replaceAll(' ', ''); + if (testMsg.length <=0 ) { + showToast('不能发送空白消息'); + return; + } + bool isGroup = Provider.of(context); int friendId = 0; diff --git a/lib/chat/msg_state_widge.dart b/lib/chat/msg_state_widge.dart index 736d1c5..d52e34e 100644 --- a/lib/chat/msg_state_widge.dart +++ b/lib/chat/msg_state_widge.dart @@ -1,6 +1,8 @@ import 'package:chat/models/ChatMsg.dart'; +import 'package:chat/proto/chat.pbserver.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/msgHandler.dart'; +import 'package:chat/utils/upload_util.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -81,11 +83,31 @@ class _MsgStateWidgetState extends State { } else if (sendState == MsgState.SendingSuccess) { return Container(width: 0, height: 0); } else { - return Align( - alignment: Alignment.center, - child: Padding( - padding: EdgeInsets.only(top: 5), - child: CupertinoActivityIndicator())); + if (widget.msg.state == MsgState.Uploading) { + return Container( + child: IconButton( + iconSize: 22, + icon: Icon( + Icons.pause_circle_outline, + color: Colors.red, + ), + onPressed: () { + print('暂停发送'); + UploadUtil().cancelSendMsg(widget.msg); + setState(() { + sendState = MsgState.UploadFailed; + }); + MsgHandler.sendChatMsg(widget.msg); + }, + ), + ); + } else { + return Align( + alignment: Alignment.center, + child: Padding( + padding: EdgeInsets.only(top: 5), + child: CupertinoActivityIndicator())); + } } } } diff --git a/lib/chat/upload_item.dart b/lib/chat/upload_item.dart index 8f5cc12..9da7225 100644 --- a/lib/chat/upload_item.dart +++ b/lib/chat/upload_item.dart @@ -12,10 +12,9 @@ class UploadImgItem extends StatefulWidget { final MsgModel msg; final Widget child; final bool isShowProgress; - final CancelToken cancelToken; UploadImgItem( - {this.msg, this.child, this.isShowProgress = true, this.cancelToken}); + {this.msg, this.child, this.isShowProgress = true}); @override _UploadItemState createState() => _UploadItemState(); @@ -58,7 +57,7 @@ class _UploadItemState extends State { } widget.msg.state = MsgState.Uploading; - await UploadUtil().uploadFile(widget.msg, cancelToken: widget.cancelToken); + await UploadUtil().uploadFile(widget.msg); if (mounted) { this.setState(() {}); diff --git a/lib/chat/util_keyboard.dart b/lib/chat/util_keyboard.dart index d5350ce..bd194f2 100644 --- a/lib/chat/util_keyboard.dart +++ b/lib/chat/util_keyboard.dart @@ -87,11 +87,12 @@ class _UtilKeyboardState extends State { } AppNavigator.pushCoinBagPage(context); }))); - - iconList.add(_buildOtherSelect( - R.assetsImagesChatItem6, I18n.of(context).giving_gift, () { - _showGiftSheet(context); - })); + if (UserData().giftSwitch > 0) { + iconList.add(_buildOtherSelect( + R.assetsImagesChatItem6, I18n.of(context).giving_gift, () { + _showGiftSheet(context); + })); + } } iconList.add(_buildOtherSelect( @@ -313,11 +314,10 @@ class _UtilKeyboardState extends State { showToast(I18n.of(context).max_file.replaceFirst('/s1', 33.toString())); return; } - ///ios存在着文件夹才打得开 - File newFile= await FileCacheMgr().writeFile(file.path.split('/').last, file.readAsBytesSync()); - - + ///ios存在着文件夹才打得开 + File newFile = await FileCacheMgr() + .writeFile(file.path.split('/').last, file.readAsBytesSync()); int friendId = 0; if (!widget.isGroup) { @@ -394,12 +394,12 @@ class _UtilKeyboardState extends State { if (thumbnail.length > ImgSizeLimit) { print('图片较大 ${thumbnail.length}'); - File file =await FileCacheMgr().writeFile(DateTime.now().millisecondsSinceEpoch.toString(),thumbnail); + File file = await FileCacheMgr().writeFile( + DateTime.now().millisecondsSinceEpoch.toString(), thumbnail); File compressedFile = await FlutterNativeImage.compressImage(file.path, quality: 30, percentage: 40); - thumbnail =compressedFile.readAsBytesSync().toList(); - + thumbnail = compressedFile.readAsBytesSync().toList(); // thumbnail = await FlutterImageCompress.compressWithList(thumbnail, quality: 10); diff --git a/lib/data/chat_data_mgr.dart b/lib/data/chat_data_mgr.dart index f36f894..adc4dba 100644 --- a/lib/data/chat_data_mgr.dart +++ b/lib/data/chat_data_mgr.dart @@ -139,7 +139,6 @@ class ChatDataMgr { } int maxLen = min(curIndex + 4, record.length); - print('curIndex:$curIndex maxLen:$maxLen}'); for (var i = curIndex + 1; i < maxLen; i++) { var shortDesc = record[i].shortRecordForTranslator(); // print('shortDesc'+shortDesc['Content']); diff --git a/lib/home/Myprogram.dart b/lib/home/Myprogram.dart index c8a610f..622b8c5 100644 --- a/lib/home/Myprogram.dart +++ b/lib/home/Myprogram.dart @@ -85,6 +85,9 @@ class _MyProgramPageState extends State { break; } } + if (list.length == 0) { + _onRefresh(); + } } Future getData(callback) async { @@ -170,8 +173,7 @@ class _MyProgramPageState extends State { ), centerTitle: true, leading: CustomUI.buildCustomLeading(context), - - elevation: 1, + elevation: 1, actions: [ isMyself ? myPop.PopupMenuButton( diff --git a/lib/home/ProfilePage.dart b/lib/home/ProfilePage.dart index 67bde63..8d98af8 100644 --- a/lib/home/ProfilePage.dart +++ b/lib/home/ProfilePage.dart @@ -143,6 +143,8 @@ class _ProfilePageState extends State bool isShowAll = false; + double fansWidth = Screen.width - 105; + getUserInfo({mymsg = ''}) async { if (mymsg != '' && mymsg != null) { UserData().basicInfo.ownMsg = mymsg; @@ -312,6 +314,14 @@ class _ProfilePageState extends State } } + addProgramCallback(data) { + if (mounted) { + setState(() { + userInfo.dynamicNum++; + }); + } + } + void messageOn() { MessageMgr().on('inform_sucess', msgInformSucess); MessageMgr().on('refresh_money', msgBuyVip); @@ -321,6 +331,7 @@ class _ProfilePageState extends State MessageMgr().on('refresh_love_list', msgRefreshLoveList); MessageMgr().on('refresh_fans_num', msgRefreshFansNum); MessageMgr().on('change_my_headview', msgChangeMyHeadView); + MessageMgr().on('Add_program', addProgramCallback); } void messageOff() { @@ -332,6 +343,7 @@ class _ProfilePageState extends State MessageMgr().off('refresh_love_list', msgRefreshLoveList); MessageMgr().off('refresh_fans_num', msgRefreshFansNum); MessageMgr().off('change_my_headview', msgChangeMyHeadView); + MessageMgr().off('Add_program', addProgramCallback); } msgChangeMyHeadView(data) { @@ -385,7 +397,7 @@ class _ProfilePageState extends State Widget _buildSignIn() { return Container( - margin: EdgeInsets.only(top: Separate_Size, bottom: Separate_Size), + margin: EdgeInsets.only(top: 19, bottom: 19), padding: EdgeInsets.symmetric(horizontal: 10), child: FullWidthButton( iconCode: 0xe65c, @@ -394,6 +406,10 @@ class _ProfilePageState extends State title: I18n.of(context).sign_in, showDivider: false, onPressed: () { + if (UserData().sign <= 0) { + showToast(I18n.of(context).system_not_open); + return; + } Navigator.of(context).push(MaterialPageRoute( builder: (context) { return DailyBonusPage(); @@ -446,7 +462,8 @@ class _ProfilePageState extends State padding: EdgeInsets.only(top: 19), child: Column( children: [ - Row( + Container( + child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ _buildHeadImg(), @@ -455,7 +472,7 @@ class _ProfilePageState extends State _buildButtonList(), ]) ], - ), + )), _buildUserChips(), _buildAttestation(), _buildMyMsg(), @@ -473,7 +490,7 @@ class _ProfilePageState extends State bool showAllContent = isExpansion(userInfo.ownMsg, width); return Container( padding: - EdgeInsets.only(left: 25.5, bottom: isMyself ? 20 : 5, right: 10), + EdgeInsets.only(left: 25.5, bottom: isMyself ? 20 : 20, right: 10), child: userInfo.ownMsg == null || userInfo.ownMsg == '' ? (isMyself ? InkWell( @@ -635,7 +652,7 @@ class _ProfilePageState extends State ]; } else if (userInfo.sex == UserData().basicInfo.sex) { list = [ - _buildBorderButton(I18n.of(context).private_chat, 140, + _buildBorderButton(I18n.of(context).private_chat, fansWidth - 80, isCanWatch ? buyChatAccount : cannotWatchTips, iconCode: IconData(0xe68c, fontFamily: 'iconfont')), ]; @@ -702,7 +719,7 @@ class _ProfilePageState extends State return InkWell( onTap: callback, child: Container( - width: (Screen.width - 105) / 3, + width: fansWidth / 3, child: Column( children: [ Stack( @@ -828,11 +845,11 @@ class _ProfilePageState extends State textScaleFactor: 1.0, style: TextStyle(fontSize: 9, color: Colors.white), )) - : Text(''), + : Container(width: 0), isVip && isMan ? Container( child: isSvip ? Constants.svipIcon : Constants.vipIcon) - : Text(''), + : Container(width: 0), (isAttestation && !isMan) || isVip && isMan ? _buildDivder() : Container(), @@ -1015,7 +1032,7 @@ class _ProfilePageState extends State child.addAll([ _buildHeadView(), Container( - margin: EdgeInsets.only(top: Separate_Size, bottom: Separate_Size), + margin: EdgeInsets.only(top: 19, bottom: 19), padding: EdgeInsets.symmetric(horizontal: 10), child: _buildPicture(), decoration: BoxDecoration( @@ -1485,7 +1502,6 @@ class _ProfilePageState extends State return Container( width: cardWidth, - margin: EdgeInsets.only(top: Separate_Size), decoration: BoxDecoration( color: Colors.white, border: Border( @@ -1511,7 +1527,6 @@ class _ProfilePageState extends State Widget _buildMoneyBox() { //认证、钱包、隐私连麦设置 return Container( - margin: EdgeInsets.only(top: Separate_Size), decoration: BoxDecoration( color: Colors.white, border: Border( @@ -1604,7 +1619,7 @@ class _ProfilePageState extends State ); } - Widget _buildIcon(code, str, isCanHit, callback, {iconSize = 28.0}) { + Widget _buildIcon(code, str, isCanHit, callback, {iconSize = 30.0}) { var color = isCanHit ? Constants.BlueTextColor : Constants.GreyTextColor; return InkWell( onTap: isCanHit @@ -1628,7 +1643,7 @@ class _ProfilePageState extends State child: Text( str, textScaleFactor: 1.0, - style: TextStyle(color: color, fontSize: 12), + style: TextStyle(color: color, fontSize: 14), ), padding: EdgeInsets.only(left: 5)) ], diff --git a/lib/home/WhiteAndBlackList.dart b/lib/home/WhiteAndBlackList.dart index d3b5ed1..ff9580f 100644 --- a/lib/home/WhiteAndBlackList.dart +++ b/lib/home/WhiteAndBlackList.dart @@ -43,12 +43,11 @@ class _WhiteAndBlackPageState extends State { var item = list[i]; if (item['FollowUserId'] == data['UserId'] && data['flag'] != 0) { list.removeAt(i); - break; } } if (list.length == 0) { - _refreshController.refreshCompleted(); + _onRefresh(); } setState(() {}); } @@ -176,7 +175,7 @@ class _WhiteAndBlackPageState extends State { setState(() { list.removeAt(i); if (list.length == 0) { - _refreshController.refreshCompleted(); + _onRefresh(); } }); break; diff --git a/lib/home/group_setting.dart b/lib/home/group_setting.dart index 6185aa3..70e1a2e 100644 --- a/lib/home/group_setting.dart +++ b/lib/home/group_setting.dart @@ -265,7 +265,8 @@ class GroupSettingState extends State { setState(() { showGroupFriendNickname = val; widget.groupInfoModel.updateShowNameSwitch(val); - MsgHandler.setGroupIsShowMenberNiceNameReq(widget.groupInfoModel.sessionId, val); + MsgHandler.setGroupIsShowMenberNiceNameReq( + widget.groupInfoModel.sessionId, val); }); }), @@ -540,8 +541,11 @@ class GroupSettingState extends State { List list = []; for (int index = 0; index < shouldShow; index++) { var member = members[index]; - var refName = Provider.of(context) - .getGroupRefName(widget.groupInfoModel.sessionId, member.memberId); + bool isMyself = member.memberId == UserData().basicInfo.userId; + var refName = isMyself + ? UserData().basicInfo.nickName + : Provider.of(context).getGroupRefName( + widget.groupInfoModel.sessionId, member.memberId); list.add(GestureDetector( child: Container( child: Column( @@ -558,9 +562,7 @@ class GroupSettingState extends State { width: size - 30, height: size - 30, )), - SizedBox( - height: 5, - ), + SizedBox(height: 5), Container( width: size - 30, alignment: Alignment.center, @@ -582,7 +584,10 @@ class GroupSettingState extends State { onTap: () { if (members[index].memberId != UserData().basicInfo.userId) { AppNavigator.pushProfileInfoPage(context, members[index].memberId, - fromWhere: 2, addMode: !FriendListMgr().isMyFriend(members[index].memberId) ? 1 : 0); + fromWhere: 2, + addMode: !FriendListMgr().isMyFriend(members[index].memberId) + ? 1 + : 0); } }, )); diff --git a/lib/home/homeMain.dart b/lib/home/homeMain.dart index d2eaea4..585dd55 100644 --- a/lib/home/homeMain.dart +++ b/lib/home/homeMain.dart @@ -31,6 +31,7 @@ import 'package:oktoast/oktoast.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:chat/utils/my_bottom_navigation_bar.dart' as myBottm; +import 'realtimehelper/real_time_helper_page.dart'; import 'friend_page.dart'; import 'group_chat_page.dart'; @@ -362,121 +363,121 @@ class _HomeMainState extends State { I18n.of(context).me ]; -// _navigationViews = [ -// NavigationIconView( -// title: _titles[2], -// icon: IconData( -// 0xe67c, -// fontFamily: 'iconfont', -// ), -// isShowdot: true, -// iconSize: 29), -// NavigationIconView( -// title: _titles[0], -// isShowdot: true, -// iconMargin: EdgeInsets.only(top: 2), -// type: 5, -// icon: IconData( -// 0xe66e, -// fontFamily: 'iconfont', -// ), -// iconSize: 26.5), -// NavigationIconView( -// title: _titles[1], -// icon: IconData( -// 0xe656, -// fontFamily: 'iconfont', -// ), -// isCenter: true, -// iconSize: 31), -// NavigationIconView( -// title: _titles[1], -// isShowdot: true, -// icon: IconData( -// 0xe60b, -// fontFamily: 'iconfont', -// ), -// type: 6, -// iconSize: 26.5), -// NavigationIconView( -// title: _titles[3], -// icon: IconData( -// 0xe67b, -// fontFamily: 'iconfont', -// ), -// iconSize: 26.5), -// ]; -// -// _pages = [ -// RealTimeHelperPage(), -// FriendPage(), -// FindPage(), -// ConversActionPage(), -//// GroupChatListPage(), -// ProfilePage( -// userId: UserData().basicInfo.userId, -// ), -// ]; - - _navigationViews = [ - NavigationIconView( - title: _titles[1], - isShowdot: true, - icon: IconData( - 0xe60b, - fontFamily: 'iconfont', - ), - type: 1, - iconSize: 26.5), - NavigationIconView( - title: _titles[0], - isShowdot: true, - iconMargin: EdgeInsets.only(top: 2), - type: 5, - icon: IconData( - 0xe663, - fontFamily: 'iconfont', - ), - iconSize: 26.5), - NavigationIconView( - title: _titles[1], - icon: IconData( - 0xe656, - fontFamily: 'iconfont', - ), - isCenter: true, - iconSize: 31), - - NavigationIconView( - title: _titles[3], - isShowdot: true, - icon: IconData( - 0xe66e, - fontFamily: 'iconfont', - ), - type: 4, - iconSize: 26.5), - - NavigationIconView( - title: _titles[3], - icon: IconData( - 0xe67b, - fontFamily: 'iconfont', - ), - iconSize: 26.5), - ]; - - _pages = [ - ConversActionPage(), -// RealTimeHelperPage(), - FriendPage(), - FindPage(), -// ConversActionPage(), - GroupChatListPage(), - ProfilePage( - userId: UserData().basicInfo.userId, - ), - ]; + _navigationViews = [ + NavigationIconView( + title: _titles[2], + icon: IconData( + 0xe67c, + fontFamily: 'iconfont', + ), + isShowdot: true, + iconSize: 29), + NavigationIconView( + title: _titles[0], + isShowdot: true, + iconMargin: EdgeInsets.only(top: 2), + type: 5, + icon: IconData( + 0xe66e, + fontFamily: 'iconfont', + ), + iconSize: 26.5), + NavigationIconView( + title: _titles[1], + icon: IconData( + 0xe656, + fontFamily: 'iconfont', + ), + isCenter: true, + iconSize: 31), + NavigationIconView( + title: _titles[1], + isShowdot: true, + icon: IconData( + 0xe60b, + fontFamily: 'iconfont', + ), + type: 6, + iconSize: 26.5), + NavigationIconView( + title: _titles[3], + icon: IconData( + 0xe67b, + fontFamily: 'iconfont', + ), + iconSize: 26.5), + ]; + + _pages = [ + RealTimeHelperPage(), + FriendPage(), + FindPage(), + ConversActionPage(), +// GroupChatListPage(), + ProfilePage( + userId: UserData().basicInfo.userId, + ), + ]; + +// _navigationViews = [ +// NavigationIconView( +// title: _titles[1], +// isShowdot: true, +// icon: IconData( +// 0xe60b, +// fontFamily: 'iconfont', +// ), +// type: 1, +// iconSize: 26.5), +// NavigationIconView( +// title: _titles[0], +// isShowdot: true, +// iconMargin: EdgeInsets.only(top: 2), +// type: 5, +// icon: IconData( +// 0xe663, +// fontFamily: 'iconfont', +// ), +// iconSize: 26.5), +// NavigationIconView( +// title: _titles[1], +// icon: IconData( +// 0xe656, +// fontFamily: 'iconfont', +// ), +// isCenter: true, +// iconSize: 31), + +// NavigationIconView( +// title: _titles[3], +// isShowdot: true, +// icon: IconData( +// 0xe66e, +// fontFamily: 'iconfont', +// ), +// type: 4, +// iconSize: 26.5), + +// NavigationIconView( +// title: _titles[3], +// icon: IconData( +// 0xe67b, +// fontFamily: 'iconfont', +// ), +// iconSize: 26.5), +// ]; + +// _pages = [ +// ConversActionPage(), +// // RealTimeHelperPage(), +// FriendPage(), +// FindPage(), +// // ConversActionPage(), +// GroupChatListPage(), +// ProfilePage( +// userId: UserData().basicInfo.userId, +// ), +// ]; } @override diff --git a/lib/home/money_detail.dart b/lib/home/money_detail.dart index 485de8b..847adf6 100644 --- a/lib/home/money_detail.dart +++ b/lib/home/money_detail.dart @@ -331,7 +331,8 @@ class MoneyDetailPageState extends State //余额Status 0=交易成功,1=系统退回 //收入 0=冻结 ,1=成功 ,2= 退回 //冻结和成功,你都可以表示成功 - showReturn: (widget.type == 1 && data['Status'] ==1) || (widget.type == 2 && data['Status'] ==2), + showReturn: (widget.type == 1 && data['Status'] == 1) || + (widget.type == 2 && data['Status'] == 2 && data['DetailType'] != 1), isInCome: widget.type == 2, money: isAdd(data['DetailType']) ? data['Value'] : -data['Value'], title: RichTitle.getRichTitleWidget(data, context, diff --git a/lib/home/new_friends.dart b/lib/home/new_friends.dart index 94fbd1f..7a509b5 100644 --- a/lib/home/new_friends.dart +++ b/lib/home/new_friends.dart @@ -8,10 +8,12 @@ import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/conversation_table.dart'; +import 'package:chat/utils/screen.dart'; import 'package:dio/dio.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:oktoast/oktoast.dart'; import 'package:provider/provider.dart'; import 'package:chat/models/friends_info.dart'; import 'ProfilePage.dart'; @@ -120,6 +122,52 @@ class _ContactItem extends StatelessWidget { ), ); + _button = Dismissible( + key: Key(userId.toString()), + child: _button, + direction: DismissDirection.endToStart, + background: Container( + color: Colors.red, + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + fixedText(I18n.of(context).delete, color: Colors.white), + Icon( + Icons.delete, + color: Colors.white, + ), + SizedBox(width: 20), + ], + ), + ), + confirmDismiss: (direction) async { + var _confirmContent = I18n.of(context).confirm_delete; + bool isDismiss = + await CustomUI.showIosDialog(context, _confirmContent, () async { + Map data = { + "userId": UserData().basicInfo.userId, + "aUserId": userId, + }; + data['sign'] = TokenMgr().getSign(data); + + Response res = await HttpUtil().post( + 'friendship/delete/applicationRecord', + data: data, + isShowLoading: true); + + Map resData = res.data; + //showToast(resData['msg']); + if (resData['code'] == 0) { + MessageMgr().emit('delete_friend_record', userId); + } + Navigator.of(context).pop(true); + }, () { + Navigator.of(context).pop(false); + }); + + return isDismiss; + }); + //分组标签 Widget _itemBody; if (this.groupTitle != null) { @@ -201,6 +249,7 @@ class _NewFriendsPageState extends State { getNewFriendList(); _scrollController = new ScrollController(); MessageMgr().on('do_friend_apply', messageApply); + MessageMgr().on('delete_friend_record', deleteFriendRecord); _functionButtons = [ FriendsInfo( @@ -257,6 +306,17 @@ class _NewFriendsPageState extends State { } } + deleteFriendRecord(userId) { + for (int i = 0; i < friendList.length; i++) { + if (friendList[i].friendId == userId) { + setState(() { + friendList.removeAt(i); + }); + break; + } + } + } + getNewFriendList() async { Map data = { "userId": UserData().basicInfo.userId, @@ -281,8 +341,9 @@ class _NewFriendsPageState extends State { @override void dispose() { _scrollController.dispose(); - super.dispose(); MessageMgr().off('do_friend_apply', messageApply); + MessageMgr().off('delete_friend_record', deleteFriendRecord); + super.dispose(); } @override diff --git a/lib/utils/HttpUtil.dart b/lib/utils/HttpUtil.dart index df8f6c1..7006d36 100644 --- a/lib/utils/HttpUtil.dart +++ b/lib/utils/HttpUtil.dart @@ -44,9 +44,9 @@ class HttpUtil { //static const String BaseUrl = 'http://192.168.0.223:7001/'; //static const String BaseUrl = 'http://192.168.0.207:9080/'; -// static const String BaseUrl = 'http://120.79.107.63:9080/'; + static const String BaseUrl = 'http://120.79.107.63:9080/'; //static const String BaseUrl = 'http://192.168.0.177:9016/'; - static const String BaseUrl = 'https://datasm.chengyouhd.com/'; + //static const String BaseUrl = 'https://datasm.chengyouhd.com/'; static HttpUtil _getInstance() { if (_instance == null) { @@ -1178,7 +1178,7 @@ class HttpUtil { callback(); } - SqlUtil().updateUserTranslateRate(msg.sessionId, msg.time, msg.transTag); + SqlUtil().updateUserTranslateState(msg.sessionId, msg.time, msg.transTag); return true; } diff --git a/lib/utils/chat_data_table.dart b/lib/utils/chat_data_table.dart index 198b5a1..5ef528b 100644 --- a/lib/utils/chat_data_table.dart +++ b/lib/utils/chat_data_table.dart @@ -169,8 +169,8 @@ class ChatDataTableModel { whereArgs: [curUserId, session, sendTime]); } - //更新人工翻译评价 - updateUserTranslateRate(int session, int sendTime, int tranState) async { + //更新人工翻译状态 + updateUserTranslateState(int session, int sendTime, int tranState) async { var curUserId = UserData().basicInfo.userId; sql.db.update(table, {'transTag': tranState}, diff --git a/lib/utils/group_chat_table.dart b/lib/utils/group_chat_table.dart index dab6bb5..278fbb7 100644 --- a/lib/utils/group_chat_table.dart +++ b/lib/utils/group_chat_table.dart @@ -172,7 +172,7 @@ class GroupChatTableModel { } //更新人工翻译评价 - updateUserTranslateRate(int session, int sendTime, int tranState) async { + updateUserTranslateState(int session, int sendTime, int tranState) async { var curUserId = UserData().basicInfo.userId; sql.db.update(table, {'transTag': tranState}, diff --git a/lib/utils/sql_util.dart b/lib/utils/sql_util.dart index 5203c80..9963edd 100644 --- a/lib/utils/sql_util.dart +++ b/lib/utils/sql_util.dart @@ -119,9 +119,11 @@ class SqlUtil { session, sendTime, transContent, tranState); } - //更新人工翻译评价 - updateUserTranslateRate(int session, int sendTime, int tranState) async { - chatDataTableModel.updateUserTranslateRate(session, sendTime, tranState); + + + //更新人工翻译状态 + updateUserTranslateState(int session, int sendTime, int tranState) async { + chatDataTableModel.updateUserTranslateState(session, sendTime, tranState); } //更新消息发送状态 diff --git a/lib/utils/upload_util.dart b/lib/utils/upload_util.dart index f6e2a7f..4bbe1ae 100644 --- a/lib/utils/upload_util.dart +++ b/lib/utils/upload_util.dart @@ -42,6 +42,9 @@ class UploadUtil { //进度流 Map> streamMap = {}; + //取消map + Map cancelMap = {}; + //缓存进度,方便快速显示 Map streamLastPercentMap = {}; @@ -104,6 +107,20 @@ class UploadUtil { return streamMap[fileId]; } + getCancelToken(String fileId) { + if (cancelMap[fileId] == null) { + cancelMap[fileId] = CancelToken(); + } + return cancelMap[fileId]; + } + + cancelSendMsg(MsgModel msgModel){ + var token = cancelMap[msgModel.extraFile]; + if (token != null) { + token.cancel('用户取消'); + } + } + Future uploadFile(MsgModel msg, {CancelToken cancelToken}) async { Response response; @@ -132,7 +149,7 @@ class UploadUtil { print('开始上传文件${msg.extraFile} url:${uploadUrl + 'uploadchatfile'}'); var streamController = getStream(msg.extraFile); - + var cancelToken = getCancelToken(msg.extraFile); response = await dio.post(uploadUrl + 'uploadchatfile', data: formData, onSendProgress: (int progress, int total) { streamController.sink.add(progress / total); @@ -141,6 +158,7 @@ class UploadUtil { streamController.close(); streamMap.remove(msg.extraFile); + cancelMap.remove(msg.extraFile); print('uploadFile response $response'); print('###msgContent ${msg.msgContent.length}'); @@ -199,10 +217,8 @@ class UploadUtil { Future downloadFile(MsgModel msg, {CancelToken cancelToken}) async { Response response; - - var fullUrl = getFullUrl(msg.extraFile, msg.sessionId, msg.channelType); - if(msg.extraFile.contains('http://')){ + if (msg.extraFile.contains('http://')) { fullUrl = msg.extraFile; } diff --git a/pubspec.yaml b/pubspec.yaml index d190d37..5e04abf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: chat description: A new Flutter project. #修改版本号后get-clean -version: 1.1.2+17 +version: 1.1.0+15 environment: sdk: ">=2.1.0 <3.0.0"