import 'dart:convert'; import 'dart:io'; import 'dart:ui'; import 'package:app_settings/app_settings.dart'; import 'package:circle_app/app/chat/view.dart'; import 'package:circle_app/app/circle/view.dart'; import 'package:circle_app/app/circle/widgets/discover.dart'; import 'package:circle_app/app/userinfo/logic.dart'; import 'package:circle_app/common/Widgets/base_tip_widget.dart'; import 'package:circle_app/common/values/values.dart'; import 'package:circle_app/main.dart'; import 'package:circle_app/network/api.dart'; import 'package:circle_app/router/app_routers.dart'; import 'package:circle_app/util/eventBus.dart'; import 'package:event_bus/event_bus.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:geolocator/geolocator.dart'; import 'package:get/get.dart'; import 'package:oktoast/oktoast.dart'; import 'package:path_provider/path_provider.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_conversation_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:video_compress/video_compress.dart'; import '../app/circle/logic.dart'; import '../app/home/logic.dart'; import '../app/select_circle/logic.dart'; import '../common/Widgets/open_vip_tip/view.dart'; import '../common/Widgets/wx_edit_dialog.dart'; import '../common/colors/app_color.dart'; import '../network/dio_manager.dart'; import 'SharedPreferencesHelper.dart'; List chatIdList = []; class Util {} //获取图片 String getBaseImage(String image) { return '${Values.base_images}${image}.png'; } String getHomeImage(String image) { return '${Values.home_images}${image}.png'; } String getDisCoverImage(String image) { return '${Values.discover_images}${image}.png'; } String getLoginImage(String image) { return '${Values.login_images}${image}.png'; } String getMineImage(String image) { return '${Values.mine_images}${image}.png'; } String getMsgImage(String image) { return '${Values.msg_images}${image}.png'; } String getNavigatorImage(String image) { return '${Values.navigator_images}${image}.png'; } String getTabbarImage(String image) { return '${Values.tabbar_images}${image}.png'; } String getCircleImage(String image) { return '${Values.circle_images}${image}.png'; } ///弹窗文本提示 msg: 提示内容 showOKToast(String msg) { showToast( msg, duration: Duration(seconds: msg.length > 15 ? 5 : msg.length > 10 ? 3 : 2), position: ToastPosition.center, backgroundColor: Colors.black, radius: 13.0, textStyle: const TextStyle(fontSize: 16.0,color: Colors.white), ); } loaddingWidget(bool isMore,{String tip = '--到底了--'}) { return Container( alignment: Alignment.center, child: isMore ? const CircularProgressIndicator( color: Color(0xFF07FAFB), ) : Container( margin: EdgeInsets.only(top: 4.sp, bottom: 4.sp), child: Text( tip, style: TextStyle(color: Colors.white, fontSize: 13.sp), ), ), ); } noResultWidget({String tip = '正在等待被填充~',Function? callBack, String action = '重新加载'}) { return Container( width: Get.width, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( getBaseImage('no_result'), width: 200.sp, ), SizedBox( height: 8.sp, ), if (callBack == null || tip.isNotEmpty) Text( tip, style: TextStyle(color: Color(0xffdbdbdb), fontSize: 15.sp), ), if (callBack != null) GestureDetector( onTap: () { callBack(); }, child: Container( margin: EdgeInsets.only(top: 10.sp), height: 42.sp, width: 160.sp, alignment: Alignment.center, // padding: EdgeInsets.only(left: 4.sp,right: 4.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8.sp), gradient: AppColor.mainVerLinearGradient), child: Text( action, style: TextStyle(color: Colors.white, fontSize: 14.sp), ), ), ) ], ), ); } ///value: 文本内容;fontSize : 文字的大小;fontWeight:文字权重;maxWidth:文本框的最大宽度;maxLines:文本支持最大多少行 double calculateTextHeight(String value, fontSize, FontWeight fontWeight, double maxWidth, int maxLines) { value = filterText(value); TextPainter painter = TextPainter( ///AUTO:华为手机如果不指定locale的时候,该方法算出来的文字高度是比系统计算偏小的。 locale: WidgetsBinding.instance.window.locale, maxLines: maxLines, textDirection: TextDirection.ltr, textScaleFactor: 1, //字体缩放大小 text: TextSpan( text: value, style: TextStyle( fontWeight: fontWeight, fontSize: fontSize, ))); painter.layout(maxWidth: maxWidth); ///文字的宽度:painter.width return painter.height; } String filterText(String text) { String tag = '
'; while (text.contains('
')) { // flutter 算高度,单个\n算不准,必须加两个 text = text.replaceAll(tag, '\n\n'); } return text; } String convertToTenThousand(int number) { if (number >= 10000) { double result = number / 10000; return '${result.toStringAsFixed(1)}万'; } else { return number.toString(); } } pushLoginPage() async { await logoutIM(); SharedPreferencesHelper.getInstance().then((sharedPreferences) { String loginPhone = sharedPreferences.getString(SharedPreferencesHelper.LOGINPHONE) ?? ""; String pwd = sharedPreferences.getString(SharedPreferencesHelper.PWD) ?? ""; print(loginPhone); List tipList = sharedPreferences.getStringList(); sharedPreferences.clear(); sharedPreferences.setString(SharedPreferencesHelper.LOGINPHONE, loginPhone); sharedPreferences.setString(SharedPreferencesHelper.PWD, pwd); sharedPreferences.setBool(SharedPreferencesHelper.AGREEMENT, true); sharedPreferences.setString(SharedPreferencesHelper.firstLogin, '1'); sharedPreferences.setStringList(tipList); }); if (AppRoutes.Login != Get.currentRoute) { Get.offAllNamed(AppRoutes.Login); } } String filterSensitiveWords(String input, List sensitiveWords) { String filteredString = input; for (String word in sensitiveWords) { String replacement = '*' * word.length; filteredString = filteredString.replaceAll(word, replacement); } return filteredString; } String getAgeCOntent(int gender, int age, int role, int orientation) { return "${getGenderContent(gender)}·${age}·${getRoleContent(role)}·${getOrientationContent(orientation)}"; } late ConfigBean configBean; List numbers = []; List genderList = []; List orientationList = []; List roleList = []; String getGenderContent(int number) { if (number == null) return ''; if (genderList.length != 0) { return genderList[number - 1]; } else { switch (number) { case 1: return "男"; case 2: return "女"; case 3: return "MTF"; case 4: return "FTM"; case 5: return "CD"; case 6: return "酷儿"; default: return ""; } } } String getOrientationContent(int number) { if (orientationList.length != 0) { return orientationList[number - 1]; } else { switch (number) { case 1: return "异性恋"; case 2: return "同性恋"; case 3: return "双性恋"; case 4: return "泛性恋"; case 5: return "无性恋"; case 6: return "智性恋"; case 7: return "性单恋"; default: return ""; } } } String getRoleContent(int number) { if (roleList.length != 0) { return roleList[number - 1]; } else { switch (number) { case 1: return "Sado"; case 2: return "Maso"; case 3: return "Dom"; case 4: return "Sub"; case 5: return "Switch"; default: return ""; } } } typedef void MyCallback(String path); Future compressVideo( String inputPath, String outputPath, MyCallback myCallback) async { final info = await VideoCompress.compressVideo( inputPath, quality: VideoQuality.MediumQuality, deleteOrigin: false, ); if (info != null && null != info.path) { print(info.path); myCallback(info.path!); } else { print('视频压缩失败'); } } class CustomRefreshHeader extends StatelessWidget { @override Widget build(BuildContext context) { return ClassicHeader( // 自定义刷新时的文字 refreshingText: "正在刷新...", idleText: "下拉刷新", completeText: "刷新完成", failedText: "刷新失败", ); } } class CustomLoadFooter extends StatelessWidget { @override Widget build(BuildContext context) { return ClassicFooter( // 自定义加载更多时的文字 canLoadingText: "松手开始加载数据", loadingText: "正在加载...", idleText: "上拉加载更多", noDataText: "到底了~", failedText: "加载失败", ); } } class DiyLoadFooter extends StatefulWidget { String noDataText; DiyLoadFooter({super.key,required this.noDataText}); @override State createState() => _DiyLoadFooterState(); } class _DiyLoadFooterState extends State { @override Widget build(BuildContext context) { return ClassicFooter( // 自定义加载更多时的文字 canLoadingText: "松手开始加载数据", loadingText: "正在加载...", idleText: "上拉加载更多", noDataText: widget.noDataText, failedText: "加载失败", ); } } class CustomLikeLoadFooter extends StatelessWidget { @override Widget build(BuildContext context) { return ClassicFooter( // 自定义加载更多时的文字 canLoadingText: "松手开始加载数据", loadingText: "正在加载...", idleText: "上拉加载更多", noDataText: "", height: 20.sp, spacing: 5, failedText: "加载失败", ); } } // 获取应用程序的文档目录路径 Future getApplicationDocumentsDirectoryPath() async { final directory = await getApplicationDocumentsDirectory(); return directory.path; } // 获取应用程序的支持目录路径 Future getApplicationSupportDirectoryPath() async { final directory = await getApplicationSupportDirectory(); return directory.path; } // 获取临时目录路径 Future getTemporaryDirectoryPath() async { final directory = await getTemporaryDirectory(); return directory.path; } // 获取库目录路径 Future getLibraryDirectoryPath() async { final directory = await getLibraryDirectory(); return directory.path; } //跳转到文明公约 void navigateToCodeOfConduct() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "文明公约", "url": "https://docs.qq.com/doc/DZUtoZ3V0S3ltY2Zw" }); } //跳转到用户协议 void navigateToUserAgreement() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "用户协议", "url": Platform.isIOS ? "https://docs.qq.com/doc/DZVV1SkttZGlPUW1H" : "https://iquanpai.com/app-h5/4_163.html" }); } //跳转到如何上精选 void navigateToQueen() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "如何上精选", "url": 'https://iquanpai.com/app-h5/4_184.html' }); } //跳转到隐私政策 void navigateToPrivacyPolicy() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "隐私协议", "url": Platform.isIOS ? "https://docs.qq.com/doc/DZXhvcXV6b1RNTUx1" : "https://iquanpai.com/app-h5/4_164.html" }); } //发布内容规范 void navigateToContentGuidelines() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "发布内容规范", "url": Platform.isIOS ? "https://docs.qq.com/doc/DZVhLamZDQnJ0eHds" : "https://iquanpai.com/app-h5/4_165.html" }); } //合伙人协议 void navigateToPartnerAgreement() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "合伙人协议", "url": Platform.isIOS ? "https://docs.qq.com/doc/DZUpwWFdNcGlsYld4" : "https://iquanpai.com/app-h5/4_166.html" }); } //小票充值协议 void navigateToItem() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "小票充值协议", "url":'https://www.iquanpai.com/app-h5/4_173.html' }); } //邀请攻略 void navigateToInviteStrategy() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "邀请攻略", "url": "https://leyuan666.com/app-h5/4_168.html" }); } //跳转到赚钱攻略 navigateStartGetMoeny() { Get.toNamed(AppRoutes.WebViewActivity, arguments: { 'title': "微乐园赚钱攻略", "url": 'https://iquanpai.com/app-h5/4_178.html' }); } void navigateToCustomRoute(BannerItem bannerItem) async { print(bannerItem.param); switch (bannerItem.type) { case 1: if (bannerItem.scene == 'internal') { Get.toNamed(AppRoutes.WebViewActivity, arguments: {'title': "", "url": bannerItem.param.toString()}); } else { await launch(bannerItem.param.toString(),forceSafariVC: false); } break; case 2: switch (bannerItem.scene) { case "scene_2": List numbers = []; if (bannerItem.param!.isNotEmpty) { String paramJson = bannerItem.param.toString(); paramJson = paramJson.replaceAll(r'\', ''); // 去除反斜杠转义 Map jsonData = json.decode(paramJson); numbers.add(MyConfigData( jsonData['id'].toString(), jsonData['name'], false)); } Get.toNamed(AppRoutes.Call_out, arguments: {'numbers': numbers}); break; case "scene_3": Get.toNamed(AppRoutes.FeedbackActivity); break; } break; case 3: switch (bannerItem.scene) { case "scene_1": Get.toNamed(AppRoutes.Invite); break; case "scene_4": if (bannerItem.param!.isEmpty) { Get.toNamed(AppRoutes.UserInfoActivity); } else { Get.toNamed(AppRoutes.UserInfoActivity, arguments: bannerItem.param.toString()); } break; } break; } } unLockWxSuccessResult(String userId) { String currentRoute = Get.currentRoute; if (currentRoute == AppRoutes.Home) { EventBusManager.fire(DiscoverDataRefresh(userId)); } else if (currentRoute == AppRoutes.UserInfoActivity) { var logic = Get.find(); logic.fetchUserInfo("${Api.getUserInfoTA + userId}/home"); } else if (currentRoute == AppRoutes.Chat) { EventBusManager.fire(ChatLoadUserInfoData()); } } Size boundingTextSize(BuildContext context, String text, TextStyle style, {int maxLines = 2 ^ 31, double maxWidth = double.infinity}) { if (text == null || text.isEmpty) { return Size.zero; } final TextPainter textPainter = TextPainter( textDirection: TextDirection.ltr, locale: Localizations.localeOf(context), text: TextSpan(text: text, style: style), maxLines: maxLines) ..layout(maxWidth: maxWidth); return textPainter.size; } //跳转发消息页面 pushChatPage(String userId, String imId, String userName) { var con = V2TimConversation( conversationID: "c2c_$imId", userID: imId, showName: userName, type: 1); Get.toNamed(AppRoutes.Chat, arguments: con); createCustomMsg(userId, imId); } createCustomMsg(String userId, String imId) async { if (chatIdList.contains(imId)) return; chatIdList.add(imId); //通过会话ID获取指定会话列表 V2TimValueCallback> getConversationListByConversaionIdsRes = await TencentImSDKPlugin .v2TIMManager .getConversationManager() .getConversationListByConversaionIds( conversationIDList: ["c2c_$imId"]); //需要获取会话列表数据的会话id列表 if (getConversationListByConversaionIdsRes.code == 0 && getConversationListByConversaionIdsRes.data!.isEmpty) { //获取资料,然后发送自定义卡片消息 var data = await DioManager.instance.get( url: 'msg-service/user/$userId/chat/card', ); if (data['code'] == 200) { String desc = ''; String cityStr = ''; Map info = {}; // 对方喜欢了你100 // ·你们有共同喜欢的圈友90 // ·你喜欢的圈友也喜欢TA80 // ·你们都在深圳留下过足迹70 // ·你们有2个共同的圈子:圈子名称、圈子名称60 // ·可能是你想认识的人50 // ·很多圈友都喜欢TA40 // ·TA是乐园优秀圈主哦~30 var titleList = []; var recommendCircleFriendData = data['data']; if (data['data']['both_interests'] != null) { List both_interests = data['data']['both_interests']; List circleList = []; both_interests.forEach((element) { circleList.add(element['title']); }); if (circleList.isNotEmpty) { info['both_interests'] = '你们有${circleList.length}个共同的圈子:${circleList.join('、')}'; if (desc.isEmpty) { desc = '你们有${circleList.length}个共同的圈子:${circleList.join('、')}'; } } } if (data['data']['both_cities'] != null) { List city = data['data']['both_cities']; print('城市' + city.toString()); if (city.isNotEmpty) { desc = '你们都在${city.first}留下过足迹'; cityStr = '你们都在${city.first}留下过足迹'; } } if (desc.isNotEmpty) { if (data['data']['both_cities'] != null) { info['city'] = cityStr; } info['title'] = recommendCircleFriendData; info['interests'] = data['data']['interests'] ?? []; info['my'] = data['data']['my'] ?? ''; info['myInterests'] = data['data']['myInterests'] ?? []; info['user'] = data['data']['user']; info['guide_text'] = data['data']['guide_text'] ?? '请问现在有空吗?'; await sendCustomMsg(imId, jsonEncode(info), desc); return true; } } } return false; } //发送文本消息 sendTextMsg(String userId, {String content = '看看这次缘分匹配到哪位小可爱呢?'}) async { // 创建文本消息 V2TimValueCallback createTextMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createTextMessage( text: content, // 文本信息 ); if (createTextMessageRes.code == 0) { // 文本信息创建成功 String? id = createTextMessageRes.data?.id; // 发送文本消息 // 在sendMessage时,若只填写receiver则发个人用户单聊消息 // 若只填写groupID则发群组消息 // 若填写了receiver与groupID则发群内的个人用户,消息在群聊中显示,只有指定receiver能看见 V2TimValueCallback sendMessageRes = await TencentImSDKPlugin .v2TIMManager .getMessageManager() .sendMessage(id: id!, receiver: userId, groupID: ''); if (sendMessageRes.code == 0) { // 发送成功 return true; } return false; } // V2TimValueCallback createCustomMessageRes = // await TencentImSDKPlugin.v2TIMManager // .getMessageManager() // .createTextAtMessage(text: '看看这次缘分匹配到哪位小可爱呢?',atUserList: [], // ); // if (createCustomMessageRes.code == 0) { // String? id = createCustomMessageRes.data?.id; // // 发送自定义消息 // // 在sendMessage时,若只填写receiver则发个人用户单聊消息 // // 若只填写groupID则发群组消息 // // 若填写了receiver与groupID则发群内的个人用户,消息在群聊中显示,只有指定receiver能看见 // V2TimValueCallback sendMessageRes = await TencentImSDKPlugin // .v2TIMManager // .getMessageManager() // .sendMessage(id: id!, receiver: userId,groupID: ''); // if (sendMessageRes.code == 0) { // // 发送成功 // return true; // } // } } //发送卡片自定义消息 sendCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'cardData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; // 发送自定义消息 // if (Get.currentRoute == AppRoutes.Chat) { // EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); // } else { V2TimValueCallback sendMessageRes = await TencentImSDKPlugin .v2TIMManager .getMessageManager() .sendMessage(id: id!, receiver: userId, groupID: ''); if (sendMessageRes.code == 0) { // 发送成功 EventBusManager.fire(ChatRefreshMsg()); sendMessageRes.data?.customElem?.data; //自定义data sendMessageRes.data?.customElem?.desc; //自定义desc sendMessageRes.data?.customElem?.extension; //自定义extension } // } } } //发送用户主页自定义消息 sendUserHomeCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'userHomeData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; V2TimValueCallback sendMessageRes = await TencentImSDKPlugin .v2TIMManager .getMessageManager() .sendMessage(id: id!, receiver: userId, groupID: ''); if (sendMessageRes.code == 0) { // 发送成功 showOKToast('发送成功'); sendMessageRes.data?.customElem?.data; //自定义data sendMessageRes.data?.customElem?.desc; //自定义desc sendMessageRes.data?.customElem?.extension; //自定义extension } } } //发送圈子自定义消息 sendCircleCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'circleData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; if (Get.currentRoute == AppRoutes.Chat) { EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); } else { V2TimValueCallback sendMessageRes = await TencentImSDKPlugin .v2TIMManager .getMessageManager() .sendMessage(id: id!, receiver: userId, groupID: ''); if (sendMessageRes.code == 0) { // 发送成功 showOKToast('发送成功'); sendMessageRes.data?.customElem?.data; //自定义data sendMessageRes.data?.customElem?.desc; //自定义desc sendMessageRes.data?.customElem?.extension; //自定义extension } } } } //发送求送礼物自定义消息 sendGetGiftCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'getGiftData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; // 发送自定义消息 EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); } } //发送许愿自定义消息 sendGetWishCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'getWishData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; // 发送自定义消息 EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); // // // 在sendMessage时,若只填写receiver则发个人用户单聊消息 // // 若只填写groupID则发群组消息 // // 若填写了receiver与groupID则发群内的个人用户,消息在群聊中显示,只有指定receiver能看见 // V2TimValueCallback sendMessageRes = await TencentImSDKPlugin // .v2TIMManager // .getMessageManager() // .sendMessage(id: id!, receiver: userId, groupID: ''); // if (sendMessageRes.code == 0) { // // 发送成功 // sendMessageRes.data?.customElem?.data; //自定义data // sendMessageRes.data?.customElem?.desc; //自定义desc // sendMessageRes.data?.customElem?.extension; //自定义extension // showOKToast('发送成功'); // } } } //发送邀请许愿自定义消息 sendInventWishCustomMsg(String userId, String data, String desc) async { // 创建自定义消息 V2TimValueCallback createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .createCustomMessage( data: data, desc: desc, extension: 'getInventWishData', ); if (createCustomMessageRes.code == 0) { String? id = createCustomMessageRes.data?.id; // 发送自定义消息 EventBusManager.fire(SendCoustomMessage(createCustomMessageRes)); } } //判断卡片返回信息 Map checkCardReturnData(Map recommendCircleFriendData) { var titleList = []; Map info = {}; if (recommendCircleFriendData['is_follow_me']) { titleList.add('对方喜欢了你'); } else if (recommendCircleFriendData['has_both_friend']) { titleList.add('你们有共同喜欢的圈友'); } else if (recommendCircleFriendData['has_friend_follow_to']) { titleList.add('你喜欢的圈友也喜欢TA'); } if (titleList.length < 3) { List citys = recommendCircleFriendData['both_cities']; if (citys.isNotEmpty) { titleList.add('你们都在${citys.first}留下过足迹'); } } if (titleList.length < 3) { List circles = recommendCircleFriendData['both_interests']; if (circles.isNotEmpty) { List both_interests = recommendCircleFriendData['both_interests']; List circleList = []; both_interests.forEach((element) { circleList.add(element['title']); }); if (circleList.isNotEmpty) { titleList .add('你们有${circleList.length}个共同的圈子:${circleList.join('、')}'); } } } if (titleList.length < 3) { if (recommendCircleFriendData.containsKey('is_new_user')) { titleList.add('我刚来到这里哦'); } } if (titleList.length < 3) { if (recommendCircleFriendData['is_wanna_meet']) { titleList.add('很多圈友都喜欢TA'); } } if (titleList.length < 3) { if (recommendCircleFriendData['is_most_fans']) { titleList.add('可能是你想认识的人'); } } if (titleList.length < 3) { if (recommendCircleFriendData['is_excellent_qz_leader']) { titleList.add('TA是乐园优秀圈主哦~'); } } if (titleList.length >= 1) { info['city'] = titleList.first; } if (titleList.length >= 2) { info['both_interests'] = titleList[1]; } if (titleList.length >= 3) { info['desc'] = titleList[2]; } return info; } Future> loadConverstationListData() async { TUIConversationViewModel model = serviceLocator(); List filteredConversationList = model.conversationList .where( (element) => (element?.groupID != null || element?.userID != null)) .toList(); // 过滤指定的 userID qpqz_prod_10_10000000000 String devtTargetUserID = "qpqz_dev_10_10000000000"; String prodTargetUserID = "qpqz_prod_10_10000000000"; filteredConversationList = filteredConversationList .where((conversation) => conversation?.userID != devtTargetUserID && conversation?.userID != prodTargetUserID) .toList(); List userIdList = []; filteredConversationList.forEach((element) { userIdList.add(element!.userID!); }); V2TimValueCallback getLoginUserRes = await TencentImSDKPlugin.v2TIMManager.getLoginUser(); if (getLoginUserRes.code == 0) { //获取成功 if (getLoginUserRes.data != null) { userIdList.insert( 0, getLoginUserRes.data!); // getLoginUserRes.data为查询到的登录用户的UserID } } //获取用户资料 V2TimValueCallback> getUsersInfoRes = await TencentImSDKPlugin.v2TIMManager .getUsersInfo(userIDList: userIdList); //需要查询的用户id列表 if (getUsersInfoRes.code == 0) { // 查询成功 getUsersInfoRes.data?.forEach((element) { element.allowType; //用户的好友验证方式 0:允许所有人加我好友 1:不允许所有人加我好友 2:加我好友需我确认 element.birthday; //用户生日 element.customInfo; //用户的自定义状态 element.faceUrl; //用户头像 url element.gender; //用户的性别 1:男 2:女 element.level; //用户的等级 element.nickName; //用户昵称 element.role; //用户的角色 element.selfSignature; //用户的签名 element.userID; //用户 ID }); return getUsersInfoRes.data ?? []; } return []; } showVipDialog() { Get.bottomSheet( Scaffold( backgroundColor: Colors.transparent, body: Open_vip_tipPage(false), ), isScrollControlled: true, enableDrag: false).then((value) { }); } locationDialog() { Get.bottomSheet(CupertinoAlertDialog( content: SingleChildScrollView( child: ListBody( children: [Text("请开启位置权限用于寻找附近用户")], ), ), actions: [ CupertinoDialogAction( child: Text("确定"), onPressed: (){ Get.back(); AppSettings.openAppSettings(); }, ), CupertinoDialogAction( child: Text("取消"), onPressed: (){ Get.back(); }, ), ], ),isScrollControlled: true, enableDrag: false ); } Future checkPhotosStatus() async { var status = await Permission.photos.status; if (PermissionStatus.permanentlyDenied == status) { Get.bottomSheet(CupertinoAlertDialog( content: SingleChildScrollView( child: ListBody( children: [Text("请开启相册权限以上传图片/视频")], ), ), actions: [ CupertinoDialogAction( child: Text("确定"), onPressed: (){ AppSettings.openAppSettings(); }, ), CupertinoDialogAction( child: Text("取消"), onPressed: (){ Get.back(); }, ), ], ),isScrollControlled: true, enableDrag: false ); } return PermissionStatus.permanentlyDenied == status; } pushPage(String action,String param,{String name = ''}) { // public final static String MY_MAIN = "my_main";//我的主页 // public final static String MY_USER_HOME = "my_user_home";//我的个人主页 // public final static String TO_USER_HOME = "to_user_home";//他人用户主页 // public final static String MY_GIFT_HALL = "my_gift_hall";//礼物馆 // public final static String TO_GIFT_HALL = "to_gift_hall";//他人礼物馆 // public final static String USER_HOME_CALLOUT = "user_home_callout";//个人主页喊话栏目 // public final static String CHAT = "chat";//私聊 // public final static String STORY_PERSONAGE = "story_personage";//故事达人 // public final static String FIND_PAGE = "find_page";//发现栏目 // public final static String CUSTOM_SERVICE = "custom_service";//客服 // public final static String INVITE = "invite";//邀请页 // public final static String WALLET = "wallet";//个人资产/钱包 // public final static String OFFSITE_SHARE = "offsite_share";//站外分享 // public final static String GOOD_RATE = "good_rate";//好评反馈 // public final static String BUY_VIP = "buy_vip";//购买会员 // public final static String RECHARGE = "recharge";//充值 // public final static String INTEREST = "interest";//圈子 // public final static String GOOD_AUTH = "good_auth";//good认证 if (action == 'my_main') { Get.until((route) => route.settings.name == '/home'); final homeLogic = Get.put(HomeLogic()); homeLogic.tabController.animateTo(3); homeLogic.updateIndex(3); } else if (action == 'my_user_home') { Get.toNamed(AppRoutes.UserInfoActivity); } else if (action == 'find_page') { Get.until((route) => route.settings.name == '/home'); final homeLogic = Get.put(HomeLogic()); homeLogic.tabController.animateTo(0); homeLogic.updateIndex(0); Future.delayed(Duration(milliseconds: 200),() { EventBusManager.fire(ChangeIndex(2)); }); } else if (action == 'to_user_home' || action == 'user_home_callout') { Get.toNamed(AppRoutes.UserInfoActivity,arguments: param); } else if (action == 'my_gift_hall') { Get.toNamed(AppRoutes.GiftShopPage,arguments: ''); } else if (action == 'to_gift_hall') { Get.toNamed(AppRoutes.GiftShopPage,arguments: param); } else if (action == 'invite') { Get.toNamed(AppRoutes.Invite); } else if (action == 'wallet') { Get.toNamed(AppRoutes.MyAssets); } else if (action == 'offsite_share') { Get.toNamed(AppRoutes.ExternalsharePage); } else if (action == 'good_rate') { if (Platform.isAndroid) { Get.toNamed(AppRoutes.Good_Reviews); } else { launch('https://apps.apple.com/cn/app/%E5%BE%AE%E4%B9%90%E5%9B%AD-%E4%BA%9A%E6%96%87%E5%8C%96%E5%A4%9A%E5%85%83%E4%BA%A4%E5%8F%8B%E5%9F%BA%E5%9C%B0/id6459449499', forceSafariVC: false); } } else if (action == 'buy_vip') { showOepnVipDialog(); } else if (action == 'recharge') { showRechargeScreenDialog(); } else if (action == 'chat') { pushChatPage(param.split('_').last, param, name); } else if (action == 'custom_service') { var con; if(kDebugMode){ con = V2TimConversation( conversationID: "c2c_qpqz_dev_10_102", userID: "qpqz_dev_10_102", showName: "测试乐园客服", type: 1); }else{ con = V2TimConversation( conversationID: "c2c_qpqz_prod_10_102", userID: "qpqz_prod_10_102", showName: "乐园客服", type: 1); } Get.toNamed(AppRoutes.Chat, arguments: con); } else if(action == 'interest') { Get.toNamed(AppRoutes.Signal_circle_list,arguments: param); } else if(action == 'good_auth') { var con; if(kDebugMode){ con = V2TimConversation( conversationID: "c2c_qpqz_dev_10_102", userID: "qpqz_dev_10_102", showName: "测试乐园客服", type: 1); }else{ con = V2TimConversation( conversationID: "c2c_qpqz_prod_10_102", userID: "qpqz_prod_10_102", showName: "乐园客服", type: 1); } Get.toNamed(AppRoutes.Chat, arguments: con); DioManager.instance.post(url: Api.goodAuth); } else if (action == 'apply_interest_agent') { sendApplyToAgentData(param); } } void sendApplyToAgentData(var circleId) async { var data = await DioManager.instance .post(url: Api.applyToAgent + '$circleId'); if (data['code'] == 200) { var con; if(kDebugMode){ con = V2TimConversation( conversationID: "c2c_qpqz_dev_10_102", userID: "qpqz_dev_10_102", showName: "测试乐园客服", type: 1); }else{ con = V2TimConversation( conversationID: "c2c_qpqz_prod_10_102", userID: "qpqz_prod_10_102", showName: "乐园客服", type: 1); } Get.toNamed(AppRoutes.Chat, arguments: con); } else if (data['code'] == 32104) { showReportDialog(Get.context!,data['msg']); } } void showReportDialog(BuildContext context,String msg) { showDialog( context: context, builder: (BuildContext context) { return Dialog( backgroundColor: Colors.transparent, child: Container( height: 200.sp, padding: const EdgeInsets.all(1.0), child: Stack( children: [ Container( decoration: BoxDecoration( shape: BoxShape.rectangle, color: AppColor.bgColor, borderRadius: BorderRadius.circular(12.0.sp), // gradient: const LinearGradient( // colors: [Color(0xFFDD3DF4), Color(0xFF30FFD9)], // begin: Alignment.topCenter, // end: Alignment.bottomCenter, // ), ), ), // Container( // margin: EdgeInsets.all(1.sp), // child: Image.asset(getMineImage("im_neglect"),fit: BoxFit.fill,), // ), Container( margin: EdgeInsets.only(top: 12.sp), child: Column( children: [ Center( child: Text( "申请代理提示", style: TextStyle(color: Colors.white, fontSize: 16.sp), ), ), Container( margin: EdgeInsets.only( top: 12.sp, left: 14.sp, right: 14.sp), alignment: Alignment.center, child: Text( msg, textAlign: TextAlign.left, style: TextStyle( color: const Color(0xCCF7FAFA), fontSize: 16.sp), ), ), Row( mainAxisAlignment: MainAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( onTap: () { Get.back(); Get.toNamed(AppRoutes.Invite); }, child: Container( margin: EdgeInsets.only(top: 16.sp), decoration: BoxDecoration( borderRadius: BorderRadius.circular(17), gradient: const LinearGradient( colors: [ Color(0x26FFFFFF), Color(0x26FFFFFF), ], begin: Alignment.centerLeft, end: Alignment.centerRight, ), ), padding: EdgeInsets.only( top: 10.sp, bottom: 10.sp, left: 52.sp, right: 52.sp), child: const Text( "前往邀请", style: TextStyle( color: Colors.white, fontSize: 12, ), ), ), ) ], ) ], ), ) ], ), ), ); }, ); } Future getCurrentPosition() async { return await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.low); } Future showUpdateWxPicker({String phone = ''}) { return Get.bottomSheet(WxEditDialog(phone),isScrollControlled: true,enableDrag: false); } bool isValidQQ(String qq) { String qqRegexp = r'^[1-9][0-9]{4,10}$'; RegExp regExp = RegExp(qqRegexp); return regExp.hasMatch(qq); } checkMyUserStatus() async { var data = await DioManager.instance.get(url: Api.getUserInfo); if (data['code'] == 200) { // UserInfoModel model = UserInfoModel.fromJson(data['data']); // if (model.wxNum?.isNotEmpty ?? false) { // showToast('已成功解锁TA的微信,快去和TA私聊呗~'); // } else { // showToast('你已成功解锁TA的微信,建议您也填写微信,方便对方快速找到您哦~'); // } } }