Nikolas Rimikis
1 year ago
5 changed files with 69 additions and 72 deletions
@ -0,0 +1,66 @@
|
||||
part of '../neon_files.dart'; |
||||
|
||||
class FilesBrowserNavigator extends StatelessWidget { |
||||
const FilesBrowserNavigator({ |
||||
required this.path, |
||||
required this.bloc, |
||||
super.key, |
||||
}); |
||||
|
||||
final List<String> path; |
||||
final FilesBrowserBloc bloc; |
||||
|
||||
static const double _height = 30; |
||||
|
||||
@override |
||||
Widget build(final BuildContext context) => SizedBox( |
||||
height: _height, |
||||
child: ListView.separated( |
||||
padding: const EdgeInsets.symmetric( |
||||
horizontal: 10, |
||||
), |
||||
scrollDirection: Axis.horizontal, |
||||
itemCount: path.length + 1, |
||||
itemBuilder: (final context, final index) { |
||||
if (index == 0) { |
||||
return IconButton( |
||||
padding: EdgeInsets.zero, |
||||
visualDensity: const VisualDensity( |
||||
horizontal: VisualDensity.minimumDensity, |
||||
vertical: VisualDensity.minimumDensity, |
||||
), |
||||
tooltip: AppLocalizations.of(context).goToPath(''), |
||||
icon: const Icon( |
||||
Icons.house, |
||||
size: _height, |
||||
), |
||||
onPressed: () { |
||||
bloc.setPath([]); |
||||
}, |
||||
); |
||||
} |
||||
|
||||
final path = this.path.sublist(0, index); |
||||
final label = path.join('/'); |
||||
|
||||
return Tooltip( |
||||
message: AppLocalizations.of(context).goToPath(label), |
||||
excludeFromSemantics: true, |
||||
child: TextButton( |
||||
onPressed: () { |
||||
bloc.setPath(path); |
||||
}, |
||||
child: Text( |
||||
path.last, |
||||
semanticsLabel: AppLocalizations.of(context).goToPath(label), |
||||
), |
||||
), |
||||
); |
||||
}, |
||||
separatorBuilder: (final context, final index) => const Icon( |
||||
Icons.keyboard_arrow_right, |
||||
size: _height, |
||||
), |
||||
), |
||||
); |
||||
} |
Loading…
Reference in new issue