Commit 9d058cb499fdcc34402ba8274d71886f381d9f16
1 parent
af6af3c5
feat: 调整首页导航栏入口布局
Showing
3 changed files
with
60 additions
and
54 deletions
assets/images/wow_selected_header.png
0 → 100644
376 KB
lib/pages/home/view.dart
| @@ -15,7 +15,6 @@ import 'package:wow_english/common/utils/popup_manager.dart'; | @@ -15,7 +15,6 @@ import 'package:wow_english/common/utils/popup_manager.dart'; | ||
| 15 | import 'package:wow_english/models/app_version_entity.dart'; | 15 | import 'package:wow_english/models/app_version_entity.dart'; |
| 16 | import 'package:wow_english/pages/home/state.dart'; | 16 | import 'package:wow_english/pages/home/state.dart'; |
| 17 | import 'package:wow_english/pages/home/widgets/BaseHomeHeaderWidget.dart'; | 17 | import 'package:wow_english/pages/home/widgets/BaseHomeHeaderWidget.dart'; |
| 18 | -import 'package:wow_english/pages/home/widgets/ShakeImage.dart'; | ||
| 19 | import 'package:wow_english/pages/user/bloc/user_bloc.dart'; | 18 | import 'package:wow_english/pages/user/bloc/user_bloc.dart'; |
| 20 | import 'package:wow_english/utils/audio_player_util.dart'; | 19 | import 'package:wow_english/utils/audio_player_util.dart'; |
| 21 | 20 | ||
| @@ -69,6 +68,8 @@ class _HomePageView extends StatelessWidget { | @@ -69,6 +68,8 @@ class _HomePageView extends StatelessWidget { | ||
| 69 | child: Column( | 68 | child: Column( |
| 70 | children: [ | 69 | children: [ |
| 71 | BaseHomeHeaderWidget( | 70 | BaseHomeHeaderWidget( |
| 71 | + onWowSelected: () => | ||
| 72 | + _checkPermission(() => _openWowSelected(context), bloc), | ||
| 72 | callBack: (value) async => { | 73 | callBack: (value) async => { |
| 73 | await AudioPlayerUtil.getInstance() | 74 | await AudioPlayerUtil.getInstance() |
| 74 | .playAudio(AudioPlayerUtilType.touch), | 75 | .playAudio(AudioPlayerUtilType.touch), |
| @@ -123,57 +124,7 @@ class _HomePageView extends StatelessWidget { | @@ -123,57 +124,7 @@ class _HomePageView extends StatelessWidget { | ||
| 123 | ), | 124 | ), |
| 124 | ), | 125 | ), |
| 125 | ), | 126 | ), |
| 126 | - BlocBuilder<UserBloc, UserState>( | ||
| 127 | - builder: (context, userState) { | ||
| 128 | - return GestureDetector( | ||
| 129 | - onTap: () { | ||
| 130 | - _checkPermission(() async { | ||
| 131 | - await AudioPlayerUtil.getInstance().pause(); | ||
| 132 | - if (Platform.isIOS) { | ||
| 133 | - await LimitingDirectionCsx | ||
| 134 | - .setScreenDirection( | ||
| 135 | - DeviceDirectionMask.Portrait); | ||
| 136 | - } else { | ||
| 137 | - await SystemChrome | ||
| 138 | - .setPreferredOrientations([ | ||
| 139 | - DeviceOrientation.portraitUp, | ||
| 140 | - DeviceOrientation.portraitDown | ||
| 141 | - ]); | ||
| 142 | - } | ||
| 143 | - Navigator.of(context).pushNamed( | ||
| 144 | - AppRouteName.webView, | ||
| 145 | - arguments: { | ||
| 146 | - 'urlStr': AppConsts.xiaoeShopUrl, | ||
| 147 | - 'webViewTitle': 'Wow精选' | ||
| 148 | - }).then((value) async => { | ||
| 149 | - if (Platform.isIOS) | ||
| 150 | - { | ||
| 151 | - await LimitingDirectionCsx | ||
| 152 | - .setScreenDirection( | ||
| 153 | - DeviceDirectionMask | ||
| 154 | - .Landscape), | ||
| 155 | - } | ||
| 156 | - else | ||
| 157 | - { | ||
| 158 | - await SystemChrome | ||
| 159 | - .setPreferredOrientations([ | ||
| 160 | - DeviceOrientation.landscapeLeft, | ||
| 161 | - DeviceOrientation.landscapeRight | ||
| 162 | - ]), | ||
| 163 | - }, | ||
| 164 | - await AudioPlayerUtil.getInstance() | ||
| 165 | - .playAudio( | ||
| 166 | - AudioPlayerUtilType.touch), | ||
| 167 | - }); | ||
| 168 | - }, bloc); | ||
| 169 | - }, | ||
| 170 | - child: Offstage( | ||
| 171 | - offstage: AppConfigHelper.shouldHidePay() || | ||
| 172 | - !UserUtil.isLogined() || | ||
| 173 | - UserUtil.isAppReviewAccount(), | ||
| 174 | - child: const ShakeImage(), | ||
| 175 | - )); | ||
| 176 | - }), | 127 | + const Expanded(child: SizedBox.shrink()), |
| 177 | Expanded( | 128 | Expanded( |
| 178 | child: BlocBuilder<UserBloc, UserState>( | 129 | child: BlocBuilder<UserBloc, UserState>( |
| 179 | builder: (context, userState) { | 130 | builder: (context, userState) { |
| @@ -226,6 +177,38 @@ class _HomePageView extends StatelessWidget { | @@ -226,6 +177,38 @@ class _HomePageView extends StatelessWidget { | ||
| 226 | ); | 177 | ); |
| 227 | }); | 178 | }); |
| 228 | 179 | ||
| 180 | + Future<void> _openWowSelected(BuildContext context) async { | ||
| 181 | + await AudioPlayerUtil.getInstance().pause(); | ||
| 182 | + try { | ||
| 183 | + if (Platform.isIOS) { | ||
| 184 | + await LimitingDirectionCsx.setScreenDirection( | ||
| 185 | + DeviceDirectionMask.Portrait); | ||
| 186 | + } else { | ||
| 187 | + await SystemChrome.setPreferredOrientations([ | ||
| 188 | + DeviceOrientation.portraitUp, | ||
| 189 | + DeviceOrientation.portraitDown, | ||
| 190 | + ]); | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + if (!context.mounted) return; | ||
| 194 | + await Navigator.of(context).pushNamed(AppRouteName.webView, arguments: { | ||
| 195 | + 'urlStr': AppConsts.xiaoeShopUrl, | ||
| 196 | + 'webViewTitle': 'Wow精选', | ||
| 197 | + }); | ||
| 198 | + } finally { | ||
| 199 | + if (Platform.isIOS) { | ||
| 200 | + await LimitingDirectionCsx.setScreenDirection( | ||
| 201 | + DeviceDirectionMask.Landscape); | ||
| 202 | + } else { | ||
| 203 | + await SystemChrome.setPreferredOrientations([ | ||
| 204 | + DeviceOrientation.landscapeLeft, | ||
| 205 | + DeviceOrientation.landscapeRight, | ||
| 206 | + ]); | ||
| 207 | + } | ||
| 208 | + await AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.touch); | ||
| 209 | + } | ||
| 210 | + } | ||
| 211 | + | ||
| 229 | _checkPermission(VoidCallback onAllowed, HomeBloc bloc) { | 212 | _checkPermission(VoidCallback onAllowed, HomeBloc bloc) { |
| 230 | if (UserUtil.isLogined()) { | 213 | if (UserUtil.isLogined()) { |
| 231 | if (AppConfigHelper.shouldHidePay()) { | 214 | if (AppConfigHelper.shouldHidePay()) { |
lib/pages/home/widgets/BaseHomeHeaderWidget.dart
| @@ -15,10 +15,16 @@ import 'customer_service_qr_dialog.dart'; | @@ -15,10 +15,16 @@ import 'customer_service_qr_dialog.dart'; | ||
| 15 | typedef HeaderCallback = void Function(dynamic); | 15 | typedef HeaderCallback = void Function(dynamic); |
| 16 | 16 | ||
| 17 | class BaseHomeHeaderWidget extends StatelessWidget { | 17 | class BaseHomeHeaderWidget extends StatelessWidget { |
| 18 | - const BaseHomeHeaderWidget({super.key, this.entity, this.callBack}); | 18 | + const BaseHomeHeaderWidget({ |
| 19 | + super.key, | ||
| 20 | + this.entity, | ||
| 21 | + this.callBack, | ||
| 22 | + this.onWowSelected, | ||
| 23 | + }); | ||
| 19 | 24 | ||
| 20 | final CourseEntity? entity; | 25 | final CourseEntity? entity; |
| 21 | final HeaderCallback? callBack; | 26 | final HeaderCallback? callBack; |
| 27 | + final VoidCallback? onWowSelected; | ||
| 22 | 28 | ||
| 23 | @override | 29 | @override |
| 24 | Widget build(BuildContext context) { | 30 | Widget build(BuildContext context) { |
| @@ -81,6 +87,23 @@ class BaseHomeHeaderWidget extends StatelessWidget { | @@ -81,6 +87,23 @@ class BaseHomeHeaderWidget extends StatelessWidget { | ||
| 81 | textAlign: TextAlign.left, | 87 | textAlign: TextAlign.left, |
| 82 | style: TextStyle(color: Colors.white, fontSize: 30.0), | 88 | style: TextStyle(color: Colors.white, fontSize: 30.0), |
| 83 | )), | 89 | )), |
| 90 | + Offstage( | ||
| 91 | + offstage: AppConfigHelper.shouldHidePay() || | ||
| 92 | + !UserUtil.isLogined() || | ||
| 93 | + UserUtil.isAppReviewAccount(), | ||
| 94 | + child: GestureDetector( | ||
| 95 | + onTap: onWowSelected, | ||
| 96 | + child: Padding( | ||
| 97 | + padding: EdgeInsets.only(right: 10.w), | ||
| 98 | + child: Image.asset( | ||
| 99 | + 'wow_selected_header'.assetPng, | ||
| 100 | + width: 105.w, | ||
| 101 | + height: 34.h, | ||
| 102 | + fit: BoxFit.contain, | ||
| 103 | + ), | ||
| 104 | + ), | ||
| 105 | + ), | ||
| 106 | + ), | ||
| 84 | FutureBuilder( | 107 | FutureBuilder( |
| 85 | future: AppConfigHelper.getAppConfig(), | 108 | future: AppConfigHelper.getAppConfig(), |
| 86 | builder: (context, snapshot) { | 109 | builder: (context, snapshot) { |
| @@ -92,7 +115,7 @@ class BaseHomeHeaderWidget extends StatelessWidget { | @@ -92,7 +115,7 @@ class BaseHomeHeaderWidget extends StatelessWidget { | ||
| 92 | onTap: () => | 115 | onTap: () => |
| 93 | showCustomerServiceQrDialog(context, customerQr), | 116 | showCustomerServiceQrDialog(context, customerQr), |
| 94 | child: Padding( | 117 | child: Padding( |
| 95 | - padding: EdgeInsets.only(right: 12.w), | 118 | + padding: EdgeInsets.only(right: 10.w), |
| 96 | child: Image.asset( | 119 | child: Image.asset( |
| 97 | 'ic_customer_service'.assetPng, | 120 | 'ic_customer_service'.assetPng, |
| 98 | width: 90.w, | 121 | width: 90.w, |