Files
tongxunruanjian/mobile-next/lib/pages/home/home_view.dart
T
编码工程师andmultica-agent 8046ec7483 feat(mobile-next): 导入官方 openim-flutter-demo 固定基线 3.8.3-patch.3 并完成双构建
- 上游: github.com/OpenIMSDK/openim-flutter-demo tag 3.8.3-patch.3
  commit b3dfdb1e8aaeaaf6f0793e10cadd20d5c184a31f
- 并行目录 mobile-next/ 原样导入(含 LICENSE),不覆盖现网 mobile/
- 锁定 Flutter 3.24.5 / Dart 3.5.4 / JDK 17 / Gradle 7.6.3 / AGP 7.3.1
- 实测 Android debug 与 release 构建均成功(见 docs/mobile-next-baseline-import.md)
- 本提交可单独回退:git revert 1db1229(重写前)

Co-authored-by: multica-agent <github@multica.ai>
2026-08-19 15:24:33 +08:00

100 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:openim_common/openim_common.dart';
import '../contacts/contacts_view.dart';
import '../conversation/conversation_view.dart';
import '../mine/mine_view.dart';
import '../discover/discover_view.dart';
import 'home_logic.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
class HomePage extends StatelessWidget {
final logic = Get.find<HomeLogic>();
HomePage({super.key});
List<PersistentTabConfig> _tabs() => [
PersistentTabConfig(
screen: ConversationPage(),
item: ItemConfig(
icon: GestureDetector(
onDoubleTap: () {
logic.scrollToUnreadMessage();
},
child: _setupIcon(ImageRes.homeTab1Sel.toImage, logic.unreadMsgCount.value),
),
inactiveIcon: _setupIcon(ImageRes.homeTab1Nor.toImage, logic.unreadMsgCount.value),
title: StrRes.home,
textStyle: Styles.ts_0089FF_10sp_semibold,
),
),
PersistentTabConfig(
screen: ContactsPage(),
item: ItemConfig(
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,
),
),
PersistentTabConfig(
screen: DiscoverPage(),
item: ItemConfig(
icon: ImageRes.homeTab3Sel.toImage,
inactiveIcon: ImageRes.homeTab3Nor.toImage,
title: StrRes.workbench,
textStyle: Styles.ts_0089FF_10sp_semibold,
),
),
PersistentTabConfig(
screen: MinePage(),
item: ItemConfig(
icon: ImageRes.homeTab4Sel.toImage,
inactiveIcon: ImageRes.homeTab4Nor.toImage,
title: StrRes.mine,
textStyle: Styles.ts_0089FF_10sp_semibold,
),
),
];
Widget _setupIcon(Widget icon, int unReadCount) {
return Stack(
alignment: Alignment.center,
children: [
icon,
Positioned(
top: 0,
right: 0,
child: Transform.translate(
offset: const Offset(2, -2),
child: UnreadCountView(count: unReadCount),
),
),
],
);
}
@override
Widget build(BuildContext context) {
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),
],
),
),
navBarOverlap: const NavBarOverlap.none(),
screenTransitionAnimation: const ScreenTransitionAnimation.none(),
),
),
);
}
}