fix(nav): hide active sidebar background during focus
This commit is contained in:
@@ -58,6 +58,58 @@ Future<void> _press(WidgetTester tester, LogicalKeyboardKey key) async {
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
BoxDecoration? _railItemDecoration(WidgetTester tester, Finder item) {
|
||||
return tester.widget<Container>(find.descendant(of: item, matching: find.byType(Container)).first).decoration
|
||||
as BoxDecoration?;
|
||||
}
|
||||
|
||||
Future<void> _pumpBasicRail(
|
||||
WidgetTester tester, {
|
||||
GlobalKey<SideNavigationRailState>? sideNavKey,
|
||||
bool isSidebarFocused = false,
|
||||
bool alwaysExpanded = false,
|
||||
}) async {
|
||||
await SettingsService.getInstance();
|
||||
|
||||
final librariesProvider = LibrariesProvider();
|
||||
addTearDown(librariesProvider.dispose);
|
||||
|
||||
final hiddenLibrariesProvider = HiddenLibrariesProvider();
|
||||
await hiddenLibrariesProvider.ensureInitialized();
|
||||
addTearDown(hiddenLibrariesProvider.dispose);
|
||||
|
||||
final manager = MultiServerManager();
|
||||
final aggregation = DataAggregationService(manager);
|
||||
final multiServerProvider = MultiServerProvider(manager, aggregation);
|
||||
addTearDown(multiServerProvider.dispose);
|
||||
|
||||
await tester.pumpWidget(
|
||||
TranslationProvider(
|
||||
child: MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider<LibrariesProvider>.value(value: librariesProvider),
|
||||
ChangeNotifierProvider<HiddenLibrariesProvider>.value(value: hiddenLibrariesProvider),
|
||||
ChangeNotifierProvider<MultiServerProvider>.value(value: multiServerProvider),
|
||||
],
|
||||
child: MaterialApp(
|
||||
theme: ThemeData(extensions: const [_testTokens]),
|
||||
home: Scaffold(
|
||||
body: SideNavigationRail(
|
||||
key: sideNavKey,
|
||||
selectedTab: NavigationTabId.discover,
|
||||
isSidebarFocused: isSidebarFocused,
|
||||
alwaysExpanded: alwaysExpanded,
|
||||
onDestinationSelected: (_) {},
|
||||
onLibrarySelected: (_) {},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
@@ -177,6 +229,25 @@ void main() {
|
||||
expect(surfaceOpacity.opacity, 0.0);
|
||||
});
|
||||
|
||||
testWidgets('expanded rail keeps selected background outside sidebar keyboard focus', (tester) async {
|
||||
await _pumpBasicRail(tester, alwaysExpanded: true);
|
||||
|
||||
final selectedItem = find.byType(NavigationRailItem).first;
|
||||
expect(_railItemDecoration(tester, selectedItem)?.color, _testTokens.text.withValues(alpha: 0.1));
|
||||
});
|
||||
|
||||
testWidgets('D-pad sidebar focus hides selected item background after focus moves', (tester) async {
|
||||
final sideNavKey = GlobalKey<SideNavigationRailState>();
|
||||
await _pumpBasicRail(tester, sideNavKey: sideNavKey, isSidebarFocused: true, alwaysExpanded: true);
|
||||
|
||||
sideNavKey.currentState!.focusActiveItem();
|
||||
await tester.pumpAndSettle();
|
||||
await _press(tester, LogicalKeyboardKey.arrowDown);
|
||||
|
||||
final selectedItem = find.byType(NavigationRailItem).first;
|
||||
expect(_railItemDecoration(tester, selectedItem)?.color, isNull);
|
||||
});
|
||||
|
||||
testWidgets('reports interaction expansion for shell content push', (tester) async {
|
||||
await SettingsService.getInstance();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user