jiahao 5 år sedan
förälder
incheckning
d7d9d2e576
40 ändrade filer med 620 tillägg och 998 borttagningar
  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 Visa fil

@@ -17,6 +17,7 @@ import 'package:chat/utils/MessageMgr.dart';
import 'package:chat/utils/TokenMgr.dart';
import 'package:chat/utils/analyze_utils.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/msgHandler.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/models/money_change.dart';
class ChatPage extends StatefulWidget {
final int friendId;
final int enterType; // 0默认 1图片
@@ -194,22 +196,15 @@ class _ChatPageState extends State<ChatPage> {
WidgetsBinding.instance.addPostFrameCallback((_) {
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);
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) {
print('对方是否拉黑你 ${friendInfo.isBlackened}');
if (friendInfo.isBlackened) {
showToast('对方已拉黑了你');
if (BlacklistMgr.isBlaklistMe(friendInfo.userId)) {
showToast(I18n.of(context).you_are_blaklisted);
return;
}
if (friendInfo.isBlackList) {
if (BlacklistMgr.isInMyblaklist(friendInfo.userId)) {
showToast(I18n.of(context).reject_message);
return;
}


+ 0
- 6
lib/chat/ChatPageItem.dart Visa fil

@@ -614,7 +614,6 @@ class _ChatPageItemState extends State<ChatPageItem>
List<String> actions = [
I18n.of(context).delete,
I18n.of(context).reply,
'转发'
];
actionsFunc.add(() {
@@ -624,11 +623,6 @@ 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);


+ 0
- 13
lib/chat/group_chat_view.dart Visa fil

@@ -106,19 +106,6 @@ 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);
}
});
}


+ 37
- 27
lib/chat/util_keyboard.dart Visa fil

@@ -15,6 +15,7 @@ import 'package:chat/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/LoadingDialog.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/msgHandler.dart';
import 'package:chat/utils/screen.dart';
@@ -163,6 +164,16 @@ class UtilKeyboard extends StatelessWidget {
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) {
showToast(I18n.of(context).stranger_close_tips);
@@ -293,39 +304,38 @@ class UtilKeyboard extends StatelessWidget {
int fileSize = file.lengthSync();
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 {


+ 1
- 0
lib/data/UserData.dart Visa fil

@@ -219,6 +219,7 @@ 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);
}
}


+ 61
- 10
lib/generated/i18n.dart Visa fil

@@ -2017,8 +2017,8 @@ class I18n implements WidgetsLocalizations {
String get emoji => "emoji";
/// "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"
String get sign_in => "Sign in";
/// "My scores"
@@ -2351,6 +2351,12 @@ class I18n implements WidgetsLocalizations {
String get not_have_user => "用户不存在";
/// "你不能添加自己"
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 {
@@ -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"
@override
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
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"
@override
String get sign_in => "Báo danh";
@@ -5840,6 +5846,15 @@ class _I18n_vi_VN 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;
@@ -8824,9 +8839,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 => "簽到";
@@ -9325,6 +9340,15 @@ 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;
@@ -12309,9 +12333,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 => "签到";
@@ -12810,6 +12834,15 @@ 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;
@@ -16292,6 +16325,15 @@ 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;
@@ -19276,9 +19318,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 => "サイン";
@@ -19777,6 +19819,15 @@ 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;


+ 5
- 5
lib/home/AddProgram.dart Visa fil

@@ -709,6 +709,7 @@ class _AddProgramState extends State<AddProgram> {
}
void _sendPicture() async {
closeEmojiAction();
var photos = await PhotoPicker.pickAsset(
context: context,
themeColor: Color(0xFFF0F0F0),
@@ -867,8 +868,7 @@ 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 +1157,7 @@ class _AddProgramState extends State<AddProgram> {
.replaceFirst('/s1', UserData().addProgramPrice.toString());
}
return Container(
padding: EdgeInsets.only(bottom: 100),
padding: EdgeInsets.only(bottom: 100, left: 20, right: 20),
child: Text(
str,
textScaleFactor: 1.0,
@@ -1311,8 +1311,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 == ""


+ 1
- 0
lib/home/ConversActionPage.dart Visa fil

@@ -4,6 +4,7 @@ import 'package:chat/data/conversation.dart';
import 'package:chat/generated/i18n.dart';
import 'package:chat/home/InfoList.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/utils/CustomUI.dart';
import 'package:chat/utils/HttpUtil.dart';


+ 0
- 2
lib/home/DiscoverPage.dart Visa fil

@@ -691,8 +691,6 @@ 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)


+ 2
- 1
lib/home/EditData.dart Visa fil

@@ -742,7 +742,8 @@ 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),
true, nickNameController, true, (str) => nickname = str,
inputFormatters: [LengthLimitingTextInputFormatter(20)]),
_buildDivider(),
_bottomBorderBox(I18n.of(context).country, country, false, null,
countryId.length != 0, selectCountry),


+ 1
- 432
lib/home/InfoList.dart Visa fil

@@ -2,6 +2,7 @@ import 'package:chat/data/UserData.dart';
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';
@@ -26,16 +27,6 @@ import 'package:cached_network_image/cached_network_image.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 {
const _ConversationItem(
{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 {
@required


+ 1
- 0
lib/home/MoneyPageOld.dart Visa fil

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


+ 1
- 0
lib/home/Myprogram.dart Visa fil

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


+ 39
- 65
lib/home/ProfilePage.dart Visa fil

@@ -3,6 +3,7 @@ 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';
import 'package:chat/models/money_change.dart';
import 'package:chat/models/ref_name_provider.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/utils/ChargeMoney.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/friend_list_mgr.dart';
import 'package:chat/utils/msgHandler.dart';
@@ -447,9 +449,6 @@ 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'];
@@ -1148,40 +1147,22 @@ class _ProfilePageState extends State<ProfilePage>
top: 20,
child: InkWell(
onTap: () async {
Map data = {
"userid": UserData().basicInfo.userId,
"type": 0,
"followUserId": userInfo.userId,
};
data['sign'] = TokenMgr().getSign(data);
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',
{'UserId': userInfo.userId, 'flag': 0});
setState(() {
userInfo.isLike = true;
});
showToast(resData['msg']);
}
});
} 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',
{'UserId': userInfo.userId, 'flag': 2});
setState(() {
userInfo.isLike = false;
});
showToast(resData['msg']);
}
});
}
},
child: Container(
@@ -1445,20 +1426,10 @@ class _ProfilePageState extends State<ProfilePage>
context, I18n.of(context).blacklist_choose, I18n.of(context).determine,
() async {
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;
}
});
});
}
@@ -2177,19 +2148,25 @@ class _ProfilePageState extends State<ProfilePage>
showDivider: false,
showRightIcon: false,
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']);
userInfo.burnNum = 0;
setState(() {});
}
Navigator.of(context).pop();
userInfo.burnNum = 0;
setState(() {});
}
});
},
),
decoration: BoxDecoration(
@@ -2457,24 +2434,11 @@ class _ProfilePageState extends State<ProfilePage>
),
onTap: isblack
? () 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();
isblack = false;
showToast(resData['msg']);
}
});
}
: _buildConfirmBlack,
),
@@ -2691,6 +2655,16 @@ class _ProfilePageState extends State<ProfilePage>
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) {
showToast(I18n.of(context).stranger_close_tips);


+ 6
- 4
lib/home/ProgramDetail.dart Visa fil

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


+ 1
- 1
lib/home/SearchPage.dart Visa fil

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


+ 2
- 13
lib/home/WhiteAndBlackList.dart Visa fil

@@ -164,17 +164,7 @@ class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> {
Expanded(child: Container()),
InkWell(
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++) {
if (list[i]['FollowUserId'] == userInfo['FollowUserId']) {
setState(() {
@@ -183,8 +173,7 @@ class _WhiteAndBlackPageState extends State<WhiteAndBlackPage> {
break;
}
}
showToast(resData['msg']);
}
});
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 10.5),


+ 2
- 2
lib/home/create_group_view.dart Visa fil

@@ -510,7 +510,7 @@ class _CreateGroupPageState extends State<CreateGroupPage> {
actions: <Widget>[
InkWell(
child: Padding(
padding: EdgeInsets.only(right: 15, top: 14, bottom: 14),
padding: EdgeInsets.only(right: 12, 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: 18),
padding: EdgeInsets.symmetric(horizontal: 10),
alignment: Alignment.center,
child: fixedText(
(widget.pageType ==


+ 2
- 2
lib/home/daily_bonus_page.dart Visa fil

@@ -526,8 +526,8 @@ class DailyBouusState extends State with SingleTickerProviderStateMixin {
height: 37,
child: Image.asset(
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(
color: Color(isEnough ? 0xff2D81FF : 0xffCBCBCB),


+ 0
- 4
lib/home/friend_page.dart Visa fil

@@ -215,10 +215,6 @@ 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) {


+ 2
- 2
lib/home/homeMain.dart Visa fil

@@ -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_preview_local.dart';
import 'package:chat/utils/file_transfer_page.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 FilePreview(data);
return FileTransferPage(data);
},
),
);


+ 19
- 0
lib/home/last_chat_item.dart Visa fil

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

+ 2
- 2
lib/home/last_chat_record_widget.dart Visa fil

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


+ 1
- 0
lib/home/money_detail.dart Visa fil

@@ -8,6 +8,7 @@ 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';
import 'package:chat/utils/HttpUtil.dart';
import 'package:chat/utils/TokenMgr.dart';


+ 9
- 6
lib/home/my_qr.dart Visa fil

@@ -89,12 +89,15 @@ class MyQr extends StatelessWidget {
children: <Widget>[
Row(
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),
Icon(
IconData(


+ 10
- 1
lib/main.dart Visa fil

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


+ 1
- 1
lib/utils/ChargeMoney.dart Visa fil

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


+ 20
- 16
lib/utils/CustomUI.dart Visa fil

@@ -1109,23 +1109,27 @@ class CustomUI {
if (height == null) {
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(
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() {


+ 98
- 5
lib/utils/HttpUtil.dart Visa fil

@@ -17,6 +17,7 @@ import 'package:chat/proto/all.pbserver.dart';
import 'package:chat/utils/LoadingDialog.dart';
import 'package:chat/utils/MessageMgr.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/image_util.dart';
import 'package:chat/utils/local_notification_util.dart';
@@ -281,6 +282,15 @@ class HttpUtil {
print('用户信息resData $resData');
if (resData['code'] == 0) {
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;
FriendListMgr().updateFriendInfo(info);
UserInfoTable().insertUser(info);
@@ -343,6 +353,15 @@ class HttpUtil {
if (resData['code'] == 0) {
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);
friendCache[info.userId] = info;
MessageMgr().emit('UpdateUserInfo', info);
@@ -1184,8 +1203,8 @@ class HttpUtil {
//根据经纬度获取用户国家城市
getAddress(double lon, double lat) async {
Map data = {
"lon": lon,
"lat": lat,
"lon": lon.toString(),
"lat": lat.toString(),
};
data['sign'] = TokenMgr().getSign(data);
data['language'] = UserData().language;
@@ -1225,13 +1244,13 @@ class HttpUtil {
}
}
//根据经纬度获取用户国家城市
//根据经纬度更新当前城市
changeCurrentCity(double lon, double lat, callback) async {
if (UserData().basicInfo.userId == null) return;
Map data = {
"userId": UserData().basicInfo.userId,
"lon": lon,
"lat": lat,
"lon": lon.toString(),
"lat": lat.toString(),
};
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 {
Map data = {


+ 2
- 12
lib/utils/MessageBox.dart Visa fil

@@ -85,17 +85,7 @@ class _MessageBoxState extends State<MessageBox> {
),
);
} 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') {
var data = {
"userId": UserData().basicInfo.userId,
@@ -491,7 +481,7 @@ class _MessageBoxState extends State<MessageBox> {
_buildTimebox(data),
_buildImgSet(data),
_buildImgList(data),
_buildDivder(),
widget.isDetail ? Container() : _buildDivder(),
_buildIconButtonList(data),
//_buildContent(),
],


+ 3
- 3
lib/utils/NetUtil.dart Visa fil

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


+ 212
- 254
lib/utils/TempUserCard.dart Visa fil

@@ -38,31 +38,29 @@ 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;

@@ -72,27 +70,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,
@@ -102,16 +100,15 @@ 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(),
@@ -132,87 +129,25 @@ 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);
@@ -223,8 +158,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(
@@ -233,24 +168,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(),
],
);
@@ -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(
{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


+ 5
- 24
lib/utils/UserCard.dart Visa fil

@@ -277,35 +277,16 @@ class UserCard extends StatelessWidget {
isActive: isLove,
size: 16,
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) {
HttpUtil().setLove(userId, () {
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) {
HttpUtil().cancleLove(userId, () {
MessageMgr().emit('refresh_love_list',
{'UserId': userId, 'flag': 2});
showToast(resData['msg']);
}
});
}
}),
right: 0,
@@ -362,7 +343,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(


+ 11
- 30
lib/utils/app_navigator.dart Visa fil

@@ -10,7 +10,6 @@ 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';
@@ -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);
}
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,));
}
//客服
@@ -143,7 +129,7 @@ class AppNavigator {
}
//群聊二维码
static pushGroupQrPage(BuildContext context, GroupInfoModel model) {
static pushGroupQrPage(BuildContext context,GroupInfoModel model) {
AppNavigator.push(context, GroupQrPage(model));
}
@@ -219,7 +205,7 @@ class AppNavigator {
AppNavigator.push(context, TranslateRobotPage());
}
//进入反馈小助手页面
//进入反馈小助手页面
static pushCompanyServerPage(BuildContext context) {
AppNavigator.push(context, CompanyServerPage());
}
@@ -229,10 +215,5 @@ 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));
}
}

+ 1
- 1
lib/utils/file_transfer_page.dart Visa fil

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


+ 1
- 0
lib/utils/local_notification_util.dart Visa fil

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


+ 11
- 7
lib/utils/msgHandler.dart Visa fil

@@ -12,6 +12,7 @@ import 'package:chat/models/ChatMsg.dart';
import 'package:chat/models/group_info_model.dart';
import 'package:chat/proto/all.pbserver.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/group_member_model.dart';
import 'package:chat/utils/local_notification_util.dart';
@@ -217,7 +218,6 @@ class MsgHandler {
print('消息包大小超过3M');
}
//本地文件为空或者等发送成功之后才可以发送
if (msg.localFile == null || msg.state >= MsgState.Uploaded) {
Future.delayed(Duration(seconds: 60), () {
if (msg.state != MsgState.SendingSuccess) {
@@ -239,7 +239,6 @@ class MsgHandler {
seq.targetId = curActiveSession;
if (curActiveSession == 10000) {
seq.channelType = ChatChannelType.CSD;
} else {
seq.channelType =
@@ -528,12 +527,7 @@ class MsgHandler {
msgModel.state = MsgState.DownloadFailed;
}
}
if (msgModel.sessionId == 10000 ) {
print('收到反馈小助手消息');
}
if (msgModel.sessionId == curActiveSession) {
MessageMgr().emit('New Chat Message', msgModel.sessionId);
}
}
@@ -923,6 +917,16 @@ class MsgHandler {
), (route) => route == null);
NetWork().singOut();
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;
}


+ 8
- 24
lib/utils/receive_share_file.dart Visa fil

@@ -9,8 +9,6 @@ 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
@@ -23,12 +21,8 @@ class ReceiveShareFile {
// print('#### getfilePath ${value[0].path}');

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 {
// print("### 记录下来了1");
@@ -50,14 +44,9 @@ class ReceiveShareFile {
// print('#### getfilePath ${value[0].path}');

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 {
// print("### 记录下来了");
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
_intentDataStreamSubscription =
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) {
print("getLinkStream error: $err");
});
@@ -100,7 +87,4 @@ class ReceiveShareFile {
static dispose() {
currentIndex = 0;
}

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

}

+ 6
- 6
lib/utils/screen.dart Visa fil

@@ -63,12 +63,12 @@ fixedText(data, {Color color, double fontSize, FontWeight fontWeight}) {
extendedText(String text,
{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(
text,


+ 24
- 0
lib/utils/screen_shot.dart Visa fil

@@ -1,3 +1,4 @@
import 'dart:io';
import 'dart:typed_data';
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_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 =
const EventChannel('com.file.hibok');
static Future<List<int>> takeScreenshotImage() async {
Map<String, dynamic> args = <String, dynamic>{};
@@ -38,4 +44,22 @@ class ScreenShot {
Map<String, dynamic> args = <String, dynamic>{};
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');
});
}
}

Laddar…
Avbryt
Spara