From 9d058cb499fdcc34402ba8274d71886f381d9f16 Mon Sep 17 00:00:00 2001 From: wuqifeng <540416539@qq.com> Date: Sat, 5 Sep 2026 13:11:55 +0800 Subject: [PATCH] feat: 调整首页导航栏入口布局 --- assets/images/wow_selected_header.png | Bin 0 -> 384871 bytes lib/pages/home/view.dart | 87 +++++++++++++++++++++++++++++++++++---------------------------------------------------- lib/pages/home/widgets/BaseHomeHeaderWidget.dart | 27 +++++++++++++++++++++++++-- 3 files changed, 60 insertions(+), 54 deletions(-) create mode 100644 assets/images/wow_selected_header.png diff --git a/assets/images/wow_selected_header.png b/assets/images/wow_selected_header.png new file mode 100644 index 0000000..0f116eb Binary files /dev/null and b/assets/images/wow_selected_header.png differ diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 19874bc..48dc98b 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -15,7 +15,6 @@ import 'package:wow_english/common/utils/popup_manager.dart'; import 'package:wow_english/models/app_version_entity.dart'; import 'package:wow_english/pages/home/state.dart'; import 'package:wow_english/pages/home/widgets/BaseHomeHeaderWidget.dart'; -import 'package:wow_english/pages/home/widgets/ShakeImage.dart'; import 'package:wow_english/pages/user/bloc/user_bloc.dart'; import 'package:wow_english/utils/audio_player_util.dart'; @@ -69,6 +68,8 @@ class _HomePageView extends StatelessWidget { child: Column( children: [ BaseHomeHeaderWidget( + onWowSelected: () => + _checkPermission(() => _openWowSelected(context), bloc), callBack: (value) async => { await AudioPlayerUtil.getInstance() .playAudio(AudioPlayerUtilType.touch), @@ -123,57 +124,7 @@ class _HomePageView extends StatelessWidget { ), ), ), - BlocBuilder( - builder: (context, userState) { - return GestureDetector( - onTap: () { - _checkPermission(() async { - await AudioPlayerUtil.getInstance().pause(); - if (Platform.isIOS) { - await LimitingDirectionCsx - .setScreenDirection( - DeviceDirectionMask.Portrait); - } else { - await SystemChrome - .setPreferredOrientations([ - DeviceOrientation.portraitUp, - DeviceOrientation.portraitDown - ]); - } - Navigator.of(context).pushNamed( - AppRouteName.webView, - arguments: { - 'urlStr': AppConsts.xiaoeShopUrl, - 'webViewTitle': 'Wow精选' - }).then((value) async => { - if (Platform.isIOS) - { - await LimitingDirectionCsx - .setScreenDirection( - DeviceDirectionMask - .Landscape), - } - else - { - await SystemChrome - .setPreferredOrientations([ - DeviceOrientation.landscapeLeft, - DeviceOrientation.landscapeRight - ]), - }, - await AudioPlayerUtil.getInstance() - .playAudio( - AudioPlayerUtilType.touch), - }); - }, bloc); - }, - child: Offstage( - offstage: AppConfigHelper.shouldHidePay() || - !UserUtil.isLogined() || - UserUtil.isAppReviewAccount(), - child: const ShakeImage(), - )); - }), + const Expanded(child: SizedBox.shrink()), Expanded( child: BlocBuilder( builder: (context, userState) { @@ -226,6 +177,38 @@ class _HomePageView extends StatelessWidget { ); }); + Future _openWowSelected(BuildContext context) async { + await AudioPlayerUtil.getInstance().pause(); + try { + if (Platform.isIOS) { + await LimitingDirectionCsx.setScreenDirection( + DeviceDirectionMask.Portrait); + } else { + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + DeviceOrientation.portraitDown, + ]); + } + + if (!context.mounted) return; + await Navigator.of(context).pushNamed(AppRouteName.webView, arguments: { + 'urlStr': AppConsts.xiaoeShopUrl, + 'webViewTitle': 'Wow精选', + }); + } finally { + if (Platform.isIOS) { + await LimitingDirectionCsx.setScreenDirection( + DeviceDirectionMask.Landscape); + } else { + await SystemChrome.setPreferredOrientations([ + DeviceOrientation.landscapeLeft, + DeviceOrientation.landscapeRight, + ]); + } + await AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.touch); + } + } + _checkPermission(VoidCallback onAllowed, HomeBloc bloc) { if (UserUtil.isLogined()) { if (AppConfigHelper.shouldHidePay()) { diff --git a/lib/pages/home/widgets/BaseHomeHeaderWidget.dart b/lib/pages/home/widgets/BaseHomeHeaderWidget.dart index 28d517d..f3bf0c2 100644 --- a/lib/pages/home/widgets/BaseHomeHeaderWidget.dart +++ b/lib/pages/home/widgets/BaseHomeHeaderWidget.dart @@ -15,10 +15,16 @@ import 'customer_service_qr_dialog.dart'; typedef HeaderCallback = void Function(dynamic); class BaseHomeHeaderWidget extends StatelessWidget { - const BaseHomeHeaderWidget({super.key, this.entity, this.callBack}); + const BaseHomeHeaderWidget({ + super.key, + this.entity, + this.callBack, + this.onWowSelected, + }); final CourseEntity? entity; final HeaderCallback? callBack; + final VoidCallback? onWowSelected; @override Widget build(BuildContext context) { @@ -81,6 +87,23 @@ class BaseHomeHeaderWidget extends StatelessWidget { textAlign: TextAlign.left, style: TextStyle(color: Colors.white, fontSize: 30.0), )), + Offstage( + offstage: AppConfigHelper.shouldHidePay() || + !UserUtil.isLogined() || + UserUtil.isAppReviewAccount(), + child: GestureDetector( + onTap: onWowSelected, + child: Padding( + padding: EdgeInsets.only(right: 10.w), + child: Image.asset( + 'wow_selected_header'.assetPng, + width: 105.w, + height: 34.h, + fit: BoxFit.contain, + ), + ), + ), + ), FutureBuilder( future: AppConfigHelper.getAppConfig(), builder: (context, snapshot) { @@ -92,7 +115,7 @@ class BaseHomeHeaderWidget extends StatelessWidget { onTap: () => showCustomerServiceQrDialog(context, customerQr), child: Padding( - padding: EdgeInsets.only(right: 12.w), + padding: EdgeInsets.only(right: 10.w), child: Image.asset( 'ic_customer_service'.assetPng, width: 90.w, -- libgit2 0.22.2