Skip to content

Commit ffd3813

Browse files
committed
fix(exo)
1 parent 609073a commit ffd3813

4 files changed

Lines changed: 24 additions & 22 deletions

File tree

android/local.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
sdk.dir=D:\\Android\\sdk
2-
flutter.sdk=D:\\flutter\\flutter\\flutter
1+
sdk.dir=C:\\Users\\m1779\\AppData\\Local\\Android\\Sdk
2+
flutter.sdk=F:\\flutter-sdk\\flutter
33
flutter.buildMode=debug
44
flutter.versionName=2.0.17
55
flutter.versionCode=17

lib/player/adapters/video_player_adapter.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,16 @@ class BetterPlayerAdapter implements UnifiedPlayer {
133133
Future<void> hardDispose() async {
134134
if (_disposed) return;
135135
_disposed = true;
136-
_controller?.dispose();
136+
_initialized = false;
137+
if (_controller != null) {
138+
try {
139+
await _controller!.setVolume(0.0);
140+
await _controller!.pause();
141+
_controller!.dispose();
142+
} catch (e) {
143+
debugPrint("BetterPlayer dispose error: $e");
144+
}
145+
}
137146

138147
await _stateSubject.close();
139148
await _playingSubject.close();

lib/player/core/line_fallback_manager.dart

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,11 @@ class LineFallbackManager {
22
int _currentIndex = 0;
33

44
String next(List<String> lines) {
5-
if (lines.isEmpty) {
6-
throw Exception('No playable line');
7-
}
5+
if (lines.isEmpty) throw Exception('No playable line');
86

9-
_currentIndex++;
10-
11-
if (_currentIndex >= lines.length) {
12-
_currentIndex = 0;
13-
}
14-
15-
return lines[_currentIndex];
7+
final line = lines[_currentIndex]; // 先取当前
8+
_currentIndex = (_currentIndex + 1) % lines.length; // 再推进
9+
return line;
1610
}
1711

1812
void reset() {

lib/player/core/player_manager.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class PlayerManager {
145145
await switchEngine(_defaultEngine!, isManual: false);
146146
}
147147
final player = _currentPlayer;
148-
_isSwitchingDueToFallback = false;
148+
149149
if (player == null) {
150150
throw PlayerException(message: 'Current player is null', type: PlayerErrorType.lifecycle);
151151
}
@@ -168,6 +168,8 @@ class PlayerManager {
168168
final exception = PlayerException(message: 'Play failed', type: PlayerErrorType.unknown, error: e, stackTrace: s);
169169

170170
await _handleError(exception);
171+
} finally {
172+
_isSwitchingDueToFallback = false;
171173
}
172174
}
173175

@@ -383,21 +385,14 @@ class PlayerManager {
383385
}
384386

385387
Future<void> hardDispose() async {
386-
final player = _currentPlayer;
387-
if (player != null) {
388-
await player.hardDispose();
389-
}
390-
if (_runtimeEngine != null) {
391-
await playerPool.removeFromCache(_runtimeEngine!);
392-
}
393-
394388
// 清空 Dart 引用
395389
_currentPlayer = null;
396390
_runtimeEngine = null;
397391

398392
// 重置状态
399393
_stateSubject.add(PlayerState.idle);
400394
_playingSubject.add(false);
395+
await dispose();
401396
}
402397

403398
// =========================
@@ -490,6 +485,10 @@ class PlayerManager {
490485

491486
if (event) {
492487
_stateSubject.add(PlayerState.playing);
488+
if (_isSwitchingDueToFallback) {
489+
_errorCount = 0;
490+
_isSwitchingDueToFallback = false;
491+
}
493492
} else {
494493
_stateSubject.add(PlayerState.paused);
495494
}

0 commit comments

Comments
 (0)