1
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
@@ -26,16 +28,24 @@ class _HomeShellState extends ConsumerState<HomeShell> {
|
||||
|
||||
void _onTabSelected(int i) {
|
||||
if (i == _index) return;
|
||||
// 切到非首页:暂停所有 Feed 策略的播放器池(IndexedStack 保活,否则声音会继续)
|
||||
// 切到非首页:挂起所有 Feed 策略的播放器池(IndexedStack 保活,
|
||||
// suspend 会同时阻止在途 open 完成后自动播放,杜绝后台幽灵声)
|
||||
if (i != 0) {
|
||||
for (final s in _feedStrategies) {
|
||||
ref.read(feedProvider(s).notifier).pool.pauseCurrent();
|
||||
ref.read(feedProvider(s).notifier).pool.suspend();
|
||||
}
|
||||
}
|
||||
ref.read(feedTabVisibleProvider.notifier).state = i == 0;
|
||||
setState(() => _index = i);
|
||||
// 切回首页:恢复当前策略播放(FeedScreen 内部 _strategy 是 recommend)
|
||||
// 切回首页:只恢复当前选中策略的池(其余保持挂起)
|
||||
if (i == 0) {
|
||||
ref.read(feedProvider(FeedStrategy.recommend).notifier).pool.playCurrent();
|
||||
final active = ref.read(activeFeedStrategyProvider);
|
||||
final notifier = ref.read(feedProvider(active).notifier);
|
||||
unawaited(() async {
|
||||
await notifier.pool.resume();
|
||||
// 兜底:挂起期间首屏 bind 可能尚未发生,补一次当前页绑定播放
|
||||
await notifier.rebindCurrent();
|
||||
}());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user