1
This commit is contained in:
@@ -14,7 +14,9 @@ import 'auth_provider.dart';
|
||||
enum FeedStrategy {
|
||||
recommend('recommend', '推荐'),
|
||||
latest('latest', '最新'),
|
||||
hot('hot', '热度');
|
||||
hot('hot', '热度'),
|
||||
liked('liked', '口碑'),
|
||||
viewed('viewed', '热播');
|
||||
|
||||
const FeedStrategy(this.apiValue, this.label);
|
||||
|
||||
@@ -22,6 +24,15 @@ enum FeedStrategy {
|
||||
final String label;
|
||||
}
|
||||
|
||||
/// Feed 顶部当前选中的策略:HomeShell 切底部 Tab 回来时,
|
||||
/// 只恢复该策略对应的播放器池(其余池保持挂起,防止幽灵声)
|
||||
final activeFeedStrategyProvider =
|
||||
StateProvider<FeedStrategy>((_) => FeedStrategy.recommend);
|
||||
|
||||
/// 首页底部 Tab 当前是否可见:App 回前台时仅在可见状态下恢复播放
|
||||
/// (否则在"我的"等页面退后台再回来会误恢复声音)
|
||||
final feedTabVisibleProvider = StateProvider<bool>((_) => true);
|
||||
|
||||
/// Feed 页 UI 事件(Notifier 不持有 BuildContext,通过事件流驱动弹窗/Toast)
|
||||
sealed class FeedEvent {
|
||||
const FeedEvent();
|
||||
@@ -148,6 +159,17 @@ class FeedNotifier extends StateNotifier<FeedState> {
|
||||
}
|
||||
}
|
||||
|
||||
/// 从全屏播放器返回后恢复:stopAll 清空了槽位,重新绑定当前页并播放。
|
||||
/// 不上报观看(本次进入 Feed 时已上报过,且 _bindAndReport 有按日去重)。
|
||||
Future<void> rebindCurrent() async {
|
||||
final index = state.currentIndex;
|
||||
if (index < 0 || index >= state.items.length) return;
|
||||
await pool.bindWindow(
|
||||
index,
|
||||
[for (final v in state.items) (videoId: v.videoId, url: resolvePlayUrl(v))],
|
||||
);
|
||||
}
|
||||
|
||||
/// 翻页:滑出即暂停、滑入自动播放并上报观看计费(《01-开发文档》5.3)
|
||||
void onPageChanged(int index) {
|
||||
// 立即静音全部非目标槽位,防止翻页动画期间多个视频同时出声
|
||||
|
||||
Reference in New Issue
Block a user