@@ -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', | |||
@@ -36,8 +36,6 @@ import 'ChatPageItem.dart'; | |||
import 'input_bar.dart'; | |||
import 'package:chat/utils/PopUpMenu.dart' as myPop; | |||
import 'package:chat/models/money_change.dart'; | |||
class ChatPage extends StatefulWidget { | |||
final int friendId; | |||
final int enterType; // 0默认 1图片 | |||
@@ -197,14 +195,22 @@ class _ChatPageState extends State<ChatPage> { | |||
if (widget.enterType == 1) { | |||
print('接收到的:${widget.enterContent}'); | |||
File file = new File(widget.enterContent); | |||
if(file.existsSync()){ | |||
print('接收到的文件--存在'); | |||
}else{ | |||
print('接收到的文件--不存在'); | |||
_sendFile(File(widget.enterContent)); | |||
} else if (widget.enterType == 2) { | |||
//转发消息 | |||
MsgModel originMsg = widget.enterContent; | |||
MsgModel msg = MsgHandler.createSendMsg( | |||
ChatType.valueOf(originMsg.msgType), originMsg.msgContent); | |||
msg.extraInfo = originMsg.extraInfo; | |||
msg.extraFile = originMsg.extraFile; | |||
msg.localFile = originMsg.localFile; | |||
msg.friendId = widget.friendId; | |||
if (msg.localFile != null) { | |||
msg.state = MsgState.Uploaded; | |||
} | |||
_sendFile(File(widget.enterContent)); | |||
sendMsg(msg); | |||
} | |||
}); | |||
} | |||
@@ -614,6 +614,7 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
List<String> actions = [ | |||
I18n.of(context).delete, | |||
I18n.of(context).reply, | |||
'转发' | |||
]; | |||
actionsFunc.add(() { | |||
@@ -623,6 +624,11 @@ class _ChatPageItemState extends State<ChatPageItem> | |||
print('发送引用的消息'); | |||
MessageMgr().emit('Reply Select Message', widget.msg); | |||
}); | |||
actionsFunc.add(() { | |||
print('转发消息'); | |||
AppNavigator.pushForwardPage(context, widget.msg); | |||
}); | |||
if (widget.msg.msgType == ChatType.TextChatType.value) { | |||
actions.insert(0, I18n.of(context).copy); | |||
@@ -106,6 +106,19 @@ class _GroupChatPageState extends State<GroupChatPage> { | |||
if (widget.enterType == 1) { | |||
print('接收到的:${widget.enterContent}'); | |||
_sendFile(File(widget.enterContent)); | |||
} else if (widget.enterType == 2) { | |||
//转发消息 | |||
MsgModel originMsg = widget.enterContent; | |||
MsgModel msg = MsgHandler.createSendMsg( | |||
ChatType.valueOf(originMsg.msgType), originMsg.msgContent,channelType: ChatChannelType.Group); | |||
msg.extraInfo = originMsg.extraInfo; | |||
msg.extraFile = originMsg.extraFile; | |||
msg.localFile = originMsg.localFile; | |||
if (msg.localFile != null) { | |||
msg.state = MsgState.Uploaded; | |||
} | |||
sendMsg(msg); | |||
} | |||
}); | |||
} | |||
@@ -163,8 +163,7 @@ class UtilKeyboard extends StatelessWidget { | |||
showToast(I18n.of(context).cantt_voice); | |||
return; | |||
} | |||
if (BlacklistMgr.isBlaklistMe(info.userId)) { | |||
if (BlacklistMgr.isBlaklistMe(info.userId)) { | |||
showToast(I18n.of(context).you_are_blaklisted); | |||
return; | |||
} | |||
@@ -304,38 +303,39 @@ class UtilKeyboard extends StatelessWidget { | |||
int fileSize = file.lengthSync(); | |||
print('选择的文件 ${file.path} 大小 $fileSize'); | |||
if (fileSize > 33 * 1024 * 1024) { | |||
showToast('文件大于33M'); | |||
return; | |||
} | |||
if (fileSize > 33 * 1024 * 1024) { | |||
showToast('文件大于33M'); | |||
return; | |||
} | |||
int friendId = 0; | |||
if (!isGroup) { | |||
friendId = Provider.of<int>(context); | |||
} | |||
int friendId = 0; | |||
if (!isGroup) { | |||
friendId = Provider.of<int>(context); | |||
} | |||
var fileName = file.path.split('/').last; | |||
print('fileName $fileName'); | |||
var fileName = file.path.split('/').last; | |||
print('fileName $fileName'); | |||
var ext = ''; | |||
var extList = fileName.split('.'); | |||
if (extList.length > 1) { | |||
ext = extList.last; | |||
} | |||
print('ext $ext'); | |||
var ext = ''; | |||
var extList = fileName.split('.'); | |||
if (extList.length > 1) { | |||
ext = extList.last; | |||
} | |||
print('ext $ext'); | |||
var fileMsg = FileChat.create(); | |||
fileMsg.type = ext; | |||
fileMsg.size = fileSize; | |||
fileMsg.name = fileName; | |||
var fileMsg = FileChat.create(); | |||
fileMsg.type = ext; | |||
fileMsg.size = fileSize; | |||
fileMsg.name = fileName; | |||
var msg = MsgHandler.createSendMsg( | |||
ChatType.FileChatType, fileMsg.writeToBuffer(), | |||
friendId: friendId, | |||
localFile: file.path, | |||
channelType: isGroup ? ChatChannelType.Group : ChatChannelType.Session); | |||
var msg = MsgHandler.createSendMsg(ChatType.FileChatType, fileMsg.writeToBuffer(), | |||
friendId: friendId, | |||
localFile: file.path, | |||
channelType: | |||
isGroup ? ChatChannelType.Group : ChatChannelType.Session); | |||
sendMsg(msg); | |||
sendMsg(msg); | |||
} | |||
void _sendVideo(BuildContext context) async { | |||
@@ -219,7 +219,6 @@ class UserData { | |||
await prefs.setDouble(Constants.Longitude, UserData().longitude); | |||
HttpUtil().getAddress(loc.longitude, loc.latitude); | |||
//HttpUtil().getAddress(106.600798525456, 10.7517368433358); | |||
//HttpUtil().getAddress(113.8669580078125, 22.568465711805555); | |||
if (callback != null) callback(loc); | |||
} | |||
} | |||
@@ -5846,7 +5846,8 @@ class _I18n_vi_VN extends I18n { | |||
/// "你不能添加自己" | |||
@override | |||
String get not_add_Myself => "你不能添加自己"; | |||
/// "对方已拉黑了你" | |||
/// "对方已拉黑了你" | |||
@override | |||
String get you_are_blaklisted => "对方已拉黑了你"; | |||
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)" | |||
@@ -8839,9 +8840,9 @@ class _I18n_zh_HK extends I18n { | |||
/// "今日簽到可領取/s1積分" | |||
@override | |||
String get today_score => "今日簽到可領取/s1積分"; | |||
/// "1、每日簽到可領取積分,累計天數越多積分越高。\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換。\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換。" | |||
/// "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換" | |||
@override | |||
String get sign_tips => "1、每日簽到可領取積分,累計天數越多積分越高。\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換。\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換。"; | |||
String get sign_tips => "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換"; | |||
/// "簽到" | |||
@override | |||
String get sign_in => "簽到"; | |||
@@ -9340,15 +9341,6 @@ class _I18n_zh_HK extends I18n { | |||
/// "你不能添加自己" | |||
@override | |||
String get not_add_Myself => "你不能添加自己"; | |||
/// "對方已拉黑了你" | |||
@override | |||
String get you_are_blaklisted => "對方已拉黑了你"; | |||
/// "確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)" | |||
@override | |||
String get confrim_recovery => "確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)"; | |||
/// "發送到" | |||
@override | |||
String get send_to => "發送到"; | |||
@override | |||
TextDirection get textDirection => TextDirection.ltr; | |||
@@ -12333,9 +12325,9 @@ class _I18n_zh_CN extends _I18n_zh_HK { | |||
/// "今日签到可领取/s1积分" | |||
@override | |||
String get today_score => "今日签到可领取/s1积分"; | |||
/// "1、每日签到可领取积分,累计天数越多积分越高。\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换。\n3、每月最后一天将重置签到,清零积分,请记得及时兑换。" | |||
/// "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换" | |||
@override | |||
String get sign_tips => "1、每日签到可领取积分,累计天数越多积分越高。\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换。\n3、每月最后一天将重置签到,清零积分,请记得及时兑换。"; | |||
String get sign_tips => "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换"; | |||
/// "签到" | |||
@override | |||
String get sign_in => "签到"; | |||
@@ -12834,15 +12826,6 @@ class _I18n_zh_CN extends _I18n_zh_HK { | |||
/// "你不能添加自己" | |||
@override | |||
String get not_add_Myself => "你不能添加自己"; | |||
/// "对方已拉黑了你" | |||
@override | |||
String get you_are_blaklisted => "对方已拉黑了你"; | |||
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)" | |||
@override | |||
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"; | |||
/// "发送到" | |||
@override | |||
String get send_to => "发送到"; | |||
@override | |||
TextDirection get textDirection => TextDirection.ltr; | |||
@@ -16325,15 +16308,6 @@ class _I18n_ko_KR extends I18n { | |||
/// "用户不存在" | |||
@override | |||
String get not_have_user => "用户不存在"; | |||
/// "对方已拉黑了你" | |||
@override | |||
String get you_are_blaklisted => "对方已拉黑了你"; | |||
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)" | |||
@override | |||
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"; | |||
/// "發送到" | |||
@override | |||
String get send_to => "發送到"; | |||
@override | |||
TextDirection get textDirection => TextDirection.ltr; | |||
@@ -19318,9 +19292,9 @@ class _I18n_ja_JP extends I18n { | |||
/// "本日サインして/s1ポイントが受け入れる" | |||
@override | |||
String get today_score => "本日サインして/s1ポイントが受け入れる"; | |||
/// "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります.\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください.\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください." | |||
/// "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください " | |||
@override | |||
String get sign_tips => "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります.\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください.\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください."; | |||
String get sign_tips => "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください "; | |||
/// "サイン" | |||
@override | |||
String get sign_in => "サイン"; | |||
@@ -19819,15 +19793,6 @@ class _I18n_ja_JP extends I18n { | |||
/// "你不能添加自己" | |||
@override | |||
String get not_add_Myself => "你不能添加自己"; | |||
/// "对方已拉黑了你" | |||
@override | |||
String get you_are_blaklisted => "对方已拉黑了你"; | |||
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)" | |||
@override | |||
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"; | |||
/// "發送到" | |||
@override | |||
String get send_to => "發送到"; | |||
@override | |||
TextDirection get textDirection => TextDirection.ltr; | |||
@@ -868,7 +868,8 @@ class _AddProgramState extends State<AddProgram> { | |||
contentPadding: | |||
EdgeInsets.only(top: 6, bottom: 10, right: 10), | |||
hintText: I18n.of(context).please_civilization, | |||
hintStyle: TextStyle(fontSize: 12, height: 1.15), | |||
hintStyle: | |||
TextStyle(fontSize: 12, height: 1.15), | |||
border: InputBorder.none, | |||
), | |||
style: TextStyle( | |||
@@ -1157,7 +1158,7 @@ class _AddProgramState extends State<AddProgram> { | |||
.replaceFirst('/s1', UserData().addProgramPrice.toString()); | |||
} | |||
return Container( | |||
padding: EdgeInsets.only(bottom: 100, left: 20, right: 20), | |||
padding: EdgeInsets.only(bottom: 100, left: 20, right: 20), | |||
child: Text( | |||
str, | |||
textScaleFactor: 1.0, | |||
@@ -1311,8 +1312,8 @@ class _AddProgramState extends State<AddProgram> { | |||
var hopeObject = ''; | |||
lovePeopleId.forEach((f) => hopeObject += hopeObject == '' ? f : ',$f'); | |||
String temp = ''; | |||
String postTemp = ''; | |||
String temp=''; | |||
String postTemp=''; | |||
imgUrlList.forEach((str) { | |||
temp += (temp == "" ? str : '|$str'); | |||
postTemp += (postTemp == "" | |||
@@ -691,6 +691,8 @@ class _DisCoverPageState extends State<DisCoverPage> | |||
Widget _renderRow(int index, list, page) { | |||
if (index < list.length) { | |||
var userInfo = list[index]; | |||
print('----------------------------------------------------'); | |||
print(userInfo); | |||
return UserCard( | |||
key: UniqueKey(), | |||
userName: Provider.of<RefNameProvider>(context) | |||
@@ -742,8 +742,7 @@ class _EditPageState extends State<EditPage> { | |||
widget.isEditPage ? idItem : Container(), | |||
_buildDivider(), | |||
_bottomBorderBox(I18n.of(context).nickname, I18n.of(context).fill_out, | |||
true, nickNameController, true, (str) => nickname = str, | |||
inputFormatters: [LengthLimitingTextInputFormatter(20)]), | |||
true, nickNameController, true, (str) => nickname = str), | |||
_buildDivider(), | |||
_bottomBorderBox(I18n.of(context).country, country, false, null, | |||
countryId.length != 0, selectCountry), | |||
@@ -3,7 +3,6 @@ import 'package:chat/data/WebData.dart'; | |||
import 'package:chat/generated/i18n.dart'; | |||
import 'package:chat/home/ProfilePage.dart'; | |||
import 'package:chat/home/rich_title.dart'; | |||
import 'package:chat/models/ref_name_provider.dart'; | |||
import 'package:chat/utils/CustomUI.dart'; | |||
import 'package:chat/utils/HttpUtil.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
@@ -18,7 +17,6 @@ import 'package:flutter/material.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:oktoast/oktoast.dart'; | |||
import 'package:provider/provider.dart'; | |||
import 'package:pull_to_refresh/pull_to_refresh.dart'; | |||
import 'package:url_launcher/url_launcher.dart'; | |||
import '../data/constants.dart' show AppColors, Constants; | |||
@@ -27,6 +25,7 @@ import 'package:cached_network_image/cached_network_image.dart'; | |||
import 'ProgramDetail.dart'; | |||
class _ConversationItem extends StatelessWidget { | |||
const _ConversationItem( | |||
{Key key, | |||
@@ -352,8 +351,6 @@ class _ConversationItem extends StatelessWidget { | |||
} | |||
} | |||
class InfoListPage extends StatefulWidget { | |||
@required | |||
final String title; | |||
@@ -171,7 +171,8 @@ class _MyProgramPageState extends State<MyProgramPage> { | |||
), | |||
centerTitle: true, | |||
leading: CustomUI.buildCustomLeading(context), | |||
elevation: 1, | |||
elevation: 1, | |||
actions: <Widget>[ | |||
isMyself | |||
? myPop.PopupMenuButton<String>( | |||
@@ -1,6 +1,5 @@ | |||
import 'dart:convert'; | |||
import 'dart:io'; | |||
import 'package:chat/home/InfoList.dart'; | |||
import 'package:chat/home/fans_page.dart'; | |||
import 'package:chat/home/goddess_hot.dart'; | |||
import 'package:chat/home/rich_title.dart'; | |||
@@ -449,6 +448,9 @@ class _ProfilePageState extends State<ProfilePage> | |||
data['sign'] = TokenMgr().getSign(data); | |||
Response res = await HttpUtil().post('user/personal/album', data: data); | |||
if (res == null) { | |||
return; | |||
} | |||
Map resData = res.data; | |||
if (resData['code'] == 0) { | |||
imgList = resData['data'] == null ? [] : resData['data']; | |||
@@ -1147,8 +1149,9 @@ class _ProfilePageState extends State<ProfilePage> | |||
top: 20, | |||
child: InkWell( | |||
onTap: () async { | |||
if (!userInfo.isLike) { | |||
HttpUtil().setLove(userInfo.userId, () { | |||
HttpUtil().setLove(userInfo.userId, () { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userInfo.userId, 'flag': 0}); | |||
setState(() { | |||
@@ -1426,7 +1429,6 @@ class _ProfilePageState extends State<ProfilePage> | |||
context, I18n.of(context).blacklist_choose, I18n.of(context).determine, | |||
() async { | |||
Navigator.pop(context); | |||
HttpUtil().blackUser(userInfo.userId, () { | |||
isblack = true; | |||
}); | |||
@@ -2147,8 +2149,7 @@ class _ProfilePageState extends State<ProfilePage> | |||
description: I18n.of(context).recovery_photo, | |||
showDivider: false, | |||
showRightIcon: false, | |||
onPressed: () async { | |||
CustomUI.buildOneConfirm( | |||
onPressed: () async {CustomUI.buildOneConfirm( | |||
context, | |||
I18n.of(context).confrim_recovery, | |||
I18n.of(context).determine, () async { | |||
@@ -2434,7 +2435,7 @@ class _ProfilePageState extends State<ProfilePage> | |||
), | |||
onTap: isblack | |||
? () async { | |||
HttpUtil().cancleBlackUser( | |||
HttpUtil().cancleBlackUser( | |||
userInfo.userId, () { | |||
Navigator.of(context).pop(); | |||
isblack = false; | |||
@@ -2654,8 +2655,7 @@ class _ProfilePageState extends State<ProfilePage> | |||
showToast(I18n.of(context).cantt_voice); | |||
return; | |||
} | |||
if (BlacklistMgr.isBlaklistMe(userInfo.userId)) { | |||
if (BlacklistMgr.isBlaklistMe(userInfo.userId)) { | |||
showToast(I18n.of(context).you_are_blaklisted); | |||
return; | |||
} | |||
@@ -2664,7 +2664,6 @@ class _ProfilePageState extends State<ProfilePage> | |||
showToast(I18n.of(context).reject_message); | |||
return; | |||
} | |||
//对方关闭陌生人消息,则提示 | |||
if (!userInfo.isCanStrangerNews) { | |||
showToast(I18n.of(context).stranger_close_tips); | |||
@@ -119,7 +119,7 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> { | |||
textScaleFactor: 1.0, | |||
style: TextStyle(color: AppColors.NewAppbarTextColor), | |||
), | |||
elevation: 1, | |||
elevation: 1, | |||
leading: CustomUI.buildCustomLeading(context), | |||
centerTitle: true, | |||
); | |||
@@ -553,8 +553,7 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> { | |||
list.add(button); | |||
} | |||
return Container( | |||
padding: EdgeInsets.only(left: 23, top: 10, right: 8, bottom: 10), | |||
color: Colors.white, | |||
margin: EdgeInsets.only(left: 23, top: 10, right: 8, bottom: 10), | |||
child: Column( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
children: list, | |||
@@ -175,7 +175,7 @@ class _SearchPageState extends State<SearchPage> { | |||
child: Stack( | |||
children: <Widget>[ | |||
SmartRefresher( | |||
enablePullDown: list.length > 0, | |||
enablePullDown: list.length > 0, | |||
enablePullUp: true, | |||
header: MaterialClassicHeader(), | |||
footer: CustomUI.buildLoadingFooter(), | |||
@@ -510,7 +510,7 @@ class _CreateGroupPageState extends State<CreateGroupPage> { | |||
actions: <Widget>[ | |||
InkWell( | |||
child: Padding( | |||
padding: EdgeInsets.only(right: 12, top: 14, bottom: 14), | |||
padding: EdgeInsets.only(right: 15, top: 14, bottom: 14), | |||
child: Consumer<GroupSelectProvider>( | |||
builder: (context, counter, child) => Container( | |||
decoration: BoxDecoration( | |||
@@ -525,7 +525,7 @@ class _CreateGroupPageState extends State<CreateGroupPage> { | |||
? Colors.red | |||
: const Color(0xFF3875E9)), | |||
), | |||
padding: EdgeInsets.symmetric(horizontal: 10), | |||
padding: EdgeInsets.symmetric(horizontal: 18), | |||
alignment: Alignment.center, | |||
child: fixedText( | |||
(widget.pageType == | |||
@@ -526,8 +526,8 @@ class DailyBouusState extends State with SingleTickerProviderStateMixin { | |||
height: 37, | |||
child: Image.asset( | |||
R.assetsImagesImgFyj, | |||
width: needAnimate ? animation.value * 17 : 17, | |||
height: needAnimate ? animation.value * 17 : 17, | |||
width: needAnimate ? animation.value * 24 : 24, | |||
height: needAnimate ? animation.value * 24 : 24, | |||
), | |||
decoration: BoxDecoration( | |||
color: Color(isEnough ? 0xff2D81FF : 0xffCBCBCB), | |||
@@ -215,6 +215,10 @@ class _FriendPageState extends State<FriendPage> { | |||
Response res = | |||
await HttpUtil().post('friendship/newFriends/record', data: data); | |||
if (res == null) { | |||
return; | |||
} | |||
var resData = res.data; | |||
if (resData['code'] == 0) { | |||
if (resData['data'] != null) { | |||
@@ -12,7 +12,7 @@ import 'package:chat/utils/LoadingDialog.dart'; | |||
import 'package:chat/utils/MessageMgr.dart'; | |||
import 'package:chat/utils/TokenMgr.dart'; | |||
import 'package:chat/utils/app_navigator.dart'; | |||
import 'package:chat/utils/file_transfer_page.dart'; | |||
import 'package:chat/utils/file_preview_local.dart'; | |||
import 'package:chat/utils/local_notification_util.dart'; | |||
import 'package:chat/utils/msgHandler.dart'; | |||
import 'package:chat/utils/receive_share_file.dart'; | |||
@@ -256,7 +256,7 @@ class _HomeMainState extends State<HomeMain> { | |||
Navigator.of(LoadingManage.context).push( | |||
new MaterialPageRoute( | |||
builder: (context) { | |||
return FileTransferPage(data); | |||
return FilePreview(data); | |||
}, | |||
), | |||
); | |||
@@ -41,8 +41,6 @@ class _LastChatItemState extends State<LastChatItem> { | |||
lastMessageModel = widget.lastMessageModel; | |||
initUserInfo(); | |||
// initUserInfo(); | |||
// initUserInfo(); | |||
MessageMgr().on('UpdateUserInfo', msgUpdateUserInfo); | |||
} | |||
@@ -162,22 +160,5 @@ class _LastChatItemState extends State<LastChatItem> { | |||
enterType: widget.enterType, enterContent: widget.enterContent); | |||
}, | |||
); | |||
// FutureBuilder( | |||
// future: _friendInfoFuture, | |||
// builder: (BuildContext context, AsyncSnapshot snapshot) { | |||
// if (snapshot.connectionState == ConnectionState.done) { | |||
// if (snapshot.hasError) { | |||
// return Container(); | |||
// } else { | |||
// UserInfo friendInfo = snapshot.data; | |||
// if (friendInfo == null) { | |||
// return Container(); | |||
// } | |||
// } else { | |||
// return Container(); | |||
// } | |||
// }); | |||
} | |||
} |
@@ -17,7 +17,7 @@ import 'package:permission_handler/permission_handler.dart'; | |||
class LastChatPage extends StatefulWidget { | |||
final bool needRobot; | |||
final int enterType; // 0默认 1图片 | |||
final int enterType; // 0默认 1图片 2转发消息 | |||
final dynamic enterContent; | |||
LastChatPage({this.needRobot = true, this.enterType = 0, this.enterContent}); | |||
@@ -6,7 +6,6 @@ import 'package:chat/data/WebData.dart'; | |||
import 'package:chat/data/constants.dart'; | |||
import 'package:chat/data/conversation.dart'; | |||
import 'package:chat/generated/i18n.dart'; | |||
import 'package:chat/home/InfoList.dart'; | |||
import 'package:chat/home/ProfilePage.dart'; | |||
import 'package:chat/home/rich_title.dart'; | |||
import 'package:chat/utils/CustomUI.dart'; | |||
@@ -89,7 +89,7 @@ class MyQr extends StatelessWidget { | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Container( | |||
Container( | |||
constraints: BoxConstraints(maxWidth: 170), | |||
child: Text(name, | |||
textScaleFactor: 1.0, | |||
@@ -236,11 +236,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver { | |||
I18n.onLocaleChanged = onLocaleChange; | |||
WidgetsBinding.instance.addObserver(this); | |||
ReceiveShareFile.init(); | |||
ScreenShot.getFileStream(); | |||
ScreenShot.getFileStream(); | |||
} | |||
isAvailableAppleSignIn() async { | |||
@@ -294,9 +290,6 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver { | |||
MessageMgr().emit( | |||
'Receive AudioChat Request', MsgHandler.audioChatRequestFriendId); | |||
} | |||
break; | |||
case AppLifecycleState.paused: // 应用程序不可见,后台 | |||
print('切换到后台'); | |||
@@ -219,7 +219,7 @@ class PayWayContentState extends State<PayWayContent> { | |||
webPage: url, | |||
title: '点我代付[${widget.money}元]', | |||
thumbnail: | |||
"http://datasm.chengyouhd.com/Upload/default/icon120.png", | |||
"http://datasm.chengyouhd.com/Upload/default/icon120.png", | |||
description: '[${UserData().basicInfo.nickName}]正在购买H币,点击帮我支付吧'); | |||
fluwx.share(model); | |||
} | |||
@@ -1109,27 +1109,23 @@ class CustomUI { | |||
if (height == null) { | |||
height = MediaQuery.of(context).size.height * 0.8; | |||
} | |||
return InkWell( | |||
onTap: null, | |||
return Container( | |||
width: MediaQuery.of(context).size.width, | |||
height: height, | |||
alignment: Alignment.topCenter, | |||
child: Container( | |||
width: MediaQuery.of(context).size.width, | |||
height: height, | |||
alignment: Alignment.topCenter, | |||
child: Container( | |||
width: 40, | |||
height: 40, | |||
margin: EdgeInsets.only(top: 20), | |||
padding: EdgeInsets.all(10), | |||
decoration: BoxDecoration( | |||
shape: BoxShape.circle, | |||
color: Colors.white, | |||
boxShadow: [ | |||
BoxShadow(blurRadius: 3.0, color: Colors.black26) | |||
]), | |||
child: new CircularProgressIndicator( | |||
strokeWidth: 2, | |||
), | |||
))); | |||
width: 40, | |||
height: 40, | |||
margin: EdgeInsets.only(top: 20), | |||
padding: EdgeInsets.all(10), | |||
decoration: BoxDecoration( | |||
shape: BoxShape.circle, | |||
color: Colors.white, | |||
boxShadow: [BoxShadow(blurRadius: 3.0, color: Colors.black26)]), | |||
child: new CircularProgressIndicator( | |||
strokeWidth: 2, | |||
), | |||
)); | |||
} | |||
static Widget buildLoadingFooter() { | |||
@@ -282,15 +282,13 @@ class HttpUtil { | |||
print('用户信息resData $resData'); | |||
if (resData['code'] == 0) { | |||
var info = UserInfo.fromJson(resData['data']); | |||
info.isBlackened | |||
info.isBlackened | |||
? BlacklistMgr.addBlackListMe(info.userId) | |||
: BlacklistMgr.removeBalckListMe(info.userId); | |||
info.isBlackList | |||
? BlacklistMgr.addMyBlackList(info.userId) | |||
: BlacklistMgr.removeMyBalckList(info.userId); | |||
friendCache[friendId] = info; | |||
FriendListMgr().updateFriendInfo(info); | |||
UserInfoTable().insertUser(info); | |||
@@ -353,7 +351,6 @@ class HttpUtil { | |||
if (resData['code'] == 0) { | |||
var info = UserInfo.fromJson(resData['data']); | |||
info.isBlackened | |||
? BlacklistMgr.addBlackListMe(info.userId) | |||
: BlacklistMgr.removeBalckListMe(info.userId); | |||
@@ -361,7 +358,6 @@ class HttpUtil { | |||
info.isBlackList | |||
? BlacklistMgr.addMyBlackList(info.userId) | |||
: BlacklistMgr.removeMyBalckList(info.userId); | |||
FriendListMgr().updateFriendInfo(info); | |||
friendCache[info.userId] = info; | |||
MessageMgr().emit('UpdateUserInfo', info); | |||
@@ -1203,7 +1199,7 @@ class HttpUtil { | |||
//根据经纬度获取用户国家城市 | |||
getAddress(double lon, double lat) async { | |||
Map data = { | |||
"lon": lon.toString(), | |||
"lon": lon.toString(), | |||
"lat": lat.toString(), | |||
}; | |||
data['sign'] = TokenMgr().getSign(data); | |||
@@ -1244,12 +1240,12 @@ class HttpUtil { | |||
} | |||
} | |||
//根据经纬度更新当前城市 | |||
//根据经纬度获取用户国家城市 | |||
changeCurrentCity(double lon, double lat, callback) async { | |||
if (UserData().basicInfo.userId == null) return; | |||
Map data = { | |||
"userId": UserData().basicInfo.userId, | |||
"lon": lon.toString(), | |||
"lon": lon.toString(), | |||
"lat": lat.toString(), | |||
}; | |||
data['sign'] = TokenMgr().getSign(data); | |||
@@ -1280,8 +1276,7 @@ class HttpUtil { | |||
callback(resData['data']['UserId']); | |||
} | |||
} | |||
//拉黑用户 | |||
//拉黑用户 | |||
blackUser(int userId, callback) async { | |||
Map data = { | |||
"userid": UserData().basicInfo.userId, | |||
@@ -1354,7 +1349,6 @@ class HttpUtil { | |||
callback(); | |||
} | |||
} | |||
//向企业服务助手提交信息 | |||
Future<bool> commitInfoToCompany(MsgModel msgModel) async { | |||
Map data = { | |||
@@ -85,7 +85,7 @@ class _MessageBoxState extends State<MessageBox> { | |||
), | |||
); | |||
} else if (str == 'black') { | |||
HttpUtil().blackUser(userId, () {}); | |||
HttpUtil().blackUser(userId, () {}); | |||
} else if (str == 'noContent') { | |||
var data = { | |||
"userId": UserData().basicInfo.userId, | |||
@@ -481,7 +481,7 @@ class _MessageBoxState extends State<MessageBox> { | |||
_buildTimebox(data), | |||
_buildImgSet(data), | |||
_buildImgList(data), | |||
widget.isDetail ? Container() : _buildDivder(), | |||
widget.isDetail ? Container() : _buildDivder(), | |||
_buildIconButtonList(data), | |||
//_buildContent(), | |||
], | |||
@@ -61,11 +61,9 @@ class NetWork { | |||
Timer heartTimer; | |||
Timer sendTimer; | |||
Timer connectServerTimer; //尝试连接服务器 | |||
Timer loginTimer; //登录 | |||
Timer loginTimer; //登录计时器 | |||
// 计时器 | |||
Timer iosBgTimer; //登录计时器 | |||
bool isInit = false; | |||
String host; | |||
@@ -82,6 +80,9 @@ class NetWork { | |||
HttpUtil().post('/service/config', data: data).then((res) { | |||
print('获取聊天服务器地址成功'); | |||
res = json.decode(res.toString()); | |||
if (res == null) { | |||
return; | |||
} | |||
if (res['code'] == 0) { | |||
var config = res['data'][0]; | |||
@@ -304,43 +305,37 @@ class NetWork { | |||
} | |||
reallySingOut() { | |||
print('用户登出'); | |||
//清缓存 | |||
reallyClose() { | |||
isNormalClose = true; | |||
reallyClose(); | |||
} | |||
if(iosBgTimer==null){ | |||
debugPrint('#### ios bg 没有计时器--计时器你启动'); | |||
iosBgTimer = Timer(Duration(seconds: 20), () async{ | |||
debugPrint('#### ios bg ios后台关闭socket连接'); | |||
isNormalClose=true; | |||
isConnecting = false; | |||
isConnect = false; | |||
isLogin = false; | |||
heartOutCount = 0; | |||
sendTimer?.cancel(); | |||
heartTimer?.cancel(); | |||
reallyClose() async{ | |||
print('清除连接状态'); | |||
isNormalClose=true; | |||
isConnecting = false; | |||
isConnect = false; | |||
isLogin = false; | |||
heartOutCount = 0; | |||
sendTimer?.cancel(); | |||
heartTimer?.cancel(); | |||
loginTimer?.cancel(); | |||
connectServerTimer?.cancel(); | |||
loginTimer?.cancel(); | |||
print('清除计时器'); | |||
connectServerTimer?.cancel(); | |||
if (channel != null) { | |||
await channel.sink.close(); | |||
channel = null; | |||
} | |||
}); | |||
}else{ | |||
debugPrint('#### ios bg 已有计时器'); | |||
if (channel != null) { | |||
var result = await channel.sink.close(); | |||
print('result: $result'); | |||
channel = null; | |||
} | |||
} | |||
checkConnect() { | |||
debugPrint(' ios bg 取消计时器'); | |||
iosBgTimer?.cancel(); | |||
if (isInit && !isConnect && !isConnecting) { | |||
reconnect(); | |||
} else { | |||
@@ -38,29 +38,31 @@ class TempUserCard extends StatelessWidget { | |||
TempUserCard( | |||
{Key key, | |||
this.userName, | |||
this.isReal: false, | |||
this.city, | |||
this.age, | |||
this.constellation, | |||
this.professional, | |||
this.isOnline, | |||
this.distance, | |||
this.userId, | |||
this.isLove: false, | |||
this.sex, | |||
this.headUrl: '', | |||
this.payImg: false, | |||
this.imgNum: 0, | |||
this.isHidden: false, | |||
this.member: 0, | |||
this.hiddenDistince: false, | |||
this.nameSize = 8, | |||
this.isBalck: false}) | |||
this.userName, | |||
this.isReal: false, | |||
this.city, | |||
this.age, | |||
this.constellation, | |||
this.professional, | |||
this.isOnline, | |||
this.distance, | |||
this.userId, | |||
this.isLove: false, | |||
this.sex, | |||
this.headUrl: '', | |||
this.payImg: false, | |||
this.imgNum: 0, | |||
this.isHidden: false, | |||
this.member: 0, | |||
this.hiddenDistince: false, | |||
this.nameSize = 8, | |||
this.isBalck: false}) | |||
: super(key: key); | |||
@override | |||
Widget build(BuildContext context) { | |||
bool isVIP = member > 0; | |||
bool isSVIP = member == 2; | |||
@@ -70,27 +72,27 @@ class TempUserCard extends StatelessWidget { | |||
return Stack( | |||
children: <Widget>[ | |||
Container( | |||
height: height - 40, | |||
width: height - 40, | |||
height: height-40, | |||
width: height-40, | |||
child: ClipRRect( | |||
borderRadius: BorderRadius.only( | |||
topLeft: Radius.circular(15), | |||
topRight: Radius.circular(15)), | |||
child: headUrl == '' || headUrl == null | |||
? Image.asset( | |||
Constants.DefaultHeadImgUrl, | |||
width: height - 40, | |||
height: height - 40, | |||
) | |||
Constants.DefaultHeadImgUrl, | |||
width: height-40, | |||
height: height-40, | |||
) | |||
: CachedNetworkImage( | |||
imageUrl: headUrl, | |||
placeholder: (context, url) => Image.asset( | |||
Constants.DefaultHeadImgUrl, | |||
width: height - 40, | |||
height: height - 40, | |||
), | |||
fit: BoxFit.cover, | |||
)), | |||
imageUrl: headUrl, | |||
placeholder: (context, url) => Image.asset( | |||
Constants.DefaultHeadImgUrl, | |||
width: height-40, | |||
height: height-40, | |||
), | |||
fit: BoxFit.cover, | |||
)), | |||
), | |||
Positioned( | |||
left: 0, | |||
@@ -100,15 +102,16 @@ class TempUserCard extends StatelessWidget { | |||
width: 54, | |||
decoration: BoxDecoration( | |||
color: Colors.black54, | |||
borderRadius: | |||
BorderRadius.only(topRight: Radius.circular(10))), | |||
borderRadius: BorderRadius.only( | |||
topRight: Radius.circular(10))), | |||
child: Row( | |||
//mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |||
children: <Widget>[ | |||
Padding( | |||
padding: EdgeInsets.only(left: 6), | |||
child: | |||
Icon(Icons.image, size: 15, color: Colors.white)), | |||
Icon(Icons.image, size: 15, color: Colors.white)), | |||
Padding( | |||
padding: EdgeInsets.only(left: 5, top: 2), | |||
child: fixedText(imgNum.toString(), | |||
@@ -129,25 +132,87 @@ class TempUserCard extends StatelessWidget { | |||
fontSize: 15), | |||
isReal && sex == 2 | |||
? Container( | |||
margin: EdgeInsets.only(left: 5), | |||
padding: | |||
EdgeInsets.only(top: 2, bottom: 2, left: 5, right: 5), | |||
alignment: Alignment.center, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(10), | |||
color: Constants.PurpleBackgroundColor, | |||
), | |||
child: fixedText('Real', fontSize: 8, color: Colors.white)) | |||
margin: EdgeInsets.only(left: 5), | |||
padding: | |||
EdgeInsets.only(top: 2, bottom: 2, left: 5, right: 5), | |||
alignment: Alignment.center, | |||
decoration: BoxDecoration( | |||
borderRadius: BorderRadius.circular(10), | |||
color: Constants.PurpleBackgroundColor, | |||
), | |||
child: fixedText('Real', fontSize: 8, color: Colors.white)) | |||
: Container(), | |||
isVIP && sex == 1 | |||
? Container( | |||
margin: EdgeInsets.only(left: 5), | |||
child: isSVIP ? Constants.svipIcon : Constants.vipIcon) | |||
margin: EdgeInsets.only(left: 5), | |||
child: isSVIP ? Constants.svipIcon : Constants.vipIcon) | |||
: Container(), | |||
], | |||
); | |||
} | |||
// void _selectValue(str) async { | |||
// if (str == 'collection') { | |||
// Map data = { | |||
// "userid": UserData().basicInfo.userId, | |||
// "type": 0, | |||
// "followUserId": this.userId, | |||
// }; | |||
// data['sign'] = TokenMgr().getSign(data); | |||
// Response res = await HttpUtil() | |||
// .post('userfollow/follow/insert', data: data, isShowLoading: true); | |||
// Map resData = res.data; | |||
// if (resData['code'] == 0) { | |||
// MessageMgr().emit('refresh_love_list', {'UserId': userId, 'flag': 0}); | |||
// showToast(resData['msg']); | |||
// } | |||
// } else if (str == 'cancleCollection') { | |||
// Map data = { | |||
// "userid": UserData().basicInfo.userId, | |||
// "type": 0, | |||
// "followUserId": this.userId, | |||
// }; | |||
// data['sign'] = TokenMgr().getSign(data); | |||
// Response res = await HttpUtil() | |||
// .post('userfollow/follow/cancel', data: data, isShowLoading: true); | |||
// Map resData = res.data; | |||
// if (resData['code'] == 0) { | |||
// MessageMgr().emit('refresh_love_list', {'UserId': userId, 'flag': 2}); | |||
// showToast(resData['msg']); | |||
// } | |||
// } else if (str == 'black') { | |||
// Map data = { | |||
// "userid": UserData().basicInfo.userId, | |||
// "type": 1, | |||
// "followUserId": this.userId, | |||
// }; | |||
// data['sign'] = TokenMgr().getSign(data); | |||
// Response res = | |||
// await HttpUtil().post('userfollow/follow/insert', data: data); | |||
// Map resData = res.data; | |||
// showToast(resData['msg']); | |||
// if (resData['code'] == 0) { | |||
// MessageMgr().emit('refresh_love_list', {'UserId': userId, 'flag': 1}); | |||
// } | |||
// } else if (str == 'cancleBlack') { | |||
// var data = { | |||
// "userid": UserData().basicInfo.userId, | |||
// "type": 1, | |||
// "followUserId": this.userId, | |||
// }; | |||
// data['sign'] = TokenMgr().getSign(data); | |||
// Response res = | |||
// await HttpUtil().post('userfollow/follow/cancel', data: data); | |||
// Map resData = res.data; | |||
// showToast(resData['msg']); | |||
// if (resData['code'] == 0) { | |||
// MessageMgr().emit('refresh_love_list', {'UserId': userId, 'flag': 2}); | |||
// } | |||
// } | |||
// } | |||
//距离、在线以及相册 | |||
Widget otherWidget() { | |||
var greyColor = const Color(0xFFB2B2B2); | |||
@@ -158,8 +223,8 @@ class TempUserCard extends StatelessWidget { | |||
title: hiddenDistince | |||
? I18n.of(context).secrecy | |||
: (UserData().hasLocationPermission | |||
? WebData().getDistanceString(distance) | |||
: I18n.of(context).unknown), | |||
? WebData().getDistanceString(distance) | |||
: I18n.of(context).unknown), | |||
titleColor: greyColor, | |||
isDivider: true), | |||
InfoTile( | |||
@@ -168,24 +233,24 @@ class TempUserCard extends StatelessWidget { | |||
isDivider: payImg || isHidden), | |||
isHidden | |||
? InfoTile( | |||
icon: IconData(0xe645, fontFamily: 'iconfont'), | |||
iconHeight: 22, | |||
title: I18n.of(context).application_view, | |||
titleColor: greyColor, | |||
isDivider: false, | |||
onTap: () { | |||
print('click'); | |||
}) | |||
icon: IconData(0xe645, fontFamily: 'iconfont'), | |||
iconHeight: 22, | |||
title: I18n.of(context).application_view, | |||
titleColor: greyColor, | |||
isDivider: false, | |||
onTap: () { | |||
print('click'); | |||
}) | |||
: Container(), | |||
payImg | |||
? InfoTile( | |||
icon: IconData(0xe632, fontFamily: Constants.IconFontFamily), | |||
title: I18n.of(context).paid_photo, | |||
titleColor: greyColor, | |||
isDivider: false, | |||
onTap: () { | |||
print('click'); | |||
}) | |||
icon: IconData(0xe632, fontFamily: Constants.IconFontFamily), | |||
title: I18n.of(context).paid_photo, | |||
titleColor: greyColor, | |||
isDivider: false, | |||
onTap: () { | |||
print('click'); | |||
}) | |||
: Container(), | |||
], | |||
); | |||
@@ -210,148 +275,125 @@ class TempUserCard extends StatelessWidget { | |||
), | |||
); | |||
}, | |||
child: Container( | |||
alignment: Alignment.center, | |||
color: AppColors.NewAppbarBgColor, | |||
width: Screen.width, | |||
child: Container( | |||
width: Screen.width - 40, | |||
child: Column( | |||
crossAxisAlignment: CrossAxisAlignment.center, | |||
children: <Widget>[ | |||
SizedBox( | |||
height: 23, | |||
), | |||
headImg(), | |||
Container( | |||
decoration: BoxDecoration( | |||
color: Colors.white, | |||
borderRadius: BorderRadius.only( | |||
bottomLeft: Radius.circular(15), | |||
bottomRight: Radius.circular(15))), | |||
child: Column( | |||
children: <Widget>[ | |||
Container( | |||
//背景 | |||
padding: EdgeInsets.only( | |||
left: 15, right: 10, bottom: 14.5, top: 5), | |||
child: Column( | |||
children: <Widget>[ | |||
Stack( | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
//头像图片 | |||
//信息 | |||
Container( | |||
width: MediaQuery.of(context) | |||
.size | |||
.width - | |||
104, | |||
child: Column( | |||
crossAxisAlignment: | |||
CrossAxisAlignment.start, | |||
mainAxisAlignment: | |||
MainAxisAlignment.end, | |||
children: <Widget>[ | |||
nameState(), //名字以及状态 | |||
//用户的信息标记 | |||
Padding( | |||
padding: | |||
EdgeInsets.only(top: 9)), | |||
TempUserChips( | |||
city: city, | |||
age: age, | |||
constellation: constellation, | |||
professional: professional), | |||
Padding( | |||
padding: | |||
EdgeInsets.only(top: 4)), | |||
otherWidget(), | |||
], | |||
)), | |||
], | |||
), | |||
], | |||
) | |||
], | |||
)), | |||
SizedBox( | |||
height: 5, | |||
), | |||
Container( | |||
child: //赞 | |||
sex == UserData().basicInfo.sex | |||
? InkWell( | |||
onTap: () { | |||
showToast(UserData().isMan() | |||
? I18n.of(context).not_love | |||
: I18n.of(context).not_love2); | |||
}, | |||
child: Container( | |||
width: 100, | |||
height: 30, | |||
decoration: BoxDecoration( | |||
border: Border.all( | |||
color: Color(0xFF878787), | |||
width: 1), | |||
borderRadius: | |||
BorderRadius.circular(16)), | |||
padding: EdgeInsets.only( | |||
left: 15, | |||
right: 15, | |||
bottom: 5, | |||
top: 5), | |||
child: Row( | |||
mainAxisAlignment: | |||
MainAxisAlignment.center, | |||
children: <Widget>[ | |||
Icon( | |||
IconData( | |||
0xe625, | |||
fontFamily: | |||
Constants.IconFontFamily, | |||
), | |||
size: 15, | |||
color: Color(0xffB2B2B2), | |||
), | |||
SizedBox( | |||
width: 5, | |||
), | |||
Text( | |||
'LOVE', | |||
style: prefix0.TextStyle( | |||
color: Color(0xffB2B2B2)), | |||
) | |||
], | |||
))) | |||
: LoveToggle( | |||
isActive: isLove, | |||
onTap: (bool isActive) async { | |||
if (isActive) { | |||
HttpUtil().setLove(userId, () { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 0}); | |||
}); | |||
} else { | |||
HttpUtil().cancleLove(userId, () { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 2}); | |||
}); | |||
} | |||
}), | |||
), | |||
SizedBox( | |||
height: 15, | |||
), | |||
], | |||
), | |||
), | |||
], | |||
), | |||
), | |||
)); | |||
child: Container(alignment: Alignment.center,color: AppColors.NewAppbarBgColor,width: Screen.width,child: Container(width: Screen.width-40,child: Column( | |||
crossAxisAlignment: CrossAxisAlignment.center, | |||
children: <Widget>[ | |||
SizedBox(height: 23,), | |||
headImg(), | |||
Container(decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.only( | |||
bottomLeft: Radius.circular(15), | |||
bottomRight: Radius.circular(15))) ,child: Column(children: <Widget>[ | |||
Container( | |||
//背景 | |||
padding: EdgeInsets.only(left: 15,right: 10, bottom: 14.5,top: 5), | |||
child: Column(children: <Widget>[ | |||
Stack( | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
//头像图片 | |||
//信息 | |||
Container( | |||
width: MediaQuery.of(context).size.width - 104, | |||
child: Column( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
mainAxisAlignment: MainAxisAlignment.end, | |||
children: <Widget>[ | |||
nameState(), //名字以及状态 | |||
//用户的信息标记 | |||
Padding(padding: EdgeInsets.only(top: 9)), | |||
TempUserChips( | |||
city: city, | |||
age: age, | |||
constellation: constellation, | |||
professional: professional), | |||
Padding(padding: EdgeInsets.only(top: 4)), | |||
otherWidget(), | |||
], | |||
)), | |||
], | |||
), | |||
], | |||
) | |||
],)), | |||
SizedBox(height: 5,), | |||
Container( | |||
child: //赞 | |||
sex == UserData().basicInfo.sex | |||
? InkWell( | |||
onTap: () { | |||
showToast(UserData().isMan() | |||
? I18n.of(context).not_love | |||
: I18n.of(context).not_love2); | |||
}, | |||
child: Container( | |||
width: 100, | |||
height: 30, | |||
decoration: BoxDecoration(border: Border.all(color: Color(0xFF878787), width: 1),borderRadius: BorderRadius.circular(16)) , | |||
padding: EdgeInsets.only( | |||
left: 15, right: 15, bottom: 5,top: 5 ), | |||
child: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ | |||
Icon( | |||
IconData( | |||
0xe625, | |||
fontFamily: Constants.IconFontFamily, | |||
), | |||
size: 15, | |||
color: Color(0xffB2B2B2), | |||
), | |||
SizedBox(width: 5,), | |||
Text('LOVE',style: prefix0.TextStyle(color: Color(0xffB2B2B2)),) | |||
],))) | |||
: LoveToggle(isActive: isLove,onTap: (bool isActive) async { | |||
Map data = { | |||
"userid": UserData().basicInfo.userId, | |||
"type": 0, | |||
"followUserId": this.userId, | |||
}; | |||
data['sign'] = TokenMgr().getSign(data); | |||
if (isActive) { | |||
Response res = await HttpUtil().post( | |||
'userfollow/follow/insert', | |||
data: data, | |||
isShowLoading: true); | |||
Map resData = res.data; | |||
showToast(resData['msg']); | |||
if (resData['code'] == 0) { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 0}); | |||
showToast(resData['msg']); | |||
} | |||
} else { | |||
Response res = await HttpUtil().post( | |||
'userfollow/follow/cancel', | |||
data: data, | |||
isShowLoading: true); | |||
Map resData = res.data; | |||
if (resData['code'] == 0) { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 2}); | |||
showToast(resData['msg']); | |||
} | |||
} | |||
}), | |||
), | |||
SizedBox(height: 15,), | |||
],),), | |||
], | |||
),),)); | |||
} | |||
} | |||
@@ -368,12 +410,12 @@ class InfoTile extends StatelessWidget { | |||
const InfoTile( | |||
{Key key, | |||
this.title, | |||
this.titleColor, | |||
this.icon, | |||
this.onTap, | |||
this.iconHeight: TileHeight, | |||
this.isDivider = false}) | |||
this.title, | |||
this.titleColor, | |||
this.icon, | |||
this.onTap, | |||
this.iconHeight: TileHeight, | |||
this.isDivider = false}) | |||
: super(key: key); | |||
@override | |||
@@ -277,13 +277,14 @@ class UserCard extends StatelessWidget { | |||
isActive: isLove, | |||
size: 16, | |||
onTap: (bool isActive) async { | |||
if (isActive) { | |||
HttpUtil().setLove(userId, () { | |||
HttpUtil().setLove(userId, () { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 0}); | |||
}); | |||
} else { | |||
HttpUtil().cancleLove(userId, () { | |||
HttpUtil().cancleLove(userId, () { | |||
MessageMgr().emit('refresh_love_list', | |||
{'UserId': userId, 'flag': 2}); | |||
}); | |||
@@ -343,7 +344,7 @@ class InfoTile extends StatelessWidget { | |||
Container( | |||
alignment: Alignment.bottomCenter, | |||
constraints: BoxConstraints(minHeight: 17), | |||
padding: EdgeInsets.only(right: 5, bottom: 1.5), | |||
padding: EdgeInsets.only(right: 5,bottom: 1.5), | |||
child: Text(title, | |||
textScaleFactor: 1.0, | |||
style: TextStyle( | |||
@@ -10,6 +10,7 @@ import 'package:chat/home/ProfilePage.dart'; | |||
import 'package:chat/home/SearchPage.dart'; | |||
import 'package:chat/home/audio_chat_view.dart'; | |||
import 'package:chat/home/create_group_view.dart'; | |||
import 'package:chat/home/forward_view.dart'; | |||
import 'package:chat/home/group_all_member.dart'; | |||
import 'package:chat/home/group_qr_view.dart'; | |||
import 'package:chat/home/homeMain.dart'; | |||
@@ -99,23 +100,36 @@ class AppNavigator { | |||
} | |||
//聊天 | |||
static pushChatPage(BuildContext context, int friendId,{enterType=0,enterContent}) async { | |||
if(enterType==1){ | |||
static pushChatPage(BuildContext context, int friendId, | |||
{enterType = 0, enterContent}) async { | |||
if (enterType == 1) { | |||
Navigator.of(context).pop(context); | |||
} | |||
AppNavigator.push(context, ChatPage(key: Key('Chat'), friendId: friendId,enterType: enterType,enterContent: enterContent,)); | |||
AppNavigator.push( | |||
context, | |||
ChatPage( | |||
key: Key('Chat'), | |||
friendId: friendId, | |||
enterType: enterType, | |||
enterContent: enterContent, | |||
)); | |||
} | |||
//群聊 | |||
static pushGroupChatPage( | |||
BuildContext context, GroupInfoModel groupInfoModel,{enterType=0,enterContent}) async { | |||
if(enterType==1){ | |||
static pushGroupChatPage(BuildContext context, GroupInfoModel groupInfoModel, | |||
{enterType = 0, enterContent}) async { | |||
if (enterType == 1) { | |||
Navigator.of(context).pop(context); | |||
} | |||
AppNavigator.defaultPush(context, | |||
GroupChatPage(key: Key('GroupChat'), groupInfoModel: groupInfoModel,enterType: enterType,enterContent: enterContent,)); | |||
AppNavigator.defaultPush( | |||
context, | |||
GroupChatPage( | |||
key: Key('GroupChat'), | |||
groupInfoModel: groupInfoModel, | |||
enterType: enterType, | |||
enterContent: enterContent, | |||
)); | |||
} | |||
//客服 | |||
@@ -129,7 +143,7 @@ class AppNavigator { | |||
} | |||
//群聊二维码 | |||
static pushGroupQrPage(BuildContext context,GroupInfoModel model) { | |||
static pushGroupQrPage(BuildContext context, GroupInfoModel model) { | |||
AppNavigator.push(context, GroupQrPage(model)); | |||
} | |||
@@ -205,7 +219,7 @@ class AppNavigator { | |||
AppNavigator.push(context, TranslateRobotPage()); | |||
} | |||
//进入反馈小助手页面 | |||
//进入反馈小助手页面 | |||
static pushCompanyServerPage(BuildContext context) { | |||
AppNavigator.push(context, CompanyServerPage()); | |||
} | |||
@@ -215,5 +229,10 @@ class AppNavigator { | |||
BuildContext context, List<FriendModel> friendList) { | |||
AppNavigator.push( | |||
context, CreateGroupPage(GroupOperatingPageType.CreateGroup, [], null)); | |||
} | |||
//发起群聊界面 | |||
static pushForwardPage(BuildContext context, MsgModel msg) { | |||
AppNavigator.push(context, ForwardPage(msg)); | |||
} | |||
} |
@@ -218,6 +218,7 @@ class MsgHandler { | |||
print('消息包大小超过3M'); | |||
} | |||
//本地文件为空或者等发送成功之后才可以发送 | |||
if (msg.localFile == null || msg.state >= MsgState.Uploaded) { | |||
Future.delayed(Duration(seconds: 60), () { | |||
if (msg.state != MsgState.SendingSuccess) { | |||
@@ -239,6 +240,7 @@ class MsgHandler { | |||
seq.targetId = curActiveSession; | |||
if (curActiveSession == 10000) { | |||
seq.channelType = ChatChannelType.CSD; | |||
} else { | |||
seq.channelType = | |||
@@ -527,7 +529,12 @@ class MsgHandler { | |||
msgModel.state = MsgState.DownloadFailed; | |||
} | |||
} | |||
if (msgModel.sessionId == 10000 ) { | |||
print('收到反馈小助手消息'); | |||
} | |||
if (msgModel.sessionId == curActiveSession) { | |||
MessageMgr().emit('New Chat Message', msgModel.sessionId); | |||
} | |||
} | |||
@@ -918,7 +925,7 @@ class MsgHandler { | |||
NetWork().singOut(); | |||
UserData().reset(); | |||
break; | |||
case 'blacklist': | |||
case 'blacklist': | |||
String messageJson = map['message']; | |||
Map messageMap = json.decode(messageJson); | |||
if (messageMap['Status'] == 0) { | |||
@@ -9,6 +9,8 @@ class ReceiveShareFile { | |||
static List<SharedMediaFile> _sharedFiles; | |||
static String tempFilePath; | |||
static int mLastClickTime = 0; | |||
static final int TIME_INTERVAL = 3000; | |||
static void init() { | |||
// For sharing images coming from outside the app while the app is in the memory | |||
@@ -21,8 +23,12 @@ class ReceiveShareFile { | |||
// print('#### getfilePath ${value[0].path}'); | |||
if (currentIndex == 1) { | |||
if (value != null && value.length > 0) { | |||
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path); | |||
int nowTime = DateTime.now().millisecondsSinceEpoch; | |||
if (nowTime - mLastClickTime > TIME_INTERVAL) { | |||
if (value != null && value.length > 0) { | |||
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path); | |||
} | |||
} | |||
} else { | |||
// print("### 记录下来了1"); | |||
@@ -44,9 +50,14 @@ class ReceiveShareFile { | |||
// print('#### getfilePath ${value[0].path}'); | |||
if (currentIndex == 1) { | |||
if (value != null && value.length > 0) { | |||
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path); | |||
} | |||
int nowTime = DateTime.now().millisecondsSinceEpoch; | |||
if (nowTime - mLastClickTime > TIME_INTERVAL) { | |||
// do something | |||
if (value != null && value.length > 0) { | |||
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path); | |||
mLastClickTime = nowTime; | |||
} | |||
} else {} | |||
} else { | |||
// print("### 记录下来了"); | |||
if (value != null && value.length > 0) { | |||
@@ -58,9 +69,11 @@ class ReceiveShareFile { | |||
// For sharing or opening urls/text coming from outside the app while the app is in the memory | |||
_intentDataStreamSubscription = | |||
ReceiveSharingIntent.getTextStream().listen((String value) { | |||
print('#### getfilePath dddd $value '); | |||
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value); | |||
print('#### getfilePath $value '); | |||
// setState(() { | |||
// _sharedText = value; | |||
// print("Shared: $_sharedText"); | |||
// }); | |||
}, onError: (err) { | |||
print("getLinkStream error: $err"); | |||
}); | |||
@@ -91,8 +91,3 @@ setStatusBar(){ | |||
systemNavigationBarColor: Colors.white, | |||
systemNavigationBarIconBrightness: Brightness.dark)); | |||
} | |||
debugPrint(dynamic msg){ | |||
print('###${DateTime.now()}####### '+msg); | |||
} |
@@ -1,20 +1,16 @@ | |||
import 'dart:io'; | |||
import 'dart:typed_data'; | |||
import 'dart:io'; | |||
import 'package:chat/map/location_result.dart'; | |||
import 'package:chat/utils/screen.dart'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:flutter_image_compress/flutter_image_compress.dart'; | |||
import 'MessageMgr.dart'; | |||
class ScreenShot { | |||
static const MethodChannel _channel = | |||
const MethodChannel('make.photo.screen.hibok'); | |||
static const EventChannel eventChannel = | |||
static const EventChannel eventChannel = | |||
const EventChannel('com.file.hibok'); | |||
static Future<List<int>> takeScreenshotImage() async { | |||
Map<String, dynamic> args = <String, dynamic>{}; | |||
Uint8List bytes = await _channel.invokeMethod('makePhotoScreen', args); | |||
@@ -45,7 +41,6 @@ class ScreenShot { | |||
return _channel.invokeMethod('isSupportGoogle', args); | |||
} | |||
static getFileStream() { | |||
eventChannel.receiveBroadcastStream().listen((Object agrs){ | |||
print('######## receiveBroadcastStream $agrs'); | |||