原因:迷你播放器挂在 Navigator overlay 上,层级高于底部弹层, 弹层里的歌单列表被它盖住,看起来像"没读到歌单"。 (日志确认查询正常:读到 1 个歌单) - RouteManager 抽到 services/route_manager.dart,新增临时隐藏开关 - 打开"加入歌单"弹层时隐藏迷你播放器,关闭后恢复 - main.dart 的 shouldShow 改用 showMiniPlayer(原来直接读路由,开关不生效) - 弹层底部加 SafeArea minimum + 16px 余量,不再贴着手势区 真机验证:弹层正常显示 "TL / 1 首",底部留出安全距离。
35 lines
967 B
Dart
35 lines
967 B
Dart
// lib/services/route_manager.dart
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
/// 路由管理器(控制 MiniPlayer 显示/隐藏)
|
|
class RouteManager extends ChangeNotifier {
|
|
static final RouteManager _instance = RouteManager._internal();
|
|
factory RouteManager() => _instance;
|
|
RouteManager._internal();
|
|
|
|
String _currentRoute = '/';
|
|
String get currentRoute => _currentRoute;
|
|
|
|
/// 弹层/对话框打开时临时隐藏迷你播放器,避免盖住内容
|
|
bool _temporarilyHidden = false;
|
|
|
|
bool get showMiniPlayer =>
|
|
!_temporarilyHidden &&
|
|
_currentRoute != '/player' &&
|
|
_currentRoute != '/playlist';
|
|
|
|
void setTemporarilyHidden(bool hidden) {
|
|
if (_temporarilyHidden == hidden) return;
|
|
_temporarilyHidden = hidden;
|
|
notifyListeners();
|
|
}
|
|
|
|
void updateRoute(String route) {
|
|
if (_currentRoute != route) {
|
|
_currentRoute = route;
|
|
debugPrint('📌 路由更新: $route');
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|