fix(mobile-next): 把加载、失败、断网接到真实 SDK 与目录请求

会话列表、通讯录、好友申请、添加同事页覆盖 CompanyLoadingView/CompanyFailView;
主页断网横幅跟随 IMSdkStatus.connectionFailed。不伪造状态。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-20 02:52:24 +08:00
co-authored by Cursor multica-agent
parent 092f513708
commit 2b2c2d28a4
9 changed files with 432 additions and 186 deletions
+10 -2
View File
@@ -24,6 +24,7 @@ class HomeLogic extends SuperController {
final unhandledFriendApplicationCount = 0.obs;
final unhandledGroupApplicationCount = 0.obs;
final unhandledCount = 0.obs;
final isOffline = false.obs;
String? _lockScreenPwd;
bool _isShowScreenLock = false;
bool? _isAutoLogin;
@@ -50,7 +51,8 @@ class HomeLogic extends SuperController {
void getUnhandledFriendApplicationCount() async {
var i = 0;
var list = await OpenIM.iMManager.friendshipManager.getFriendApplicationListAsRecipient();
var list = await OpenIM.iMManager.friendshipManager
.getFriendApplicationListAsRecipient();
var haveReadList = DataSp.getHaveReadUnHandleFriendApplication();
haveReadList ??= <String>[];
for (var info in list) {
@@ -65,7 +67,8 @@ class HomeLogic extends SuperController {
void getUnhandledGroupApplicationCount() async {
var i = 0;
var list = await OpenIM.iMManager.groupManager.getGroupApplicationListAsRecipient();
var list = await OpenIM.iMManager.groupManager
.getGroupApplicationListAsRecipient();
var haveReadList = DataSp.getHaveReadUnHandleGroupApplication();
haveReadList ??= <String>[];
for (var info in list) {
@@ -101,7 +104,12 @@ class HomeLogic extends SuperController {
if (value.status == IMSdkStatus.syncStart) {
_getRTCInvitationStart();
}
isOffline.value = value.status == IMSdkStatus.connectionFailed;
});
final lastStatus = imLogic.imSdkStatusSubject.values.lastOrNull;
if (lastStatus != null) {
isOffline.value = lastStatus.status == IMSdkStatus.connectionFailed;
}
Apis.kickoffController.stream.listen((event) {
DataSp.removeLoginCertificate();
+32 -16
View File
@@ -9,6 +9,7 @@ import '../mine/mine_view.dart';
import 'home_logic.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
import '../../company/feature_flags.dart';
import '../../company/ui/state_views.dart';
class HomePage extends StatelessWidget {
final logic = Get.find<HomeLogic>();
@@ -22,9 +23,11 @@ class HomePage extends StatelessWidget {
onDoubleTap: () {
logic.scrollToUnreadMessage();
},
child: _setupIcon(ImageRes.homeTab1Sel.toImage, logic.unreadMsgCount.value),
child: _setupIcon(
ImageRes.homeTab1Sel.toImage, logic.unreadMsgCount.value),
),
inactiveIcon: _setupIcon(ImageRes.homeTab1Nor.toImage, logic.unreadMsgCount.value),
inactiveIcon: _setupIcon(
ImageRes.homeTab1Nor.toImage, logic.unreadMsgCount.value),
title: StrRes.home,
textStyle: Styles.ts_0089FF_10sp_semibold,
),
@@ -32,8 +35,10 @@ class HomePage extends StatelessWidget {
PersistentTabConfig(
screen: ContactsPage(),
item: ItemConfig(
icon: _setupIcon(ImageRes.homeTab2Sel.toImage, logic.unhandledCount.value),
inactiveIcon: _setupIcon(ImageRes.homeTab2Nor.toImage, logic.unhandledCount.value),
icon: _setupIcon(
ImageRes.homeTab2Sel.toImage, logic.unhandledCount.value),
inactiveIcon: _setupIcon(
ImageRes.homeTab2Nor.toImage, logic.unhandledCount.value),
title: StrRes.contacts,
textStyle: Styles.ts_0089FF_10sp_semibold,
),
@@ -81,19 +86,30 @@ class HomePage extends StatelessWidget {
return Scaffold(
backgroundColor: Styles.c_FFFFFF,
body: Obx(
() => PersistentTabView(
tabs: _tabs(),
navBarBuilder: (navBarConfig) => Style1BottomNavBar(
navBarConfig: navBarConfig,
navBarDecoration: const NavBarDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(color: Colors.black12, blurRadius: 0.5, spreadRadius: 0.5),
],
() => Column(
children: [
if (logic.isOffline.value) const CompanyOfflineBanner(),
Expanded(
child: PersistentTabView(
tabs: _tabs(),
navBarBuilder: (navBarConfig) => Style1BottomNavBar(
navBarConfig: navBarConfig,
navBarDecoration: const NavBarDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black12,
blurRadius: 0.5,
spreadRadius: 0.5),
],
),
),
navBarOverlap: const NavBarOverlap.none(),
screenTransitionAnimation:
const ScreenTransitionAnimation.none(),
),
),
),
navBarOverlap: const NavBarOverlap.none(),
screenTransitionAnimation: const ScreenTransitionAnimation.none(),
],
),
),
);