fix(tv): smooth sidebar expansion behavior

This commit is contained in:
edde746
2026-05-22 03:54:34 +02:00
parent 487c7b87f6
commit fea973a72a
17 changed files with 277 additions and 99 deletions
+23 -3
View File
@@ -79,8 +79,9 @@ class MainScreenFocusScope extends InheritedWidget {
required super.child,
});
static MainScreenFocusScope? of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<MainScreenFocusScope>();
static MainScreenFocusScope? of(BuildContext context, {bool listen = true}) {
if (listen) return context.dependOnInheritedWidgetOfExactType<MainScreenFocusScope>();
return context.getElementForInheritedWidgetOfExactType<MainScreenFocusScope>()?.widget as MainScreenFocusScope?;
}
static double sideNavigationBleedOf(BuildContext context, {required bool alwaysKeepSidebarOpen}) {
@@ -116,6 +117,25 @@ class MainScreenFocusScope extends InheritedWidget {
}
}
class SideNavigationBleedBuilder extends StatelessWidget {
final double targetBleed;
final Widget? child;
final Widget Function(BuildContext context, double bleed, Widget? child) builder;
const SideNavigationBleedBuilder({super.key, required this.targetBleed, this.child, required this.builder});
@override
Widget build(BuildContext context) {
return TweenAnimationBuilder<double>(
tween: Tween(end: targetBleed),
duration: const Duration(milliseconds: 200),
curve: Curves.easeOutCubic,
child: child,
builder: builder,
);
}
}
@visibleForTesting
({double left, double width}) mainScreenSideNavigationContentLayout({
required double viewportWidth,
@@ -1312,7 +1332,7 @@ class _MainScreenState extends State<MainScreen>
focusSidebar: _focusSidebar,
focusContent: _focusContent,
isSidebarFocused: _isSidebarFocused,
sideNavigationWidth: contentLeftPadding,
sideNavigationWidth: targetContentOffset,
reservedSideNavigationWidth: reservedContentOffset,
foregroundWidth: contentLayout.width,
viewportWidth: viewportWidth,