221 lines
6.6 KiB
Dart
221 lines
6.6 KiB
Dart
import 'dart:async';
|
||
import 'dart:convert';
|
||
import 'dart:io';
|
||
|
||
|
||
import 'package:circle_app/app/circle/logic.dart';
|
||
import 'package:circle_app/app/minefragment/logic.dart';
|
||
import 'package:circle_app/main.dart';
|
||
import 'package:circle_app/network/api.dart';
|
||
import 'package:circle_app/network/dio_manager.dart';
|
||
import 'package:circle_app/util/util.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter_native_splash/flutter_native_splash.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:tencent_cloud_chat_uikit/data_services/core/core_services.dart';
|
||
import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart';
|
||
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||
|
||
import '../../util/eventBus.dart';
|
||
import '../../view/notice.dart';
|
||
import '../circle/view.dart';
|
||
import '../dialog/UpdateDialog.dart';
|
||
import '../minefragment/view.dart';
|
||
import '../msg/view.dart';
|
||
import 'state.dart';
|
||
|
||
class HomeLogic extends GetxController {
|
||
PageController pageController = PageController(initialPage: 1);
|
||
int currentIndex = 1;
|
||
Widget currentPage = Container();
|
||
|
||
final HomeState state = HomeState();
|
||
|
||
final List<Widget> tabs = [];
|
||
var circlePage = CirclePage();
|
||
static final MessageService _messageService =
|
||
serviceLocator<MessageService>();
|
||
final RxString unreadSIze = "0".obs;
|
||
|
||
@override
|
||
void onInit() async {
|
||
super.onInit();
|
||
getIMData();
|
||
|
||
tabs.add(MsgPage());
|
||
tabs.add(CirclePage());
|
||
tabs.add(MinefragmentPage());
|
||
|
||
EventBusManager.on<RefreshUnread>().listen((event) {
|
||
getUnreadSize();
|
||
});
|
||
getUnreadSize();
|
||
var msgListener = V2TimSimpleMsgListener(onRecvC2CTextMessage: (
|
||
msgID,
|
||
userInfo,
|
||
text,
|
||
) async {
|
||
print("收到新消息" + text);
|
||
unreadSIze.value = (int.parse(unreadSIze.value) + 1).toString();
|
||
//getUnreadSize();
|
||
}, onRecvC2CCustomMessage: (
|
||
String msgID,
|
||
V2TimUserInfo sender,
|
||
String customData,
|
||
) {
|
||
|
||
if (sender.userID == "qpqz_dev_10_10000000000" ||
|
||
sender.userID == "qpqz_prod_10_10000000000") {
|
||
if(customData.isEmpty){
|
||
return;
|
||
}
|
||
|
||
print("123123123123"+customData);
|
||
Map<String, dynamic> jsonData = json.decode(customData);
|
||
int event = jsonData['event'];
|
||
Map<String, dynamic> content = jsonData['content'];
|
||
switch(event){
|
||
case 1://关注
|
||
String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}";
|
||
if(content['isFollow']==1){//互关
|
||
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],3,(){
|
||
pushChatPage(content['id'].toString(), content['imId'],
|
||
content['nickname']);
|
||
});
|
||
}else{
|
||
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],1,(){
|
||
setLike(content['id'].toString());
|
||
});
|
||
}
|
||
|
||
break;
|
||
case 2://上线
|
||
|
||
String ageMsg = "${content['genderName']}·${content['age']}·${content['roleName']}·${content['orientationName']}";
|
||
|
||
showFloatingButtonOverlay(Get.context!,content['nickname'],ageMsg,content['avatarThumb'],2,(){
|
||
pushChatPage(content['id'].toString(), content['imId'],
|
||
content['nickname']);
|
||
});
|
||
break;
|
||
}
|
||
|
||
}
|
||
});
|
||
|
||
|
||
|
||
|
||
|
||
_messageService.addSimpleMsgListener(listener: msgListener);
|
||
|
||
var data = await DioManager.instance.get(url: Api.APP_VERSION);
|
||
var bean = BaseResponse<UpdateInfo>.fromJson(
|
||
data, (data) => UpdateInfo.fromJson(data));
|
||
if (bean.isSuccess() && bean.data.update == 1) {
|
||
showReportDialog(Get.context!, bean.data.constraint == 0, bean.data);
|
||
}
|
||
}
|
||
setLike(String userId) async {
|
||
var data = await DioManager.instance.post(
|
||
url: "${Api.setLike + userId}/follow",
|
||
params: {'status': "1"});
|
||
var bean = BaseResponse<dynamic>.fromJson(
|
||
data,
|
||
(jsonData) => jsonData,
|
||
);
|
||
if (bean.isSuccess()) {
|
||
update();
|
||
}
|
||
showOKToast(bean.msg);
|
||
}
|
||
getUnreadSize() async {
|
||
V2TimValueCallback<int> getTotalUnreadMessageCountRes =
|
||
await TencentImSDKPlugin.v2TIMManager
|
||
.getConversationManager()
|
||
.getTotalUnreadMessageCount();
|
||
print("未读数量desc=" +
|
||
getTotalUnreadMessageCountRes.desc.toString() +
|
||
"code=" +
|
||
getTotalUnreadMessageCountRes.code.toString() +
|
||
"data=" +
|
||
getTotalUnreadMessageCountRes.data.toString());
|
||
|
||
if (getTotalUnreadMessageCountRes.code == 0) {
|
||
unreadSIze.value = getTotalUnreadMessageCountRes.data.toString();
|
||
if (Platform.isAndroid) {
|
||
setOfflinePushStatus(status: AppStatus.foreground);
|
||
}
|
||
} else {
|
||
getUnreadSize();
|
||
}
|
||
}
|
||
|
||
@override
|
||
Future<V2TimCallback> setOfflinePushStatus(
|
||
{required AppStatus status, int? totalCount}) {
|
||
if (status == AppStatus.foreground) {
|
||
// 当应用status为前台时,上报doForeground()
|
||
return TencentImSDKPlugin.v2TIMManager
|
||
.getOfflinePushManager()
|
||
.doForeground();
|
||
} else {
|
||
// 当应用status为后台时,上报doBackground(),并带上未读数
|
||
return TencentImSDKPlugin.v2TIMManager
|
||
.getOfflinePushManager()
|
||
.doBackground(unreadCount: totalCount ?? 0);
|
||
}
|
||
}
|
||
|
||
@override
|
||
void onReady() async {
|
||
// TODO: implement onReady
|
||
super.onReady();
|
||
|
||
FlutterNativeSplash.remove();
|
||
}
|
||
|
||
void showReportDialog(
|
||
BuildContext context, bool isDismiss, UpdateInfo updateInfo) {
|
||
showDialog(
|
||
context: context,
|
||
barrierDismissible: isDismiss,
|
||
builder: (BuildContext context) {
|
||
return UpdateDialog(
|
||
isDismiss: isDismiss,
|
||
updateInfo: updateInfo,
|
||
);
|
||
});
|
||
}
|
||
|
||
void getIMData() async {
|
||
// _coreInstance.;
|
||
if (!coreInstance.isLoginSuccess) {
|
||
var data = await DioManager.instance.get(url: Api.getIMInfo);
|
||
if (data['code'] == 200) {
|
||
loginIM(
|
||
data['data']['account_id'].toString(), data['data']['user_sig']);
|
||
}
|
||
}
|
||
}
|
||
|
||
String getInfo() {
|
||
return getBaseImage('image');
|
||
}
|
||
|
||
updateIndex(int index) {
|
||
currentIndex = index;
|
||
if (index == 1) {
|
||
final logic = Get.put(CircleLogic());
|
||
logic.loadCirclePeopleData();
|
||
} else if (index == 2) {
|
||
final logic = Get.put(MinefragmentLogic());
|
||
logic.getMode();
|
||
} else {
|
||
getUnreadSize();
|
||
}
|
||
update();
|
||
}
|
||
}
|