Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/pages/common/common_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,13 @@ abstract class CommonPageState<T extends StatefulWidget> extends State<T> {
case .forward:
_showTopBar?.value = true;
_showBottomBar?.value = true;
if (_mainController.useNativeTabs && Pref.hideBottomBar) {
if (_mainController.useNativeTabs.value && Pref.hideBottomBar) {
HarmonyChannel.setShellBarsScrollHidden(false);
}
case .reverse:
_showTopBar?.value = false;
_showBottomBar?.value = false;
if (_mainController.useNativeTabs && Pref.hideBottomBar) {
if (_mainController.useNativeTabs.value && Pref.hideBottomBar) {
HarmonyChannel.setShellBarsScrollHidden(true);
}
case _:
Expand Down Expand Up @@ -82,7 +82,7 @@ abstract class CommonPageState<T extends StatefulWidget> extends State<T> {
final scrollDelta = notification.scrollDelta ?? 0;
if (pixel < 0.0 && scrollDelta > 0) return false;
// 同步原生 HDS 底栏滚动显隐
if (_mainController.useNativeTabs && Pref.hideBottomBar) {
if (_mainController.useNativeTabs.value && Pref.hideBottomBar) {
HarmonyChannel.setShellBarsScrollHidden(
_barOffset!.value > Style.topBarHeight / 2,
);
Expand Down
4 changes: 2 additions & 2 deletions lib/pages/main/controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class MainController extends GetxController

/// 鸿蒙原生 HDS 底栏(API >= 23 时由原生渲染液态玻璃页签栏)
/// 修改设置后需重启应用生效
bool useNativeTabs = false;
final RxBool useNativeTabs = false.obs;

final useSideBar = Pref.useSideBar;
final mainTabBarView = Pref.mainTabBarView;
Expand Down Expand Up @@ -142,7 +142,7 @@ class MainController extends GetxController
final apiVersion = await HarmonyChannel.getDeviceInfo();
final enableHdsBar = Pref.enableHdsBar;
final useNative = apiVersion != null && apiVersion >= 23 && enableHdsBar;
useNativeTabs = useNative;
useNativeTabs.value = useNative;
HarmonyChannel.setShellBars(useNativeTabs: useNative);
}

Expand Down
35 changes: 23 additions & 12 deletions lib/pages/main/view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ class _MainAppState extends PopScopeState<MainApp>
final _mainController = Get.put(MainController());
late final _setting = GStorage.setting;
late EdgeInsets _padding;
/// 缓存当前主题主色值,供 ever 回调读取
int _primaryColorValue = 0;

@override
bool get initCanPop => false;
Expand All @@ -54,6 +56,14 @@ class _MainAppState extends PopScopeState<MainApp>
void initState() {
super.initState();
addObserverMobile(this);
// 监听 useNativeTabs 异步赋值(_initHdsBar 完成时触发)
ever(_mainController.useNativeTabs, (_) {
if (_mainController.useNativeTabs.value && _primaryColorValue != 0) {
HarmonyChannel.setTabSelectedColor(
'#${_primaryColorValue.toRadixString(16).padLeft(8, '0').substring(2)}',
);
}
});
if (PlatformUtils.isDesktop) {
windowManager
..addListener(this)
Expand Down Expand Up @@ -81,11 +91,12 @@ class _MainAppState extends PopScopeState<MainApp>
if (!_mainController.useSideBar) {
_mainController.useBottomNav = MediaQuery.sizeOf(context).isPortrait;
}
// 缓存主题主色,供 ever 回调在 useNativeTabs 异步就绪后补发
_primaryColorValue = Theme.of(context).colorScheme.primary.value;
// 同步主题色到 ArkTS HdsTabs 底栏
if (_mainController.useNativeTabs) {
final primary = Theme.of(context).colorScheme.primary;
if (_mainController.useNativeTabs.value) {
HarmonyChannel.setTabSelectedColor(
'#${primary.value.toRadixString(16).padLeft(8, '0').substring(2)}',
'#${_primaryColorValue.toRadixString(16).padLeft(8, '0').substring(2)}',
);
}
}
Expand Down Expand Up @@ -279,13 +290,13 @@ class _MainAppState extends PopScopeState<MainApp>
}
}

Widget? get _bottomNav {
// 非响应式读取:useNativeTabs 仅在冷启动时由 _initHdsBar 设置
// 修改设置后需重启生效,避免 Obx 包裹 Scaffold 导致无限重建
if (_mainController.useNativeTabs) {
return null;
Widget get _bottomNav {
// 响应式读取:useNativeTabs _initHdsBar 异步赋值
// Obx 仅包裹底栏部分,避免包裹 Scaffold 导致无限重建
if (_mainController.useNativeTabs.value) {
return const SizedBox.shrink();
}
Widget? bottomNav = _mainController.navigationBars.length > 1
final Widget bottomNav = _mainController.navigationBars.length > 1
? _mainController.enableMYBar
? Obx(
() => NavigationBar(
Expand Down Expand Up @@ -322,8 +333,8 @@ class _MainAppState extends PopScopeState<MainApp>
.toList(),
),
)
: null;
if (bottomNav != null && _mainController.hideBottomBar) {
: const SizedBox.shrink();
if (_mainController.hideBottomBar) {
if (_mainController.barOffset case final barOffset?) {
return Obx(
() => FractionalTranslation(
Expand Down Expand Up @@ -462,7 +473,7 @@ class _MainAppState extends PopScopeState<MainApp>
),
child: child,
),
bottomNavigationBar: _bottomNav,
bottomNavigationBar: Obx(() => _bottomNav),
);

if (PlatformUtils.isMobile) {
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
# update when release
version: 2.0.2+5227
version: 2.0.2+5229

environment:
sdk: ">=3.11.1"
Expand Down
Loading