158 lines
4.6 KiB
Dart
158 lines
4.6 KiB
Dart
import 'dart:async';
|
||
import 'dart:io';
|
||
|
||
import 'dart:ffi';
|
||
|
||
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 '../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();
|
||
});
|
||
_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);
|
||
}
|
||
}
|
||
|
||
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();
|
||
}
|
||
update();
|
||
}
|
||
}
|