Commit 0427feebc739acfced4278294b06fb4e6b90afc1

Authored by 吴启风
1 parent 42f15f6c

feat:增加播放器对页面生命周期的感知,route变化时重置ClickWithMusicController#_isPlaying,规避点击播放音乐过程中返回页面导致状态泄漏,后面点击都无法响应

lib/app/app.dart
@@ -10,6 +10,8 @@ import 'package:wow_english/pages/tab/blocs/tab_bloc.dart'; @@ -10,6 +10,8 @@ import 'package:wow_english/pages/tab/blocs/tab_bloc.dart';
10 import 'package:wow_english/pages/user/bloc/user_bloc.dart'; 10 import 'package:wow_english/pages/user/bloc/user_bloc.dart';
11 import 'package:wow_english/route/route.dart'; 11 import 'package:wow_english/route/route.dart';
12 12
  13 +import '../route/custom_navigator_observer.dart';
  14 +
13 class App extends StatelessWidget { 15 class App extends StatelessWidget {
14 const App([this._navigatorObserver]); 16 const App([this._navigatorObserver]);
15 17
@@ -49,7 +51,7 @@ class App extends StatelessWidget { @@ -49,7 +51,7 @@ class App extends StatelessWidget {
49 navigatorObservers: <NavigatorObserver>[ 51 navigatorObservers: <NavigatorObserver>[
50 // 带入ApmNavigatorObserver实例用于路由监听 52 // 带入ApmNavigatorObserver实例用于路由监听
51 // 如果不带入SDK监听器将无法获知页面(PV)入栈退栈行为,错误率(Dart异常数/FlutterPV次数)将异常攀升。 53 // 如果不带入SDK监听器将无法获知页面(PV)入栈退栈行为,错误率(Dart异常数/FlutterPV次数)将异常攀升。
52 - _navigatorObserver ?? ApmNavigatorObserver.singleInstance 54 + _navigatorObserver ?? ApmNavigatorObserver.singleInstance, CustomNavigatorObserver()
53 ], 55 ],
54 ), 56 ),
55 )), 57 )),
lib/common/utils/click_with_music_controller.dart
@@ -40,6 +40,10 @@ class ClickWithMusicController { @@ -40,6 +40,10 @@ class ClickWithMusicController {
40 } 40 }
41 } 41 }
42 42
  43 + void reset() {
  44 + _isPlaying = false;
  45 + }
  46 +
43 // void dispose() { 47 // void dispose() {
44 // _audioPlayer.dispose(); 48 // _audioPlayer.dispose();
45 // } 49 // }
lib/pages/module/course_module_page.dart
@@ -94,12 +94,10 @@ class _LessonPageView extends StatelessWidget { @@ -94,12 +94,10 @@ class _LessonPageView extends StatelessWidget {
94 // color: bloc.currentPageIndex == index 94 // color: bloc.currentPageIndex == index
95 // ? Colors.red 95 // ? Colors.red
96 // : Colors.white, 96 // : Colors.white,
97 - color:  
98 - parseColor(model.getSafeThemeColor())  
99 - .withOpacity(  
100 - bloc.currentPageIndex == index  
101 - ? 1  
102 - : 0.15), 97 + color: parseColor(model.getSafeThemeColor())
  98 + .withOpacity(bloc.currentPageIndex == index
  99 + ? 1
  100 + : 0.15),
103 borderRadius: BorderRadius.circular(5.r), 101 borderRadius: BorderRadius.circular(5.r),
104 border: Border.all( 102 border: Border.all(
105 width: 0.5, 103 width: 0.5,
lib/route/custom_navigator_observer.dart 0 → 100644
  1 +
  2 +
  3 +import 'package:flutter/cupertino.dart';
  4 +import 'package:wow_english/common/utils/click_with_music_controller.dart';
  5 +import 'package:wow_english/utils/audio_player_util.dart';
  6 +
  7 +import '../utils/log_util.dart';
  8 +
  9 +class CustomNavigatorObserver extends RouteObserver<PageRoute<dynamic>> {
  10 + @override
  11 + void didPush(Route route, Route? previousRoute) {
  12 + Log.d("WQF CustomNavigatorObserver didPush route=$route previousRoute=$previousRoute");
  13 + if (route is PageRoute) {
  14 + ClickWithMusicController.instance.reset();
  15 + }
  16 + super.didPush(route, previousRoute);
  17 + }
  18 +
  19 + @override
  20 + void didPop(Route route, Route? previousRoute) {
  21 + Log.d("WQF CustomNavigatorObserver didPop route=$route previousRoute=$previousRoute");
  22 + if (route is PageRoute) {
  23 + ClickWithMusicController.instance.reset();
  24 + }
  25 + super.didPop(route, previousRoute);
  26 + }
  27 +
  28 +
  29 +}
0 \ No newline at end of file 30 \ No newline at end of file