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 10 import 'package:wow_english/pages/user/bloc/user_bloc.dart';
11 11 import 'package:wow_english/route/route.dart';
12 12  
  13 +import '../route/custom_navigator_observer.dart';
  14 +
13 15 class App extends StatelessWidget {
14 16 const App([this._navigatorObserver]);
15 17  
... ... @@ -49,7 +51,7 @@ class App extends StatelessWidget {
49 51 navigatorObservers: <NavigatorObserver>[
50 52 // 带入ApmNavigatorObserver实例用于路由监听
51 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 40 }
41 41 }
42 42  
  43 + void reset() {
  44 + _isPlaying = false;
  45 + }
  46 +
43 47 // void dispose() {
44 48 // _audioPlayer.dispose();
45 49 // }
... ...
lib/pages/module/course_module_page.dart
... ... @@ -94,12 +94,10 @@ class _LessonPageView extends StatelessWidget {
94 94 // color: bloc.currentPageIndex == index
95 95 // ? Colors.red
96 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 101 borderRadius: BorderRadius.circular(5.r),
104 102 border: Border.all(
105 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 30 \ No newline at end of file
... ...