Commit 0427feebc739acfced4278294b06fb4e6b90afc1
1 parent
42f15f6c
feat:增加播放器对页面生命周期的感知,route变化时重置ClickWithMusicController#_isPlaying,规避点击播放音乐过程中返回页面导致状态泄漏,后面点击都无法响应
Showing
4 changed files
with
40 additions
and
7 deletions
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 |