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的微信,建议您也填写微信,方便对方快速找到您哦~');
// }
}
}