circle_app/circle_app/lib/app/home/logic.dart

158 lines
4.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}