jiahao 5 anni fa
parent
commit
d7d9d2e576
40 ha cambiato i file con 620 aggiunte e 998 eliminazioni
  1. +12
    -17
      lib/chat/ChatPage.dart
  2. +0
    -6
      lib/chat/ChatPageItem.dart
  3. +0
    -13
      lib/chat/group_chat_view.dart
  4. +37
    -27
      lib/chat/util_keyboard.dart
  5. +1
    -0
      lib/data/UserData.dart
  6. +61
    -10
      lib/generated/i18n.dart
  7. +5
    -5
      lib/home/AddProgram.dart
  8. +1
    -0
      lib/home/ConversActionPage.dart
  9. +0
    -2
      lib/home/DiscoverPage.dart
  10. +2
    -1
      lib/home/EditData.dart
  11. +1
    -432
      lib/home/InfoList.dart
  12. +1
    -0
      lib/home/MoneyPageOld.dart
  13. +1
    -0
      lib/home/Myprogram.dart
  14. +39
    -65
      lib/home/ProfilePage.dart
  15. +6
    -4
      lib/home/ProgramDetail.dart
  16. +1
    -1
      lib/home/SearchPage.dart
  17. +2
    -13
      lib/home/WhiteAndBlackList.dart
  18. +2
    -2
      lib/home/create_group_view.dart
  19. +2
    -2
      lib/home/daily_bonus_page.dart
  20. +0
    -4
      lib/home/friend_page.dart
  21. +2
    -2
      lib/home/homeMain.dart
  22. +19
    -0
      lib/home/last_chat_item.dart
  23. +2
    -2
      lib/home/last_chat_record_widget.dart
  24. +1
    -0
      lib/home/money_detail.dart
  25. +9
    -6
      lib/home/my_qr.dart
  26. +10
    -1
      lib/main.dart
  27. +1
    -1
      lib/utils/ChargeMoney.dart
  28. +20
    -16
      lib/utils/CustomUI.dart
  29. +98
    -5
      lib/utils/HttpUtil.dart
  30. +2
    -12
      lib/utils/MessageBox.dart
  31. +3
    -3
      lib/utils/NetUtil.dart
  32. +212
    -254
      lib/utils/TempUserCard.dart
  33. +5
    -24
      lib/utils/UserCard.dart
  34. +11
    -30
      lib/utils/app_navigator.dart
  35. +1
    -1
      lib/utils/file_transfer_page.dart
  36. +1
    -0
      lib/utils/local_notification_util.dart
  37. +11
    -7
      lib/utils/msgHandler.dart
  38. +8
    -24
      lib/utils/receive_share_file.dart
  39. +6
    -6
      lib/utils/screen.dart
  40. +24
    -0
      lib/utils/screen_shot.dart

+ 12
- 17
lib/chat/ChatPage.dart Vedi File

@@ -17,6 +17,7 @@ import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/TokenMgr.dart';
import 'package:chat/utils/analyze_utils.dart'; import 'package:chat/utils/analyze_utils.dart';
import 'package:chat/utils/app_navigator.dart'; import 'package:chat/utils/app_navigator.dart';
import 'package:chat/utils/blacklist_mgr.dart';
import 'package:chat/utils/friend_list_mgr.dart'; import 'package:chat/utils/friend_list_mgr.dart';
import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/msgHandler.dart';
import 'package:chat/utils/net_state_widget.dart'; import 'package:chat/utils/net_state_widget.dart';
@@ -36,6 +37,7 @@ import 'input_bar.dart';
import 'package:chat/utils/PopUpMenu.dart' as myPop; import 'package:chat/utils/PopUpMenu.dart' as myPop;
import 'package:chat/models/money_change.dart'; import 'package:chat/models/money_change.dart';
class ChatPage extends StatefulWidget { class ChatPage extends StatefulWidget {
final int friendId; final int friendId;
final int enterType; // 0默认 1图片 final int enterType; // 0默认 1图片
@@ -194,22 +196,15 @@ class _ChatPageState extends State<ChatPage> {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
if (widget.enterType == 1) { if (widget.enterType == 1) {
print('接收到的:${widget.enterContent}'); 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);
msg.extraInfo = originMsg.extraInfo;
msg.extraFile = originMsg.extraFile;
msg.localFile = originMsg.localFile;
msg.friendId = widget.friendId;
if (msg.localFile != null) {
msg.state = MsgState.Uploaded;
File file = new File(widget.enterContent);
if(file.existsSync()){
print('接收到的文件--存在');
}else{
print('接收到的文件--不存在');
} }
sendMsg(msg);
_sendFile(File(widget.enterContent));
} }
}); });
} }
@@ -478,12 +473,12 @@ class _ChatPageState extends State<ChatPage> {
sendMsg(MsgModel msg) { sendMsg(MsgModel msg) {
print('对方是否拉黑你 ${friendInfo.isBlackened}'); print('对方是否拉黑你 ${friendInfo.isBlackened}');
if (friendInfo.isBlackened) {
showToast('对方已拉黑了你');
if (BlacklistMgr.isBlaklistMe(friendInfo.userId)) {
showToast(I18n.of(context).you_are_blaklisted);
return; return;
} }
if (friendInfo.isBlackList) {
if (BlacklistMgr.isInMyblaklist(friendInfo.userId)) {
showToast(I18n.of(context).reject_message); showToast(I18n.of(context).reject_message);
return; return;
} }


+ 0
- 6
lib/chat/ChatPageItem.dart Vedi File

@@ -614,7 +614,6 @@ class _ChatPageItemState extends State<ChatPageItem>
List<String> actions = [ List<String> actions = [
I18n.of(context).delete, I18n.of(context).delete,
I18n.of(context).reply, I18n.of(context).reply,
'转发'
]; ];
actionsFunc.add(() { actionsFunc.add(() {
@@ -624,11 +623,6 @@ class _ChatPageItemState extends State<ChatPageItem>
print('发送引用的消息'); print('发送引用的消息');
MessageMgr().emit('Reply Select Message', widget.msg); MessageMgr().emit('Reply Select Message', widget.msg);
}); });
actionsFunc.add(() {
print('转发消息');
AppNavigator.pushForwardPage(context, widget.msg);
});
if (widget.msg.msgType == ChatType.TextChatType.value) { if (widget.msg.msgType == ChatType.TextChatType.value) {
actions.insert(0, I18n.of(context).copy); actions.insert(0, I18n.of(context).copy);


+ 0
- 13
lib/chat/group_chat_view.dart Vedi File

@@ -106,19 +106,6 @@ class _GroupChatPageState extends State<GroupChatPage> {
if (widget.enterType == 1) { if (widget.enterType == 1) {
print('接收到的:${widget.enterContent}'); print('接收到的:${widget.enterContent}');
_sendFile(File(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);
} }
}); });
} }


+ 37
- 27
lib/chat/util_keyboard.dart Vedi File

@@ -15,6 +15,7 @@ import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/LoadingDialog.dart'; import 'package:chat/utils/LoadingDialog.dart';
import 'package:chat/utils/app_navigator.dart'; import 'package:chat/utils/app_navigator.dart';
import 'package:chat/utils/blacklist_mgr.dart';
import 'package:chat/utils/image_util.dart'; import 'package:chat/utils/image_util.dart';
import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/msgHandler.dart';
import 'package:chat/utils/screen.dart'; import 'package:chat/utils/screen.dart';
@@ -163,6 +164,16 @@ class UtilKeyboard extends StatelessWidget {
return; return;
} }
if (BlacklistMgr.isBlaklistMe(info.userId)) {
showToast(I18n.of(context).you_are_blaklisted);
return;
}
if (BlacklistMgr.isInMyblaklist(info.userId)) {
showToast(I18n.of(context).reject_message);
return;
}
//对方关闭陌生人消息,则提示 //对方关闭陌生人消息,则提示
if (!info.isCanStrangerNews) { if (!info.isCanStrangerNews) {
showToast(I18n.of(context).stranger_close_tips); showToast(I18n.of(context).stranger_close_tips);
@@ -293,39 +304,38 @@ class UtilKeyboard extends StatelessWidget {
int fileSize = file.lengthSync(); int fileSize = file.lengthSync();
print('选择的文件 ${file.path} 大小 $fileSize'); print('选择的文件 ${file.path} 大小 $fileSize');
if (fileSize > 33 * 1024 * 1024) {
showToast('文件大于33M');
return;
}
int friendId = 0;
if (!isGroup) {
friendId = Provider.of<int>(context);
}
if (fileSize > 33 * 1024 * 1024) {
showToast('文件大于33M');
return;
}
var fileName = file.path.split('/').last;
print('fileName $fileName');
int friendId = 0;
if (!isGroup) {
friendId = Provider.of<int>(context);
}
var ext = '';
var extList = fileName.split('.');
if (extList.length > 1) {
ext = extList.last;
}
print('ext $ext');
var fileName = file.path.split('/').last;
print('fileName $fileName');
var fileMsg = FileChat.create();
fileMsg.type = ext;
fileMsg.size = fileSize;
fileMsg.name = fileName;
var ext = '';
var extList = fileName.split('.');
if (extList.length > 1) {
ext = extList.last;
}
print('ext $ext');
var msg = MsgHandler.createSendMsg(ChatType.FileChatType, fileMsg.writeToBuffer(),
friendId: friendId,
localFile: file.path,
channelType:
isGroup ? ChatChannelType.Group : ChatChannelType.Session);
var fileMsg = FileChat.create();
fileMsg.type = ext;
fileMsg.size = fileSize;
fileMsg.name = fileName;
sendMsg(msg);
var msg = MsgHandler.createSendMsg(
ChatType.FileChatType, fileMsg.writeToBuffer(),
friendId: friendId,
localFile: file.path,
channelType: isGroup ? ChatChannelType.Group : ChatChannelType.Session);
sendMsg(msg);
} }
void _sendVideo(BuildContext context) async { void _sendVideo(BuildContext context) async {


+ 1
- 0
lib/data/UserData.dart Vedi File

@@ -219,6 +219,7 @@ class UserData {
await prefs.setDouble(Constants.Longitude, UserData().longitude); await prefs.setDouble(Constants.Longitude, UserData().longitude);
HttpUtil().getAddress(loc.longitude, loc.latitude); HttpUtil().getAddress(loc.longitude, loc.latitude);
//HttpUtil().getAddress(106.600798525456, 10.7517368433358); //HttpUtil().getAddress(106.600798525456, 10.7517368433358);
//HttpUtil().getAddress(113.8669580078125, 22.568465711805555);
if (callback != null) callback(loc); if (callback != null) callback(loc);
} }
} }


+ 61
- 10
lib/generated/i18n.dart Vedi File

@@ -2017,8 +2017,8 @@ class I18n implements WidgetsLocalizations {
String get emoji => "emoji"; String get emoji => "emoji";
/// "Sign up today to receive /s1 points" /// "Sign up today to receive /s1 points"
String get today_score => "Sign up today to receive /s1 points"; String get today_score => "Sign up today to receive /s1 points";
/// "1. Daily sign-in can receive points. The more accumulated days, the higher the points. \n2. The points can be exchanged for H coins. The exchange will consume the corresponding points. Please redeem carefully. \n3. The sign-in will be reset on the last day of each month. Redeem in time"
String get sign_tips => "1. Daily sign-in can receive points. The more accumulated days, the higher the points. \n2. The points can be exchanged for H coins. The exchange will consume the corresponding points. Please redeem carefully. \n3. The sign-in will be reset on the last day of each month. Redeem in time";
/// "1. Daily sign-in can receive points. The more accumulated days, the higher the points. \n2. The points can be exchanged for H coins. The exchange will consume the corresponding points. Please redeem carefully. \n3. The sign-in will be reset on the last day of each month. Redeem in time."
String get sign_tips => "1. Daily sign-in can receive points. The more accumulated days, the higher the points. \n2. The points can be exchanged for H coins. The exchange will consume the corresponding points. Please redeem carefully. \n3. The sign-in will be reset on the last day of each month. Redeem in time.";
/// "Sign in" /// "Sign in"
String get sign_in => "Sign in"; String get sign_in => "Sign in";
/// "My scores" /// "My scores"
@@ -2351,6 +2351,12 @@ class I18n implements WidgetsLocalizations {
String get not_have_user => "用户不存在"; String get not_have_user => "用户不存在";
/// "你不能添加自己" /// "你不能添加自己"
String get not_add_Myself => "你不能添加自己"; String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
String get send_to => "發送到";
} }


class _I18n_en_US extends I18n { class _I18n_en_US extends I18n {
@@ -5339,9 +5345,9 @@ class _I18n_vi_VN extends I18n {
/// "Báo danh trong ngày để nhận /s1 điểm tích lũy" /// "Báo danh trong ngày để nhận /s1 điểm tích lũy"
@override @override
String get today_score => "Báo danh trong ngày để nhận /s1 điểm tích lũy"; String get today_score => "Báo danh trong ngày để nhận /s1 điểm tích lũy";
/// "1. Báo danh hàng ngày để tích lũy điểm, số ngày tích lũy càng nhiều điêm tích lũy càng cao \n2. Điểm tích lũy có thể đổi thành H coin, khi đổi sẽ tiêu hao điểm tích lũy tương đương, hãy thận trọng khi đổi. \n3.Báo danh sẽ được đặt lại vào ngày cuối cùng của tháng, xóa điểm tích lũy. Hãy kịp thời đổi điểm tích lũy nhé!"
/// "1. Báo danh hàng ngày để tích lũy điểm, số ngày tích lũy càng nhiều điêm tích lũy càng cao. \n2. Điểm tích lũy có thể đổi thành H coin, khi đổi sẽ tiêu hao điểm tích lũy tương đương, hãy thận trọng khi đổi. \n3.Báo danh sẽ được đặt lại vào ngày cuối cùng của tháng, xóa điểm tích lũy. Hãy kịp thời đổi điểm tích lũy nhé!"
@override @override
String get sign_tips => "1. Báo danh hàng ngày để tích lũy điểm, số ngày tích lũy càng nhiều điêm tích lũy càng cao \n2. Điểm tích lũy có thể đổi thành H coin, khi đổi sẽ tiêu hao điểm tích lũy tương đương, hãy thận trọng khi đổi. \n3.Báo danh sẽ được đặt lại vào ngày cuối cùng của tháng, xóa điểm tích lũy. Hãy kịp thời đổi điểm tích lũy nhé!";
String get sign_tips => "1. Báo danh hàng ngày để tích lũy điểm, số ngày tích lũy càng nhiều điêm tích lũy càng cao. \n2. Điểm tích lũy có thể đổi thành H coin, khi đổi sẽ tiêu hao điểm tích lũy tương đương, hãy thận trọng khi đổi. \n3.Báo danh sẽ được đặt lại vào ngày cuối cùng của tháng, xóa điểm tích lũy. Hãy kịp thời đổi điểm tích lũy nhé!";
/// "Báo danh" /// "Báo danh"
@override @override
String get sign_in => "Báo danh"; String get sign_in => "Báo danh";
@@ -5840,6 +5846,15 @@ class _I18n_vi_VN extends I18n {
/// "你不能添加自己" /// "你不能添加自己"
@override @override
String get not_add_Myself => "你不能添加自己"; String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
@override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
@override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
@override
String get send_to => "發送到";


@override @override
TextDirection get textDirection => TextDirection.ltr; TextDirection get textDirection => TextDirection.ltr;
@@ -8824,9 +8839,9 @@ class _I18n_zh_HK extends I18n {
/// "今日簽到可領取/s1積分" /// "今日簽到可領取/s1積分"
@override @override
String get today_score => "今日簽到可領取/s1積分"; String get today_score => "今日簽到可領取/s1積分";
/// "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換"
/// "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換"
@override @override
String get sign_tips => "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換";
String get sign_tips => "1、每日簽到可領取積分,累計天數越多積分越高\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換";
/// "簽到" /// "簽到"
@override @override
String get sign_in => "簽到"; String get sign_in => "簽到";
@@ -9325,6 +9340,15 @@ class _I18n_zh_HK extends I18n {
/// "你不能添加自己" /// "你不能添加自己"
@override @override
String get not_add_Myself => "你不能添加自己"; String get not_add_Myself => "你不能添加自己";
/// "對方已拉黑了你"
@override
String get you_are_blaklisted => "對方已拉黑了你";
/// "確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)"
@override
String get confrim_recovery => "確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)";
/// "發送到"
@override
String get send_to => "發送到";


@override @override
TextDirection get textDirection => TextDirection.ltr; TextDirection get textDirection => TextDirection.ltr;
@@ -12309,9 +12333,9 @@ class _I18n_zh_CN extends _I18n_zh_HK {
/// "今日签到可领取/s1积分" /// "今日签到可领取/s1积分"
@override @override
String get today_score => "今日签到可领取/s1积分"; String get today_score => "今日签到可领取/s1积分";
/// "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换"
/// "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换"
@override @override
String get sign_tips => "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换";
String get sign_tips => "1、每日签到可领取积分,累计天数越多积分越高\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换\n3、每月最后一天将重置签到,清零积分,请记得及时兑换";
/// "签到" /// "签到"
@override @override
String get sign_in => "签到"; String get sign_in => "签到";
@@ -12810,6 +12834,15 @@ class _I18n_zh_CN extends _I18n_zh_HK {
/// "你不能添加自己" /// "你不能添加自己"
@override @override
String get not_add_Myself => "你不能添加自己"; String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
@override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
@override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "发送到"
@override
String get send_to => "发送到";


@override @override
TextDirection get textDirection => TextDirection.ltr; TextDirection get textDirection => TextDirection.ltr;
@@ -16292,6 +16325,15 @@ class _I18n_ko_KR extends I18n {
/// "用户不存在" /// "用户不存在"
@override @override
String get not_have_user => "用户不存在"; String get not_have_user => "用户不存在";
/// "对方已拉黑了你"
@override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
@override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
@override
String get send_to => "發送到";


@override @override
TextDirection get textDirection => TextDirection.ltr; TextDirection get textDirection => TextDirection.ltr;
@@ -19276,9 +19318,9 @@ class _I18n_ja_JP extends I18n {
/// "本日サインして/s1ポイントが受け入れる" /// "本日サインして/s1ポイントが受け入れる"
@override @override
String get today_score => "本日サインして/s1ポイントが受け入れる"; String get today_score => "本日サインして/s1ポイントが受け入れる";
/// "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください "
/// "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります.\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください.\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください."
@override @override
String get sign_tips => "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください ";
String get sign_tips => "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります.\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください.\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください.";
/// "サイン" /// "サイン"
@override @override
String get sign_in => "サイン"; String get sign_in => "サイン";
@@ -19777,6 +19819,15 @@ class _I18n_ja_JP extends I18n {
/// "你不能添加自己" /// "你不能添加自己"
@override @override
String get not_add_Myself => "你不能添加自己"; String get not_add_Myself => "你不能添加自己";
/// "对方已拉黑了你"
@override
String get you_are_blaklisted => "对方已拉黑了你";
/// "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)"
@override
String get confrim_recovery => "确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)";
/// "發送到"
@override
String get send_to => "發送到";


@override @override
TextDirection get textDirection => TextDirection.ltr; TextDirection get textDirection => TextDirection.ltr;


+ 5
- 5
lib/home/AddProgram.dart Vedi File

@@ -709,6 +709,7 @@ class _AddProgramState extends State<AddProgram> {
} }
void _sendPicture() async { void _sendPicture() async {
closeEmojiAction();
var photos = await PhotoPicker.pickAsset( var photos = await PhotoPicker.pickAsset(
context: context, context: context,
themeColor: Color(0xFFF0F0F0), themeColor: Color(0xFFF0F0F0),
@@ -867,8 +868,7 @@ class _AddProgramState extends State<AddProgram> {
contentPadding: contentPadding:
EdgeInsets.only(top: 6, bottom: 10, right: 10), EdgeInsets.only(top: 6, bottom: 10, right: 10),
hintText: I18n.of(context).please_civilization, hintText: I18n.of(context).please_civilization,
hintStyle:
TextStyle(fontSize: 12, height: 1.15),
hintStyle: TextStyle(fontSize: 12, height: 1.15),
border: InputBorder.none, border: InputBorder.none,
), ),
style: TextStyle( style: TextStyle(
@@ -1157,7 +1157,7 @@ class _AddProgramState extends State<AddProgram> {
.replaceFirst('/s1', UserData().addProgramPrice.toString()); .replaceFirst('/s1', UserData().addProgramPrice.toString());
} }
return Container( return Container(
padding: EdgeInsets.only(bottom: 100),
padding: EdgeInsets.only(bottom: 100, left: 20, right: 20),
child: Text( child: Text(
str, str,
textScaleFactor: 1.0, textScaleFactor: 1.0,
@@ -1311,8 +1311,8 @@ class _AddProgramState extends State<AddProgram> {
var hopeObject = ''; var hopeObject = '';
lovePeopleId.forEach((f) => hopeObject += hopeObject == '' ? f : ',$f'); lovePeopleId.forEach((f) => hopeObject += hopeObject == '' ? f : ',$f');
String temp='';
String postTemp='';
String temp = '';
String postTemp = '';
imgUrlList.forEach((str) { imgUrlList.forEach((str) {
temp += (temp == "" ? str : '|$str'); temp += (temp == "" ? str : '|$str');
postTemp += (postTemp == "" postTemp += (postTemp == ""


+ 1
- 0
lib/home/ConversActionPage.dart Vedi File

@@ -4,6 +4,7 @@ import 'package:chat/data/conversation.dart';
import 'package:chat/generated/i18n.dart'; import 'package:chat/generated/i18n.dart';
import 'package:chat/home/InfoList.dart'; import 'package:chat/home/InfoList.dart';
import 'package:chat/home/last_chat_record_widget.dart'; import 'package:chat/home/last_chat_record_widget.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/home/unread_dot_widget.dart'; import 'package:chat/home/unread_dot_widget.dart';
import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/HttpUtil.dart';


+ 0
- 2
lib/home/DiscoverPage.dart Vedi File

@@ -691,8 +691,6 @@ class _DisCoverPageState extends State<DisCoverPage>
Widget _renderRow(int index, list, page) { Widget _renderRow(int index, list, page) {
if (index < list.length) { if (index < list.length) {
var userInfo = list[index]; var userInfo = list[index];
print('----------------------------------------------------');
print(userInfo);
return UserCard( return UserCard(
key: UniqueKey(), key: UniqueKey(),
userName: Provider.of<RefNameProvider>(context) userName: Provider.of<RefNameProvider>(context)


+ 2
- 1
lib/home/EditData.dart Vedi File

@@ -742,7 +742,8 @@ class _EditPageState extends State<EditPage> {
widget.isEditPage ? idItem : Container(), widget.isEditPage ? idItem : Container(),
_buildDivider(), _buildDivider(),
_bottomBorderBox(I18n.of(context).nickname, I18n.of(context).fill_out, _bottomBorderBox(I18n.of(context).nickname, I18n.of(context).fill_out,
true, nickNameController, true, (str) => nickname = str),
true, nickNameController, true, (str) => nickname = str,
inputFormatters: [LengthLimitingTextInputFormatter(20)]),
_buildDivider(), _buildDivider(),
_bottomBorderBox(I18n.of(context).country, country, false, null, _bottomBorderBox(I18n.of(context).country, country, false, null,
countryId.length != 0, selectCountry), countryId.length != 0, selectCountry),


+ 1
- 432
lib/home/InfoList.dart Vedi File

@@ -2,6 +2,7 @@ import 'package:chat/data/UserData.dart';
import 'package:chat/data/WebData.dart'; import 'package:chat/data/WebData.dart';
import 'package:chat/generated/i18n.dart'; import 'package:chat/generated/i18n.dart';
import 'package:chat/home/ProfilePage.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/models/ref_name_provider.dart';
import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/HttpUtil.dart';
@@ -26,16 +27,6 @@ import 'package:cached_network_image/cached_network_image.dart';
import 'ProgramDetail.dart'; import 'ProgramDetail.dart';
class InfoType {
static const int Apply = 1;
static const int Evaluation = 2;
static const int System = 3;
static const int Radio = 4;
static const int Money = 5;
static const int IncomeMoney = 6;
static const int MyMoney = 7;
}
class _ConversationItem extends StatelessWidget { class _ConversationItem extends StatelessWidget {
const _ConversationItem( const _ConversationItem(
{Key key, {Key key,
@@ -361,429 +352,7 @@ class _ConversationItem extends StatelessWidget {
} }
} }
class TitleItem {
String title = '';
String name = '';
String value = '';
TitleItem({this.title, this.name, this.value});
}
class RichTitle {
static List<InlineSpan> getRichText(TitleItem titleItem,
{titleStyle, nameStyle}) {
if (nameStyle == null) {
nameStyle = TextStyle(
fontWeight: FontWeight.w500, color: Constants.BlackTextColor);
}
if (titleStyle == null) {
titleStyle = TextStyle(color: Constants.GreyTextColor);
}
titleItem.title = titleItem.title == null ? '' : titleItem.title;
List list = titleItem.title.split('/s1');
titleItem.name = titleItem.name == null ? '' : (titleItem.name + ' ');
List<InlineSpan> child;
if (list == null) {
child = [
TextSpan(text: titleItem.title, style: titleStyle),
];
} else {
child = list.length > 1
? [
TextSpan(
text: list[0] == '' ? '' : (list[0] + ' '),
style: titleStyle),
TextSpan(text: titleItem.name, style: nameStyle),
TextSpan(text: list[1], style: titleStyle),
]
: [
TextSpan(text: titleItem.name, style: nameStyle),
TextSpan(text: list[0], style: titleStyle),
];
}
return child;
}
static String getNormalText(TitleItem titleItem) {
List list = titleItem.title.split('/s1');
titleItem.name = titleItem.name == null ? '' : (titleItem.name + ' ');
String res = '';
if (list == null) {
res = titleItem.title;
} else {
list.length > 1
? res = (list[0] == '' ? list[0] : (list[0] + ' ')) +
titleItem.name +
list[1]
: res = titleItem.name + list[0];
}
return res;
}
//申请
static TitleItem _delApplyTitle(userInfo, BuildContext context) {
print(userInfo);
bool isMyself = userInfo['ApplyUserId'] == UserData().basicInfo.userId;
String name = isMyself
? Provider.of<RefNameProvider>(context)
.getRefName(userInfo['UserId'], userInfo['UserName'])
: Provider.of<RefNameProvider>(context)
.getRefName(userInfo['ApplyUserId'], userInfo['ApplyName']);
String title = isMyself
? userInfo['Status'] == 1
? I18n.of(context).l15_days
: I18n.of(context).reject_reply
: I18n.of(context).view_application2;
if (userInfo['Type'] == 1) {
title = isMyself
? I18n.of(context).applyed_friends
: I18n.of(context).apply_friends;
}
return TitleItem(title: title, name: name);
}
//评价
static TitleItem _delEvaluateTitle(userInfo, BuildContext context) {
String name = WebData().getEvaluation(context, userInfo['Value']);
String title = '';
if (userInfo['Status'] == 2) {
title = I18n.of(context).successful_appeal;
} else if (userInfo['Status'] == 3) {
title = I18n.of(context).successful_appeal1;
} else {
title = UserData().isMan()
? I18n.of(context).received_evaluation
: I18n.of(context).received_evaluation2;
}
return TitleItem(title: title, name: name);
}
//电台
static TitleItem _delRadioTitle(data, BuildContext context) {
bool isProgram = data['ProgramType'] == 0;
String title;
switch (data['Type']) {
case 1:
title = isProgram
? I18n.of(context).thumbs_up2
: I18n.of(context).thumbs_up;
break;
case 2:
title =
isProgram ? I18n.of(context).comment2 : I18n.of(context).comment1;
break;
case 3:
title = I18n.of(context).signed_up;
break;
case 4:
title = isProgram
? I18n.of(context).favorite_user
: I18n.of(context).favorite_user2;
break;
case 5:
title = I18n.of(context).replied_comment;
break;
default:
}
return TitleItem(
title: title,
name: Provider.of<RefNameProvider>(context)
.getRefName(data['UserId'], data['UserName']));
}
//系统
static TitleItem _delSystemTitle(data, BuildContext context) {
bool isMyself = data['UserId'] == UserData().basicInfo.userId;
bool isPass = data['Status'] == 1;
String title = '';
String name = Provider.of<RefNameProvider>(context)
.getRefName(data['ReportedUserId'], data['ReportedUserName']);
switch (data['Type']) {
case 1:
title = isPass
? I18n.of(context).upload_success
: I18n.of(context).re_upload;
break;
case 2:
title = isPass
? I18n.of(context).successful_authentication
: I18n.of(context).authentication_failed;
break;
case 3:
if (isMyself) {
title = data['Status'] == 1
? I18n.of(context).report_success
: I18n.of(context).report_failure;
} else {
title = I18n.of(context).coin_returen;
}
break;
case 4:
title = data['Status'] == 1
? I18n.of(context).successful_application
: I18n.of(context).application_failed;
name = data['Status'] == 1 ? data['Content'].toString() : null;
break;
case 5:
title = '代理会员推送相关';
break;
default:
}
return TitleItem(title: title, name: name);
}
//钱包
static TitleItem _delMoneyTitle(data, BuildContext context) {
String title = '';
bool isMyself = data['UserId'] == UserData().basicInfo.userId;
String name = Provider.of<RefNameProvider>(context)
.getRefName(data['ChangeUserId'], data['UserName']);
switch (data['DetailType'] == 10 ? data['Status'] : data['DetailType']) {
case 1:
title = I18n.of(context).get_coin2;
name = data['Value'].toString();
break;
case 2:
title = I18n.of(context).buy_vip;
name = data['Value'].toString();
break;
case 3:
title = isMyself
? I18n.of(context)
.paid_you4
.replaceFirst('/s2', data['Value'].toString())
: I18n.of(context)
.paid_you
.replaceFirst('/s2', data['Value'].toString());
break;
case 4:
title = isMyself
? I18n.of(context)
.paid_you5
.replaceFirst('/s2', data['Value'].toString())
: I18n.of(context)
.paid_you2
.replaceFirst('/s2', data['Value'].toString());
break;
case 5:
title = I18n.of(context).buy_program;
name = data['Value'].toString();
break;
case 6:
if (data['Status'] == 0) {
title = I18n.of(context).del_add_money;
} else if (data['Status'] == 1) {
title = I18n.of(context).adding_money;
} else {
title = I18n.of(context).withdraw_fail;
}
name = data['Value'].toString();
break;
case 7:
title =
isMyself ? I18n.of(context).paid_you6 : I18n.of(context).paid_you3;
break;
case 8:
title = isMyself
? I18n.of(context)
.give_other_money
.replaceFirst('/s2', data['Value'].toString())
: I18n.of(context)
.get_other_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 9:
title = isMyself
? I18n.of(context)
.give_red_money
.replaceFirst('/s2', data['Value'].toString())
: I18n.of(context)
.get_red_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 11:
title = I18n.of(context).Redeem;
name = data['Value'].toString();
break;
}
return TitleItem(title: title, name: name);
}
//收入金额
static TitleItem _delInMoneyTitle(data, BuildContext context) {
String title = '';
String name = Provider.of<RefNameProvider>(context)
.getRefName(data['UserId'], data['UserName']);
switch (data['DetailType']) {
case 1:
if (data['Status'] == 0) {
title = I18n.of(context).del_add_money;
} else if (data['Status'] == 1) {
title = I18n.of(context).withdraw_fail;
} else {
title = I18n.of(context).adding_money;
}
name = data['Value'].toString();
break;
case 2:
title = I18n.of(context).change_h_coin;
name = data['Value'].toString();
break;
case 3:
title = I18n.of(context)
.get_other_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 4:
title = I18n.of(context)
.get_red_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 5:
title = I18n.of(context).paid_you3;
break;
case 6:
title = I18n.of(context)
.paid_you
.replaceFirst('/s2', data['Value'].toString());
break;
case 7:
title = I18n.of(context)
.paid_you2
.replaceFirst('/s2', data['Value'].toString());
break;
case 8:
title = I18n.of(context).Representation_succes;
break;
case 9:
title = I18n.of(context).system_give;
break;
case 10:
title = I18n.of(context).exchange_fail;
break;
}
return TitleItem(title: title, name: name);
}
//我的余额
static TitleItem _delMyMoneyTitle(data, BuildContext context) {
String title = '';
String name = Provider.of<RefNameProvider>(context)
.getRefName(data['UserId'], data['UserName']);
switch (data['DetailType']) {
case 1:
title = I18n.of(context).get_coin2;
name = data['Value'].toString();
break;
case 2:
title = I18n.of(context).hibok_exchange;
name = data['Value'].toString();
break;
case 3:
title = I18n.of(context).bind_code_success;
break;
case 4:
title = I18n.of(context)
.give_other_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 5:
title = I18n.of(context)
.give_red_money
.replaceFirst('/s2', data['Value'].toString());
break;
case 6:
title = I18n.of(context)
.paid_you6
.replaceFirst('/s2', data['Value'].toString());
break;
case 7:
title = I18n.of(context)
.paid_you4
.replaceFirst('/s2', data['Value'].toString());
break;
case 8:
title = I18n.of(context)
.paid_you5
.replaceFirst('/s2', data['Value'].toString());
break;
case 9:
title = I18n.of(context).buy_vip;
name = data['Value'].toString();
break;
case 10:
title = I18n.of(context).translate_money;
name = data['Value'].toString();
break;
case 11:
title = I18n.of(context).buy_program;
name = data['Value'].toString();
break;
case 12:
title = I18n.of(context).Representation_succes;
break;
case 13:
title = I18n.of(context).system_back;
break;
case 14:
title = I18n.of(context).system_give;
break;
}
return TitleItem(title: title, name: name);
}
static TitleItem _getTypeTitleItem(userInfo, BuildContext context, int type) {
var tileItem = TitleItem();
switch (type) {
case InfoType.Apply:
tileItem = _delApplyTitle(userInfo, context);
break;
case InfoType.Radio:
tileItem = _delRadioTitle(userInfo, context);
break;
case InfoType.System:
tileItem = _delSystemTitle(userInfo, context);
break;
case InfoType.Money:
tileItem = _delMoneyTitle(userInfo, context);
break;
case InfoType.IncomeMoney:
tileItem = _delInMoneyTitle(userInfo, context);
break;
case InfoType.MyMoney:
tileItem = _delMyMoneyTitle(userInfo, context);
break;
case InfoType.Evaluation:
tileItem = _delEvaluateTitle(userInfo, context);
break;
default:
}
return tileItem;
}
static Widget getRichTitleWidget(userInfo, BuildContext context, int type,
{titleStyle, nameStyle}) {
var tileItem = _getTypeTitleItem(userInfo, context, type);
return RichText(
text: TextSpan(
children: getRichText(tileItem,
titleStyle: titleStyle, nameStyle: nameStyle)));
}
static String normalTitle(userInfo, BuildContext context, int type) {
if (userInfo == null) {
return '';
}
var tileItem = _getTypeTitleItem(userInfo, context, type);
var res = getNormalText(tileItem);
int maxlength = 17;
return res.length > maxlength ? res.substring(0, maxlength) + '...' : res;
}
}
class InfoListPage extends StatefulWidget { class InfoListPage extends StatefulWidget {
@required @required


+ 1
- 0
lib/home/MoneyPageOld.dart Vedi File

@@ -10,6 +10,7 @@ import 'package:chat/generated/i18n.dart';
import 'package:chat/home/BindBank.dart'; import 'package:chat/home/BindBank.dart';
import 'package:chat/home/InfoList.dart'; import 'package:chat/home/InfoList.dart';
import 'package:chat/home/ProfilePage.dart'; import 'package:chat/home/ProfilePage.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/models/money_change.dart'; import 'package:chat/models/money_change.dart';
import 'package:chat/utils/ChargeMoney.dart'; import 'package:chat/utils/ChargeMoney.dart';
import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/CustomUI.dart';


+ 1
- 0
lib/home/Myprogram.dart Vedi File

@@ -171,6 +171,7 @@ class _MyProgramPageState extends State<MyProgramPage> {
), ),
centerTitle: true, centerTitle: true,
leading: CustomUI.buildCustomLeading(context), leading: CustomUI.buildCustomLeading(context),
elevation: 1,
actions: <Widget>[ actions: <Widget>[
isMyself isMyself
? myPop.PopupMenuButton<String>( ? myPop.PopupMenuButton<String>(


+ 39
- 65
lib/home/ProfilePage.dart Vedi File

@@ -3,6 +3,7 @@ import 'dart:io';
import 'package:chat/home/InfoList.dart'; import 'package:chat/home/InfoList.dart';
import 'package:chat/home/fans_page.dart'; import 'package:chat/home/fans_page.dart';
import 'package:chat/home/goddess_hot.dart'; import 'package:chat/home/goddess_hot.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/models/money_change.dart'; import 'package:chat/models/money_change.dart';
import 'package:chat/models/ref_name_provider.dart'; import 'package:chat/models/ref_name_provider.dart';
import 'package:chat/models/voucher_change.dart'; import 'package:chat/models/voucher_change.dart';
@@ -10,6 +11,7 @@ import 'package:chat/photo/entity/options.dart';
import 'package:chat/photo/photo.dart'; import 'package:chat/photo/photo.dart';
import 'package:chat/utils/ChargeMoney.dart'; import 'package:chat/utils/ChargeMoney.dart';
import 'package:chat/utils/app_navigator.dart'; import 'package:chat/utils/app_navigator.dart';
import 'package:chat/utils/blacklist_mgr.dart';
import 'package:chat/utils/conversation_table.dart'; import 'package:chat/utils/conversation_table.dart';
import 'package:chat/utils/friend_list_mgr.dart'; import 'package:chat/utils/friend_list_mgr.dart';
import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/msgHandler.dart';
@@ -447,9 +449,6 @@ class _ProfilePageState extends State<ProfilePage>
data['sign'] = TokenMgr().getSign(data); data['sign'] = TokenMgr().getSign(data);
Response res = await HttpUtil().post('user/personal/album', data: data); Response res = await HttpUtil().post('user/personal/album', data: data);
if (res == null) {
return;
}
Map resData = res.data; Map resData = res.data;
if (resData['code'] == 0) { if (resData['code'] == 0) {
imgList = resData['data'] == null ? [] : resData['data']; imgList = resData['data'] == null ? [] : resData['data'];
@@ -1148,40 +1147,22 @@ class _ProfilePageState extends State<ProfilePage>
top: 20, top: 20,
child: InkWell( child: InkWell(
onTap: () async { onTap: () async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 0,
"followUserId": userInfo.userId,
};
data['sign'] = TokenMgr().getSign(data);
if (!userInfo.isLike) { if (!userInfo.isLike) {
Response res = await HttpUtil().post(
'userfollow/follow/insert',
data: data,
isShowLoading: true);
Map resData = res.data;
if (resData['code'] == 0) {
HttpUtil().setLove(userInfo.userId, () {
MessageMgr().emit('refresh_love_list', MessageMgr().emit('refresh_love_list',
{'UserId': userInfo.userId, 'flag': 0}); {'UserId': userInfo.userId, 'flag': 0});
setState(() { setState(() {
userInfo.isLike = true; userInfo.isLike = true;
}); });
showToast(resData['msg']);
}
});
} else { } else {
Response res = await HttpUtil().post(
'userfollow/follow/cancel',
data: data,
isShowLoading: true);
Map resData = res.data;
if (resData['code'] == 0) {
HttpUtil().cancleLove(userInfo.userId, () {
MessageMgr().emit('refresh_love_list', MessageMgr().emit('refresh_love_list',
{'UserId': userInfo.userId, 'flag': 2}); {'UserId': userInfo.userId, 'flag': 2});
setState(() { setState(() {
userInfo.isLike = false; userInfo.isLike = false;
}); });
showToast(resData['msg']);
}
});
} }
}, },
child: Container( child: Container(
@@ -1445,20 +1426,10 @@ class _ProfilePageState extends State<ProfilePage>
context, I18n.of(context).blacklist_choose, I18n.of(context).determine, context, I18n.of(context).blacklist_choose, I18n.of(context).determine,
() async { () async {
Navigator.pop(context); Navigator.pop(context);
Map data = {
"userid": UserData().basicInfo.userId,
"type": 1,
"followUserId": userInfo.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) {
HttpUtil().blackUser(userInfo.userId, () {
isblack = true; isblack = true;
}
});
}); });
} }
@@ -2177,19 +2148,25 @@ class _ProfilePageState extends State<ProfilePage>
showDivider: false, showDivider: false,
showRightIcon: false, showRightIcon: false,
onPressed: () async { onPressed: () async {
Map data = {
"userId": UserData().basicInfo.userId,
};
data['sign'] = TokenMgr().getSign(data);
Response res =
await HttpUtil().post('user/recover/photos', data: data);
Map resData = res.data;
if (resData['code'] == 0) {
CustomUI.buildOneConfirm(
context,
I18n.of(context).confrim_recovery,
I18n.of(context).determine, () async {
Map data = {
"userId": UserData().basicInfo.userId,
};
data['sign'] = TokenMgr().getSign(data);
Response res = await HttpUtil().post('user/recover/photos',
data: data, isShowLoading: true);
Map resData = res.data;
if (resData['code'] == 0) {
showToast(resData['msg']); showToast(resData['msg']);
userInfo.burnNum = 0;
setState(() {});
}
Navigator.of(context).pop();
userInfo.burnNum = 0;
setState(() {});
}
});
}, },
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -2457,24 +2434,11 @@ class _ProfilePageState extends State<ProfilePage>
), ),
onTap: isblack onTap: isblack
? () async { ? () async {
Map data = {
"userid":
UserData().basicInfo.userId,
"type": 1,
"followUserId": userInfo.userId,
};
data['sign'] =
TokenMgr().getSign(data);
Response res = await HttpUtil().post(
'userfollow/follow/cancel',
data: data);
Map resData = res.data;
if (resData['code'] == 0) {
HttpUtil().cancleBlackUser(
userInfo.userId, () {
Navigator.of(context).pop(); Navigator.of(context).pop();
isblack = false; isblack = false;
showToast(resData['msg']);
}
});
} }
: _buildConfirmBlack, : _buildConfirmBlack,
), ),
@@ -2691,6 +2655,16 @@ class _ProfilePageState extends State<ProfilePage>
return; return;
} }
if (BlacklistMgr.isBlaklistMe(userInfo.userId)) {
showToast(I18n.of(context).you_are_blaklisted);
return;
}
if (BlacklistMgr.isInMyblaklist(userInfo.userId)) {
showToast(I18n.of(context).reject_message);
return;
}
//对方关闭陌生人消息,则提示 //对方关闭陌生人消息,则提示
if (!userInfo.isCanStrangerNews) { if (!userInfo.isCanStrangerNews) {
showToast(I18n.of(context).stranger_close_tips); showToast(I18n.of(context).stranger_close_tips);


+ 6
- 4
lib/home/ProgramDetail.dart Vedi File

@@ -111,7 +111,7 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget appBar = new AppBar( Widget appBar = new AppBar(
backgroundColor: AppColors.NewAppbarBgColor,
//backgroundColor: AppColors.NewAppbarBgColor,
title: new Text( title: new Text(
isProgram isProgram
? I18n.of(context).program_details ? I18n.of(context).program_details
@@ -119,13 +119,14 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> {
textScaleFactor: 1.0, textScaleFactor: 1.0,
style: TextStyle(color: AppColors.NewAppbarTextColor), style: TextStyle(color: AppColors.NewAppbarTextColor),
), ),
elevation: 1,
leading: CustomUI.buildCustomLeading(context), leading: CustomUI.buildCustomLeading(context),
centerTitle: true, centerTitle: true,
); );
var content = new Scaffold( var content = new Scaffold(
key: registKey, key: registKey,
appBar: appBar, appBar: appBar,
backgroundColor: Colors.white,
//backgroundColor: Colors.white,
body: SafeArea( body: SafeArea(
child: Center( child: Center(
child: Container( child: Container(
@@ -213,7 +214,7 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> {
} }
} }
double fontSize = 13.5;
double fontSize = 14;
//1.不是发布者 //1.不是发布者
//1.1是评论者则没有选项 //1.1是评论者则没有选项
@@ -552,7 +553,8 @@ class _ProgramDetailPageState extends State<ProgramDetailPage> {
list.add(button); list.add(button);
} }
return Container( return Container(
margin: EdgeInsets.only(left: 23, top: 10, right: 8, bottom: 10),
padding: EdgeInsets.only(left: 23, top: 10, right: 8, bottom: 10),
color: Colors.white,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: list, children: list,


+ 1
- 1
lib/home/SearchPage.dart Vedi File

@@ -175,7 +175,7 @@ class _SearchPageState extends State<SearchPage> {
child: Stack( child: Stack(
children: <Widget>[ children: <Widget>[
SmartRefresher( SmartRefresher(
enablePullDown: true,
enablePullDown: list.length > 0,
enablePullUp: true, enablePullUp: true,
header: MaterialClassicHeader(), header: MaterialClassicHeader(),
footer: CustomUI.buildLoadingFooter(), footer: CustomUI.buildLoadingFooter(),


+ 2
- 13
lib/home/WhiteAndBlackList.dart Vedi File

@@ -164,17 +164,7 @@ class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> {
Expanded(child: Container()), Expanded(child: Container()),
InkWell( InkWell(
onTap: () async { onTap: () async {
var data = {
"userid": UserData().basicInfo.userId,
"type": 1,
"followUserId": userInfo['FollowUserId'],
};
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) {
HttpUtil().cancleBlackUser(userInfo.userId, () {
for (int i = 0; i < list.length; i++) { for (int i = 0; i < list.length; i++) {
if (list[i]['FollowUserId'] == userInfo['FollowUserId']) { if (list[i]['FollowUserId'] == userInfo['FollowUserId']) {
setState(() { setState(() {
@@ -183,8 +173,7 @@ class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> {
break; break;
} }
} }
showToast(resData['msg']);
}
});
}, },
child: Container( child: Container(
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10.5), padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10.5),


+ 2
- 2
lib/home/create_group_view.dart Vedi File

@@ -510,7 +510,7 @@ class _CreateGroupPageState extends State<CreateGroupPage> {
actions: <Widget>[ actions: <Widget>[
InkWell( InkWell(
child: Padding( child: Padding(
padding: EdgeInsets.only(right: 15, top: 14, bottom: 14),
padding: EdgeInsets.only(right: 12, top: 14, bottom: 14),
child: Consumer<GroupSelectProvider>( child: Consumer<GroupSelectProvider>(
builder: (context, counter, child) => Container( builder: (context, counter, child) => Container(
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -525,7 +525,7 @@ class _CreateGroupPageState extends State<CreateGroupPage> {
? Colors.red ? Colors.red
: const Color(0xFF3875E9)), : const Color(0xFF3875E9)),
), ),
padding: EdgeInsets.symmetric(horizontal: 18),
padding: EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.center, alignment: Alignment.center,
child: fixedText( child: fixedText(
(widget.pageType == (widget.pageType ==


+ 2
- 2
lib/home/daily_bonus_page.dart Vedi File

@@ -526,8 +526,8 @@ class DailyBouusState extends State with SingleTickerProviderStateMixin {
height: 37, height: 37,
child: Image.asset( child: Image.asset(
R.assetsImagesImgFyj, R.assetsImagesImgFyj,
width: needAnimate ? animation.value * 24 : 24,
height: needAnimate ? animation.value * 24 : 24,
width: needAnimate ? animation.value * 17 : 17,
height: needAnimate ? animation.value * 17 : 17,
), ),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(isEnough ? 0xff2D81FF : 0xffCBCBCB), color: Color(isEnough ? 0xff2D81FF : 0xffCBCBCB),


+ 0
- 4
lib/home/friend_page.dart Vedi File

@@ -215,10 +215,6 @@ class _FriendPageState extends State<FriendPage> {
Response res = Response res =
await HttpUtil().post('friendship/newFriends/record', data: data); await HttpUtil().post('friendship/newFriends/record', data: data);
if (res == null) {
return;
}
var resData = res.data; var resData = res.data;
if (resData['code'] == 0) { if (resData['code'] == 0) {
if (resData['data'] != null) { if (resData['data'] != null) {


+ 2
- 2
lib/home/homeMain.dart Vedi File

@@ -12,7 +12,7 @@ import 'package:chat/utils/LoadingDialog.dart';
import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/TokenMgr.dart';
import 'package:chat/utils/app_navigator.dart'; import 'package:chat/utils/app_navigator.dart';
import 'package:chat/utils/file_preview_local.dart';
import 'package:chat/utils/file_transfer_page.dart';
import 'package:chat/utils/local_notification_util.dart'; import 'package:chat/utils/local_notification_util.dart';
import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/msgHandler.dart';
import 'package:chat/utils/receive_share_file.dart'; import 'package:chat/utils/receive_share_file.dart';
@@ -256,7 +256,7 @@ class _HomeMainState extends State<HomeMain> {
Navigator.of(LoadingManage.context).push( Navigator.of(LoadingManage.context).push(
new MaterialPageRoute( new MaterialPageRoute(
builder: (context) { builder: (context) {
return FilePreview(data);
return FileTransferPage(data);
}, },
), ),
); );


+ 19
- 0
lib/home/last_chat_item.dart Vedi File

@@ -41,6 +41,8 @@ class _LastChatItemState extends State<LastChatItem> {
lastMessageModel = widget.lastMessageModel; lastMessageModel = widget.lastMessageModel;
initUserInfo(); initUserInfo();
// initUserInfo();
// initUserInfo();
MessageMgr().on('UpdateUserInfo', msgUpdateUserInfo); MessageMgr().on('UpdateUserInfo', msgUpdateUserInfo);
} }
@@ -160,5 +162,22 @@ class _LastChatItemState extends State<LastChatItem> {
enterType: widget.enterType, enterContent: widget.enterContent); 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();
// }
// });
} }
} }

+ 2
- 2
lib/home/last_chat_record_widget.dart Vedi File

@@ -17,7 +17,7 @@ import 'package:permission_handler/permission_handler.dart';
class LastChatPage extends StatefulWidget { class LastChatPage extends StatefulWidget {
final bool needRobot; final bool needRobot;
final int enterType; // 0默认 1图片 2转发消息
final int enterType; // 0默认 1图片
final dynamic enterContent; final dynamic enterContent;
LastChatPage({this.needRobot = true, this.enterType = 0, this.enterContent}); LastChatPage({this.needRobot = true, this.enterType = 0, this.enterContent});
@@ -110,7 +110,7 @@ class _LastChatPageState extends State<LastChatPage> {
: Container(), : Container(),
NetStateWidget(), NetStateWidget(),
widget.needRobot ? _translateRobot() : Container(), widget.needRobot ? _translateRobot() : Container(),
_CompanyServer(),
//_CompanyServer(),
lastMsgList.length == 0 lastMsgList.length == 0
? _emptyContent() ? _emptyContent()
: _chatRecordsList(lastMsgList) : _chatRecordsList(lastMsgList)


+ 1
- 0
lib/home/money_detail.dart Vedi File

@@ -8,6 +8,7 @@ import 'package:chat/data/conversation.dart';
import 'package:chat/generated/i18n.dart'; import 'package:chat/generated/i18n.dart';
import 'package:chat/home/InfoList.dart'; import 'package:chat/home/InfoList.dart';
import 'package:chat/home/ProfilePage.dart'; import 'package:chat/home/ProfilePage.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/utils/CustomUI.dart'; import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart'; import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/TokenMgr.dart'; import 'package:chat/utils/TokenMgr.dart';


+ 9
- 6
lib/home/my_qr.dart Vedi File

@@ -89,12 +89,15 @@ class MyQr extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Row( Row(
children: <Widget>[ children: <Widget>[
Text(name,
textScaleFactor: 1.0,
style: TextStyle(
color: Constants.BlackTextColor,
fontWeight: FontWeight.w500,
fontSize: 16)),
Container(
constraints: BoxConstraints(maxWidth: 170),
child: Text(name,
textScaleFactor: 1.0,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Constants.BlackTextColor,
fontWeight: FontWeight.w500,
fontSize: 16))),
SizedBox(width: 5), SizedBox(width: 5),
Icon( Icon(
IconData( IconData(


+ 10
- 1
lib/main.dart Vedi File

@@ -22,6 +22,7 @@ import 'package:chat/utils/local_notification_util.dart';
import 'package:chat/utils/msgHandler.dart'; import 'package:chat/utils/msgHandler.dart';
import 'package:chat/utils/receive_share_file.dart'; import 'package:chat/utils/receive_share_file.dart';
import 'package:chat/utils/screen.dart'; import 'package:chat/utils/screen.dart';
import 'package:chat/utils/screen_shot.dart';
import 'package:chat/utils/sound_util.dart'; import 'package:chat/utils/sound_util.dart';
import 'package:chat/utils/sp_utils.dart'; import 'package:chat/utils/sp_utils.dart';
import 'package:chat/utils/sql_util.dart'; import 'package:chat/utils/sql_util.dart';
@@ -53,7 +54,7 @@ initLocalData() async {
var localUserId = prefs.getInt(Constants.LocalUserId); var localUserId = prefs.getInt(Constants.LocalUserId);
if (localUserId != null) { if (localUserId != null) {
print('aaaaa用户不为空');
print('用户不为空');
//设置用户基本信息 //设置用户基本信息
UserData().basicInfo.userId = localUserId; UserData().basicInfo.userId = localUserId;
String localUserData = await SPUtils.get(Constants.LocalUsrInfo); String localUserData = await SPUtils.get(Constants.LocalUsrInfo);
@@ -235,6 +236,11 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
I18n.onLocaleChanged = onLocaleChange; I18n.onLocaleChanged = onLocaleChange;
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
ReceiveShareFile.init(); ReceiveShareFile.init();
ScreenShot.getFileStream();
} }
isAvailableAppleSignIn() async { isAvailableAppleSignIn() async {
@@ -288,6 +294,9 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
MessageMgr().emit( MessageMgr().emit(
'Receive AudioChat Request', MsgHandler.audioChatRequestFriendId); 'Receive AudioChat Request', MsgHandler.audioChatRequestFriendId);
} }
break; break;
case AppLifecycleState.paused: // 应用程序不可见,后台 case AppLifecycleState.paused: // 应用程序不可见,后台
print('切换到后台'); print('切换到后台');


+ 1
- 1
lib/utils/ChargeMoney.dart Vedi File

@@ -219,7 +219,7 @@ class PayWayContentState extends State<PayWayContent> {
webPage: url, webPage: url,
title: '点我代付[${widget.money}元]', title: '点我代付[${widget.money}元]',
thumbnail: thumbnail:
"http://testcyhd.chengyouhd.com/Upload/default/ic_launcher.png",
"http://datasm.chengyouhd.com/Upload/default/icon120.png",
description: '[${UserData().basicInfo.nickName}]正在购买H币,点击帮我支付吧'); description: '[${UserData().basicInfo.nickName}]正在购买H币,点击帮我支付吧');
fluwx.share(model); fluwx.share(model);
} }


+ 20
- 16
lib/utils/CustomUI.dart Vedi File

@@ -1109,23 +1109,27 @@ class CustomUI {
if (height == null) { if (height == null) {
height = MediaQuery.of(context).size.height * 0.8; height = MediaQuery.of(context).size.height * 0.8;
} }
return Container(
width: MediaQuery.of(context).size.width,
height: height,
alignment: Alignment.topCenter,
return InkWell(
onTap: null,
child: Container( 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: 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,
),
)));
} }
static Widget buildLoadingFooter() { static Widget buildLoadingFooter() {


+ 98
- 5
lib/utils/HttpUtil.dart Vedi File

@@ -17,6 +17,7 @@ import 'package:chat/proto/all.pbserver.dart';
import 'package:chat/utils/LoadingDialog.dart'; import 'package:chat/utils/LoadingDialog.dart';
import 'package:chat/utils/MessageMgr.dart'; import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/NetUtil.dart'; import 'package:chat/utils/NetUtil.dart';
import 'package:chat/utils/blacklist_mgr.dart';
import 'package:chat/utils/friend_list_mgr.dart'; import 'package:chat/utils/friend_list_mgr.dart';
import 'package:chat/utils/image_util.dart'; import 'package:chat/utils/image_util.dart';
import 'package:chat/utils/local_notification_util.dart'; import 'package:chat/utils/local_notification_util.dart';
@@ -281,6 +282,15 @@ class HttpUtil {
print('用户信息resData $resData'); print('用户信息resData $resData');
if (resData['code'] == 0) { if (resData['code'] == 0) {
var info = UserInfo.fromJson(resData['data']); var info = UserInfo.fromJson(resData['data']);
info.isBlackened
? BlacklistMgr.addBlackListMe(info.userId)
: BlacklistMgr.removeBalckListMe(info.userId);
info.isBlackList
? BlacklistMgr.addMyBlackList(info.userId)
: BlacklistMgr.removeMyBalckList(info.userId);
friendCache[friendId] = info; friendCache[friendId] = info;
FriendListMgr().updateFriendInfo(info); FriendListMgr().updateFriendInfo(info);
UserInfoTable().insertUser(info); UserInfoTable().insertUser(info);
@@ -343,6 +353,15 @@ class HttpUtil {
if (resData['code'] == 0) { if (resData['code'] == 0) {
var info = UserInfo.fromJson(resData['data']); var info = UserInfo.fromJson(resData['data']);
info.isBlackened
? BlacklistMgr.addBlackListMe(info.userId)
: BlacklistMgr.removeBalckListMe(info.userId);
info.isBlackList
? BlacklistMgr.addMyBlackList(info.userId)
: BlacklistMgr.removeMyBalckList(info.userId);
FriendListMgr().updateFriendInfo(info); FriendListMgr().updateFriendInfo(info);
friendCache[info.userId] = info; friendCache[info.userId] = info;
MessageMgr().emit('UpdateUserInfo', info); MessageMgr().emit('UpdateUserInfo', info);
@@ -1184,8 +1203,8 @@ class HttpUtil {
//根据经纬度获取用户国家城市 //根据经纬度获取用户国家城市
getAddress(double lon, double lat) async { getAddress(double lon, double lat) async {
Map data = { Map data = {
"lon": lon,
"lat": lat,
"lon": lon.toString(),
"lat": lat.toString(),
}; };
data['sign'] = TokenMgr().getSign(data); data['sign'] = TokenMgr().getSign(data);
data['language'] = UserData().language; data['language'] = UserData().language;
@@ -1225,13 +1244,13 @@ class HttpUtil {
} }
} }
//根据经纬度获取用户国家城市
//根据经纬度更新当前城市
changeCurrentCity(double lon, double lat, callback) async { changeCurrentCity(double lon, double lat, callback) async {
if (UserData().basicInfo.userId == null) return; if (UserData().basicInfo.userId == null) return;
Map data = { Map data = {
"userId": UserData().basicInfo.userId, "userId": UserData().basicInfo.userId,
"lon": lon,
"lat": lat,
"lon": lon.toString(),
"lat": lat.toString(),
}; };
data['sign'] = TokenMgr().getSign(data); data['sign'] = TokenMgr().getSign(data);
@@ -1262,6 +1281,80 @@ class HttpUtil {
} }
} }
//拉黑用户
blackUser(int userId, callback) async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 1,
"followUserId": 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) {
BlacklistMgr.addMyBlackList(userId);
callback();
}
}
//取消拉黑用户
cancleBlackUser(int userId, callback) async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 1,
"followUserId": userId,
};
data['sign'] = TokenMgr().getSign(data);
Response res = await HttpUtil()
.post('userfollow/follow/cancel', data: data, isShowLoading: true);
Map resData = res.data;
showToast(resData['msg']);
if (resData['code'] == 0) {
BlacklistMgr.removeMyBalckList(userId);
callback();
}
}
//收藏用户
setLove(int userId, callback) async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 0,
"followUserId": 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) {
showToast(resData['msg']);
callback();
}
}
//取消收藏用户
cancleLove(int userId, callback) async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 0,
"followUserId": 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) {
showToast(resData['msg']);
callback();
}
}
//向企业服务助手提交信息 //向企业服务助手提交信息
Future<bool> commitInfoToCompany(MsgModel msgModel) async { Future<bool> commitInfoToCompany(MsgModel msgModel) async {
Map data = { Map data = {


+ 2
- 12
lib/utils/MessageBox.dart Vedi File

@@ -85,17 +85,7 @@ class _MessageBoxState extends State<MessageBox> {
), ),
); );
} else if (str == 'black') { } else if (str == 'black') {
var data = {
"userid": UserData().basicInfo.userId,
"type": 1,
"followUserId": userId,
};
data['sign'] = TokenMgr().getSign(data);
Response res =
await HttpUtil().post('userfollow/follow/insert', data: data);
Map resData = res.data;
showToast(resData['msg']);
HttpUtil().blackUser(userId, () {});
} else if (str == 'noContent') { } else if (str == 'noContent') {
var data = { var data = {
"userId": UserData().basicInfo.userId, "userId": UserData().basicInfo.userId,
@@ -491,7 +481,7 @@ class _MessageBoxState extends State<MessageBox> {
_buildTimebox(data), _buildTimebox(data),
_buildImgSet(data), _buildImgSet(data),
_buildImgList(data), _buildImgList(data),
_buildDivder(),
widget.isDetail ? Container() : _buildDivder(),
_buildIconButtonList(data), _buildIconButtonList(data),
//_buildContent(), //_buildContent(),
], ],


+ 3
- 3
lib/utils/NetUtil.dart Vedi File

@@ -160,7 +160,7 @@ class NetWork {
loginTimer?.cancel(); loginTimer?.cancel();
MsgHandler.flushCacheMsg(); MsgHandler.flushCacheMsg();
UploadUtil().setUploadUrl(msgContent.httpAddr); UploadUtil().setUploadUrl(msgContent.httpAddr);
GroupInfoMgr().checkGroupValid();
GroupInfoMgr().checkGroupValid();
} else { } else {
_stateBloc.addState(ChatState.loginFailed); _stateBloc.addState(ChatState.loginFailed);
print('登录失败${msgContent.errorCode}'); print('登录失败${msgContent.errorCode}');
@@ -323,7 +323,7 @@ class NetWork {
connectServerTimer?.cancel(); connectServerTimer?.cancel();
if (channel != null) { if (channel != null) {
await channel.sink.close();
await channel.sink.close();
channel = null; channel = null;
} }
}); });
@@ -415,7 +415,7 @@ class NetWork {
//清缓存 //清缓存
ChatDataMgr().logout(); ChatDataMgr().logout();
MsgHandler.clear(); MsgHandler.clear();
isNormalClose = true; isNormalClose = true;
close(); close();
} }


+ 212
- 254
lib/utils/TempUserCard.dart Vedi File

@@ -38,31 +38,29 @@ class TempUserCard extends StatelessWidget {


TempUserCard( TempUserCard(
{Key key, {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); : super(key: key);



@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

bool isVIP = member > 0; bool isVIP = member > 0;
bool isSVIP = member == 2; bool isSVIP = member == 2;


@@ -72,27 +70,27 @@ class TempUserCard extends StatelessWidget {
return Stack( return Stack(
children: <Widget>[ children: <Widget>[
Container( Container(
height: height-40,
width: height-40,
height: height - 40,
width: height - 40,
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.only( borderRadius: BorderRadius.only(
topLeft: Radius.circular(15), topLeft: Radius.circular(15),
topRight: Radius.circular(15)), topRight: Radius.circular(15)),
child: headUrl == '' || headUrl == null child: headUrl == '' || headUrl == null
? Image.asset( ? Image.asset(
Constants.DefaultHeadImgUrl,
width: height-40,
height: height-40,
)
Constants.DefaultHeadImgUrl,
width: height - 40,
height: height - 40,
)
: CachedNetworkImage( : 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( Positioned(
left: 0, left: 0,
@@ -102,16 +100,15 @@ class TempUserCard extends StatelessWidget {
width: 54, width: 54,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.black54, color: Colors.black54,
borderRadius: BorderRadius.only(

topRight: Radius.circular(10))),
borderRadius:
BorderRadius.only(topRight: Radius.circular(10))),
child: Row( child: Row(
//mainAxisAlignment: MainAxisAlignment.spaceEvenly, //mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[ children: <Widget>[
Padding( Padding(
padding: EdgeInsets.only(left: 6), padding: EdgeInsets.only(left: 6),
child: child:
Icon(Icons.image, size: 15, color: Colors.white)),
Icon(Icons.image, size: 15, color: Colors.white)),
Padding( Padding(
padding: EdgeInsets.only(left: 5, top: 2), padding: EdgeInsets.only(left: 5, top: 2),
child: fixedText(imgNum.toString(), child: fixedText(imgNum.toString(),
@@ -132,87 +129,25 @@ class TempUserCard extends StatelessWidget {
fontSize: 15), fontSize: 15),
isReal && sex == 2 isReal && sex == 2
? Container( ? 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(), : Container(),
isVIP && sex == 1 isVIP && sex == 1
? Container( ? Container(
margin: EdgeInsets.only(left: 5),
child: isSVIP ? Constants.svipIcon : Constants.vipIcon)
margin: EdgeInsets.only(left: 5),
child: isSVIP ? Constants.svipIcon : Constants.vipIcon)
: Container(), : 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() { Widget otherWidget() {
var greyColor = const Color(0xFFB2B2B2); var greyColor = const Color(0xFFB2B2B2);
@@ -223,8 +158,8 @@ class TempUserCard extends StatelessWidget {
title: hiddenDistince title: hiddenDistince
? I18n.of(context).secrecy ? I18n.of(context).secrecy
: (UserData().hasLocationPermission : (UserData().hasLocationPermission
? WebData().getDistanceString(distance)
: I18n.of(context).unknown),
? WebData().getDistanceString(distance)
: I18n.of(context).unknown),
titleColor: greyColor, titleColor: greyColor,
isDivider: true), isDivider: true),
InfoTile( InfoTile(
@@ -233,24 +168,24 @@ class TempUserCard extends StatelessWidget {
isDivider: payImg || isHidden), isDivider: payImg || isHidden),
isHidden isHidden
? InfoTile( ? 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(), : Container(),
payImg payImg
? InfoTile( ? 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(), : Container(),
], ],
); );
@@ -275,125 +210,148 @@ 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 {
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,),



],),),





],
),),));
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,
),
],
),
),
],
),
),
));
} }
} }


@@ -410,12 +368,12 @@ class InfoTile extends StatelessWidget {


const InfoTile( const InfoTile(
{Key key, {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); : super(key: key);


@override @override


+ 5
- 24
lib/utils/UserCard.dart Vedi File

@@ -277,35 +277,16 @@ class UserCard extends StatelessWidget {
isActive: isLove, isActive: isLove,
size: 16, size: 16,
onTap: (bool isActive) async { onTap: (bool isActive) async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 0,
"followUserId": this.userId,
};
data['sign'] = TokenMgr().getSign(data);
if (isActive) { 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) {
HttpUtil().setLove(userId, () {
MessageMgr().emit('refresh_love_list', MessageMgr().emit('refresh_love_list',
{'UserId': userId, 'flag': 0}); {'UserId': userId, 'flag': 0});
showToast(resData['msg']);
}
});
} else { } else {
Response res = await HttpUtil().post(
'userfollow/follow/cancel',
data: data,
isShowLoading: true);
Map resData = res.data;
if (resData['code'] == 0) {
HttpUtil().cancleLove(userId, () {
MessageMgr().emit('refresh_love_list', MessageMgr().emit('refresh_love_list',
{'UserId': userId, 'flag': 2}); {'UserId': userId, 'flag': 2});
showToast(resData['msg']);
}
});
} }
}), }),
right: 0, right: 0,
@@ -362,7 +343,7 @@ class InfoTile extends StatelessWidget {
Container( Container(
alignment: Alignment.bottomCenter, alignment: Alignment.bottomCenter,
constraints: BoxConstraints(minHeight: 17), constraints: BoxConstraints(minHeight: 17),
padding: EdgeInsets.only(right: 5,bottom: 1.5),
padding: EdgeInsets.only(right: 5, bottom: 1.5),
child: Text(title, child: Text(title,
textScaleFactor: 1.0, textScaleFactor: 1.0,
style: TextStyle( style: TextStyle(


+ 11
- 30
lib/utils/app_navigator.dart Vedi File

@@ -10,7 +10,6 @@ import 'package:chat/home/ProfilePage.dart';
import 'package:chat/home/SearchPage.dart'; import 'package:chat/home/SearchPage.dart';
import 'package:chat/home/audio_chat_view.dart'; import 'package:chat/home/audio_chat_view.dart';
import 'package:chat/home/create_group_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_all_member.dart';
import 'package:chat/home/group_qr_view.dart'; import 'package:chat/home/group_qr_view.dart';
import 'package:chat/home/homeMain.dart'; import 'package:chat/home/homeMain.dart';
@@ -100,36 +99,23 @@ 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); 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); 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,));
} }
//客服 //客服
@@ -143,7 +129,7 @@ class AppNavigator {
} }
//群聊二维码 //群聊二维码
static pushGroupQrPage(BuildContext context, GroupInfoModel model) {
static pushGroupQrPage(BuildContext context,GroupInfoModel model) {
AppNavigator.push(context, GroupQrPage(model)); AppNavigator.push(context, GroupQrPage(model));
} }
@@ -219,7 +205,7 @@ class AppNavigator {
AppNavigator.push(context, TranslateRobotPage()); AppNavigator.push(context, TranslateRobotPage());
} }
//进入反馈小助手页面
//进入反馈小助手页面
static pushCompanyServerPage(BuildContext context) { static pushCompanyServerPage(BuildContext context) {
AppNavigator.push(context, CompanyServerPage()); AppNavigator.push(context, CompanyServerPage());
} }
@@ -229,10 +215,5 @@ class AppNavigator {
BuildContext context, List<FriendModel> friendList) { BuildContext context, List<FriendModel> friendList) {
AppNavigator.push( AppNavigator.push(
context, CreateGroupPage(GroupOperatingPageType.CreateGroup, [], null)); context, CreateGroupPage(GroupOperatingPageType.CreateGroup, [], null));
}
//发起群聊界面
static pushForwardPage(BuildContext context, MsgModel msg) {
AppNavigator.push(context, ForwardPage(msg));
} }
} }

+ 1
- 1
lib/utils/file_transfer_page.dart Vedi File

@@ -51,7 +51,7 @@ class FileTransferPageState extends State<FileTransferPage>
Widget appBar = new AppBar( Widget appBar = new AppBar(
backgroundColor: AppColors.NewAppbarBgColor, backgroundColor: AppColors.NewAppbarBgColor,
title: new Text( title: new Text(
'发送给',//I18n.of(context).send_to,
I18n.of(context).send_to,
style: TextStyle(color: AppColors.NewAppbarTextColor), style: TextStyle(color: AppColors.NewAppbarTextColor),
textScaleFactor: 1.0, textScaleFactor: 1.0,
), ),


+ 1
- 0
lib/utils/local_notification_util.dart Vedi File

@@ -6,6 +6,7 @@ import 'package:chat/data/UserData.dart';
import 'package:chat/generated/i18n.dart'; import 'package:chat/generated/i18n.dart';
import 'package:chat/home/InfoList.dart'; import 'package:chat/home/InfoList.dart';
import 'package:chat/home/ProgramDetail.dart'; import 'package:chat/home/ProgramDetail.dart';
import 'package:chat/home/rich_title.dart';
import 'package:chat/models/received_notification.dart'; import 'package:chat/models/received_notification.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';


+ 11
- 7
lib/utils/msgHandler.dart Vedi File

@@ -12,6 +12,7 @@ import 'package:chat/models/ChatMsg.dart';
import 'package:chat/models/group_info_model.dart'; import 'package:chat/models/group_info_model.dart';
import 'package:chat/proto/all.pbserver.dart'; import 'package:chat/proto/all.pbserver.dart';
import 'package:chat/utils/NetUtil.dart'; import 'package:chat/utils/NetUtil.dart';
import 'package:chat/utils/blacklist_mgr.dart';
import 'package:chat/utils/friend_list_mgr.dart'; import 'package:chat/utils/friend_list_mgr.dart';
import 'package:chat/utils/group_member_model.dart'; import 'package:chat/utils/group_member_model.dart';
import 'package:chat/utils/local_notification_util.dart'; import 'package:chat/utils/local_notification_util.dart';
@@ -217,7 +218,6 @@ class MsgHandler {
print('消息包大小超过3M'); print('消息包大小超过3M');
} }
//本地文件为空或者等发送成功之后才可以发送
if (msg.localFile == null || msg.state >= MsgState.Uploaded) { if (msg.localFile == null || msg.state >= MsgState.Uploaded) {
Future.delayed(Duration(seconds: 60), () { Future.delayed(Duration(seconds: 60), () {
if (msg.state != MsgState.SendingSuccess) { if (msg.state != MsgState.SendingSuccess) {
@@ -239,7 +239,6 @@ class MsgHandler {
seq.targetId = curActiveSession; seq.targetId = curActiveSession;
if (curActiveSession == 10000) { if (curActiveSession == 10000) {
seq.channelType = ChatChannelType.CSD; seq.channelType = ChatChannelType.CSD;
} else { } else {
seq.channelType = seq.channelType =
@@ -528,12 +527,7 @@ class MsgHandler {
msgModel.state = MsgState.DownloadFailed; msgModel.state = MsgState.DownloadFailed;
} }
} }
if (msgModel.sessionId == 10000 ) {
print('收到反馈小助手消息');
}
if (msgModel.sessionId == curActiveSession) { if (msgModel.sessionId == curActiveSession) {
MessageMgr().emit('New Chat Message', msgModel.sessionId); MessageMgr().emit('New Chat Message', msgModel.sessionId);
} }
} }
@@ -923,6 +917,16 @@ class MsgHandler {
), (route) => route == null); ), (route) => route == null);
NetWork().singOut(); NetWork().singOut();
UserData().reset(); UserData().reset();
break;
case 'blacklist':
String messageJson = map['message'];
Map messageMap = json.decode(messageJson);
if (messageMap['Status'] == 0) {
BlacklistMgr.addBlackListMe(messageMap['UserId']);
} else {
BlacklistMgr.removeBalckListMe(messageMap['UserId']);
}
break; break;
} }


+ 8
- 24
lib/utils/receive_share_file.dart Vedi File

@@ -9,8 +9,6 @@ class ReceiveShareFile {
static List<SharedMediaFile> _sharedFiles; static List<SharedMediaFile> _sharedFiles;
static String tempFilePath; static String tempFilePath;


static int mLastClickTime = 0;
static final int TIME_INTERVAL = 3000;


static void init() { static void init() {
// For sharing images coming from outside the app while the app is in the memory // For sharing images coming from outside the app while the app is in the memory
@@ -23,12 +21,8 @@ class ReceiveShareFile {
// print('#### getfilePath ${value[0].path}'); // print('#### getfilePath ${value[0].path}');


if (currentIndex == 1) { if (currentIndex == 1) {
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);
}
if (value != null && value.length > 0) {
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path);
} }
} else { } else {
// print("### 记录下来了1"); // print("### 记录下来了1");
@@ -50,14 +44,9 @@ class ReceiveShareFile {
// print('#### getfilePath ${value[0].path}'); // print('#### getfilePath ${value[0].path}');


if (currentIndex == 1) { if (currentIndex == 1) {
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 {}
if (value != null && value.length > 0) {
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value[0].path);
}
} else { } else {
// print("### 记录下来了"); // print("### 记录下来了");
if (value != null && value.length > 0) { if (value != null && value.length > 0) {
@@ -69,11 +58,9 @@ class ReceiveShareFile {
// For sharing or opening urls/text coming from outside the app while the app is in the memory // For sharing or opening urls/text coming from outside the app while the app is in the memory
_intentDataStreamSubscription = _intentDataStreamSubscription =
ReceiveSharingIntent.getTextStream().listen((String value) { ReceiveSharingIntent.getTextStream().listen((String value) {
print('#### getfilePath $value ');
// setState(() {
// _sharedText = value;
// print("Shared: $_sharedText");
// });
print('#### getfilePath dddd $value ');

MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, value);
}, onError: (err) { }, onError: (err) {
print("getLinkStream error: $err"); print("getLinkStream error: $err");
}); });
@@ -100,7 +87,4 @@ class ReceiveShareFile {
static dispose() { static dispose() {
currentIndex = 0; currentIndex = 0;
} }

// if (await CustomUI.showPhotoPermissionSetting(context)) {

} }

+ 6
- 6
lib/utils/screen.dart Vedi File

@@ -63,12 +63,12 @@ fixedText(data, {Color color, double fontSize, FontWeight fontWeight}) {
extendedText(String text, extendedText(String text,
{Color color = Colors.blue, {Color color = Colors.blue,
double fontSize = 14,
selectionEnabled = false,
double emojisize = 20.0,
Function hideKeyboard,
fontWeight,int maxLines,
Function onSpecialTextTap
double fontSize = 14,
selectionEnabled = false,
double emojisize = 20.0,
Function hideKeyboard,
fontWeight,int maxLines,
Function onSpecialTextTap
}) { }) {
return ExtendedText( return ExtendedText(
text, text,


+ 24
- 0
lib/utils/screen_shot.dart Vedi File

@@ -1,3 +1,4 @@
import 'dart:io';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:chat/map/location_result.dart'; import 'package:chat/map/location_result.dart';
@@ -5,9 +6,14 @@ import 'package:chat/utils/screen.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:flutter_image_compress/flutter_image_compress.dart';
import 'MessageMgr.dart';
class ScreenShot { class ScreenShot {
static const MethodChannel _channel = static const MethodChannel _channel =
const MethodChannel('make.photo.screen.hibok'); const MethodChannel('make.photo.screen.hibok');
static const EventChannel eventChannel =
const EventChannel('com.file.hibok');
static Future<List<int>> takeScreenshotImage() async { static Future<List<int>> takeScreenshotImage() async {
Map<String, dynamic> args = <String, dynamic>{}; Map<String, dynamic> args = <String, dynamic>{};
@@ -38,4 +44,22 @@ class ScreenShot {
Map<String, dynamic> args = <String, dynamic>{}; Map<String, dynamic> args = <String, dynamic>{};
return _channel.invokeMethod('isSupportGoogle', args); return _channel.invokeMethod('isSupportGoogle', args);
} }
static getFileStream() {
eventChannel.receiveBroadcastStream().listen((Object agrs){
print('######## receiveBroadcastStream $agrs');
File file = new File(agrs.toString());
if(file.existsSync()){
print('接收到的文件--存在');
MessageMgr().emit(MessageMgr.RECEIVE_THIRD_SHARE, agrs);
}else{
print('接收到的文件--不存在');
}
}, onError: (Object error){
print('######## error $error');
});
}
} }

Caricamento…
Annulla
Salva