diff --git a/lib/pages/home/bloc.dart b/lib/pages/home/bloc.dart index 0358ecd..6cf5a7c 100644 --- a/lib/pages/home/bloc.dart +++ b/lib/pages/home/bloc.dart @@ -44,7 +44,7 @@ class HomeBloc extends Bloc { return; } Log.d( - "WQF _checkUpdate appVersionEntity: $appVersionEntity localVersion=$localVersion"); + "HomeBloc _checkUpdate appVersionEntity: $appVersionEntity localVersion=$localVersion"); if (localVersion < int.parse(appVersionEntity.version ?? '0')) { emit(UpdateDialogState( appVersionEntity.volType == UpdateStrategy.FORCE.name, diff --git a/lib/pages/home/view.dart b/lib/pages/home/view.dart index 716cc0c..c1d86b7 100644 --- a/lib/pages/home/view.dart +++ b/lib/pages/home/view.dart @@ -60,8 +60,8 @@ class _HomePageView extends StatelessWidget { child: Column( children: [ BaseHomeHeaderWidget( - callBack: (value) => { - AudioPlayerUtil.getInstance() + callBack: (value) async => { + await AudioPlayerUtil.getInstance() .playAudio(AudioPlayerUtilType.touch), bloc.exchangeResult = value['exchange'], bloc.add(ExchangeSuccessEvent()) @@ -113,15 +113,15 @@ class _HomePageView extends StatelessWidget { builder: (context, userState) { return GestureDetector( onTap: () { - _checkPermission(() { - AudioPlayerUtil.getInstance().pause(); + _checkPermission(() async { + await AudioPlayerUtil.getInstance().pause(); Navigator.of(context).pushNamed( AppRouteName.webView, arguments: { 'urlStr': AppConsts.xiaoeShopUrl, 'webViewTitle': 'Wow精选' - }).then((value) => { - AudioPlayerUtil.getInstance().playAudio( + }).then((value) async => { + await AudioPlayerUtil.getInstance().playAudio( AudioPlayerUtilType.touch), }); }, bloc); diff --git a/lib/pages/home/widgets/BaseHomeHeaderWidget.dart b/lib/pages/home/widgets/BaseHomeHeaderWidget.dart index 14efa1d..0db3d8e 100644 --- a/lib/pages/home/widgets/BaseHomeHeaderWidget.dart +++ b/lib/pages/home/widgets/BaseHomeHeaderWidget.dart @@ -84,8 +84,8 @@ class BaseHomeHeaderWidget extends StatelessWidget { offstage: AppConfigHelper.shouldHidePay() || !UserUtil.isLogined(), child: GestureDetector( - onTap: () => { - AudioPlayerUtil.getInstance().pause(), + onTap: () async => { + await AudioPlayerUtil.getInstance().pause(), pushNamed(AppRouteName.shop).then((value) { if (value != null) { if (callBack == null) { @@ -115,9 +115,9 @@ class BaseHomeHeaderWidget extends StatelessWidget { ); } - void onUserClick() { + Future onUserClick() async { if (UserUtil.isLogined()) { - AudioPlayerUtil.getInstance().pause(); + await AudioPlayerUtil.getInstance().pause(); pushNamed(AppRouteName.user).then((value) { if (value != null) { if (callBack == null) { diff --git a/lib/pages/section/bloc/section_bloc.dart b/lib/pages/section/bloc/section_bloc.dart index 02ee67c..4df2807 100644 --- a/lib/pages/section/bloc/section_bloc.dart +++ b/lib/pages/section/bloc/section_bloc.dart @@ -64,15 +64,10 @@ class SectionBloc extends Bloc { on(_requestEnterClass); on(_requestVideoLesson); on(_pageControllerChange); - on((event, emit) { - AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.countWithMe); + on((event, emit) async { + await AudioPlayerUtil.getInstance().playAudio(AudioPlayerUtilType.countWithMe); }); } - @override - Future close() { - AudioPlayerUtil.getInstance().pause(); - return super.close(); - } void _requestSectionsData( RequestDataEvent event, Emitter emitter) async { diff --git a/lib/pages/unit/bloc.dart b/lib/pages/unit/bloc.dart index 8a77215..5f45097 100644 --- a/lib/pages/unit/bloc.dart +++ b/lib/pages/unit/bloc.dart @@ -48,9 +48,10 @@ class UnitBloc extends Bloc { return _moduleEntity?.code ?? _unitData?.courseModuleCode; } - void headerActionEvent(HeaderActionType type) { - AudioPlayerUtil.getInstance().pause(); + Future headerActionEvent(HeaderActionType type) async { + await AudioPlayerUtil.getInstance().pause(); if (type == HeaderActionType.video) { + //视频跟读暂时隐藏了 pushNamed(AppRouteName.reAfter); } else if (type == HeaderActionType.phase) { pushNamed(AppRouteName.courseModule).then((value) => { diff --git a/lib/pages/unit/view.dart b/lib/pages/unit/view.dart index 285e693..78148c7 100644 --- a/lib/pages/unit/view.dart +++ b/lib/pages/unit/view.dart @@ -62,12 +62,12 @@ class UnitPage extends StatelessWidget { CourseUnitDetail? data = bloc.unitData?.courseUnitVOList?[index]; return GestureDetector( - onTap: () { + onTap: () async { if (data.lock == true) { showToast('当前单元课程暂未解锁'); return; } - AudioPlayerUtil.getInstance().pause(); + // await AudioPlayerUtil.getInstance().pause(); pushNamed(AppRouteName.courseSection, arguments: { 'courseUnitEntity': bloc.unitData, diff --git a/lib/pages/user/setting/reback_page.dart b/lib/pages/user/setting/reback_page.dart index 879d586..33edfe0 100644 --- a/lib/pages/user/setting/reback_page.dart +++ b/lib/pages/user/setting/reback_page.dart @@ -26,73 +26,87 @@ class ReBackPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: const WEAppBar( - titleText: '我要反馈', - ), - body: Container( - color: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: 24.w + appBar: const WEAppBar( + titleText: '我要反馈', ), - child: SafeArea( - child: Column( - children: [ - 20.verticalSpace, - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - '请输入您要反馈的问题和意见,10-500个字', - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 19.sp, - color: HexColor('#333333') - ), - ), - Text( - '48/500', - textAlign: TextAlign.right, - style: TextStyle( - fontSize: 19.sp, - color: HexColor('#333333') - ),) - ], - ), - 9.5.verticalSpace, - Expanded( - child: Container( - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage('bg_reback'.assetPng) + body: Container( + color: Colors.white, + padding: EdgeInsets.symmetric(horizontal: 10.w), + child: SafeArea( + child: LayoutBuilder(builder: (context, constraints) { + return SingleChildScrollView( + child: ConstrainedBox( + constraints: BoxConstraints( + minHeight: constraints.maxHeight, + ), + child: IntrinsicHeight( + child: Column( + children: [ + 20.verticalSpace, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '请输入您要反馈的问题和意见,10-500个字', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 19.sp, color: HexColor('#333333')), + ), + Text( + '48/500', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 19.sp, color: HexColor('#333333')), + ) + ], + ), + 9.5.verticalSpace, + Expanded( + child: Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage('bg_reback'.assetPng), + fit: BoxFit.fill)), + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 10, horizontal: 16), + // 设置对称内边距 + child: TextField( + textInputAction: TextInputAction.done, + decoration: InputDecoration( + border: InputBorder.none, + hintStyle: TextStyle( + fontSize: 16.sp, + color: const Color(0xFF999999))), + ), + ), + ), + ), + 4.5.verticalSpace, + Container( + decoration: BoxDecoration( + image: DecorationImage( + fit: BoxFit.fill, + image: AssetImage(_canEnsure + ? 're_button'.assetPng + : 're_button_dis'.assetPng))), + alignment: Alignment.center, + width: 91.w, + height: 45.h, + child: Text( + '提交', + textAlign: TextAlign.center, + style: + TextStyle(color: Colors.white, fontSize: 17.sp), + ), ) + ], ), ), ), - 4.5.verticalSpace, - Container( - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage(_canEnsure?'re_button'.assetPng:'re_button_dis'.assetPng) - ) - ), - alignment: Alignment.center, - width: 91.w, - height: 45.h, - child: Text( - '提交', - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.white, - fontSize: 17.sp - ), - ), - ) - ], - ), + ); + }), ), - ) - ); + )); } -} \ No newline at end of file +} diff --git a/lib/utils/audio_player_util.dart b/lib/utils/audio_player_util.dart index 1dbc9cc..b504c70 100644 --- a/lib/utils/audio_player_util.dart +++ b/lib/utils/audio_player_util.dart @@ -2,6 +2,8 @@ import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/cupertino.dart'; import 'package:wow_english/common/extension/string_extension.dart'; +import 'log_util.dart'; + enum AudioPlayerUtilType { welcomeToWow('welcome_to_wow'), classTime('class_time'), @@ -24,6 +26,7 @@ class AudioPlayerUtil extends WidgetsBindingObserver { late AudioPlayer _audioPlayer; late AudioPlayerUtilType currentType; bool _wasPlaying = false; + static const TAG = "AudioPlayerUtil"; // 私有构造函数 AudioPlayerUtil._internal() { @@ -58,6 +61,7 @@ class AudioPlayerUtil extends WidgetsBindingObserver { // 播放音频 Future playAudio(AudioPlayerUtilType type) async { + Log.d("$TAG playAudio $type"); currentType = type; String path = type.path; await _audioPlayer.play(AssetSource(path.assetMp3), volume: 0.5); @@ -66,11 +70,13 @@ class AudioPlayerUtil extends WidgetsBindingObserver { // stop Future stop() async { + Log.d("$TAG stop _audioPlayer.state=${_audioPlayer.state}"); await _audioPlayer.stop(); } // pause Future pause() async { + Log.d("$TAG pause _audioPlayer.state=${_audioPlayer.state}"); if (_audioPlayer.state == PlayerState.playing) { await _audioPlayer.pause(); } @@ -78,6 +84,7 @@ class AudioPlayerUtil extends WidgetsBindingObserver { // resume Future resume() async { + Log.d("$TAG resume _audioPlayer.state=${_audioPlayer.state}"); if (_audioPlayer.state == PlayerState.paused) { await _audioPlayer.resume(); } @@ -85,6 +92,7 @@ class AudioPlayerUtil extends WidgetsBindingObserver { @override void didChangeAppLifecycleState(AppLifecycleState state) async { + Log.d("$TAG didChangeAppLifecycleState appState=$state _wasPlaying=$_wasPlaying _audioPlayer.state=${_audioPlayer.state}"); if (state == AppLifecycleState.paused) { if (_audioPlayer.state == PlayerState.playing) { _wasPlaying = true; @@ -99,6 +107,7 @@ class AudioPlayerUtil extends WidgetsBindingObserver { } void dispose() { + Log.d("$TAG dispose _audioPlayer.state=${_audioPlayer.state}"); _audioPlayer.dispose(); WidgetsBinding.instance.removeObserver(this); }