|
|
|
part of '../neon_files.dart';
|
|
|
|
|
|
|
|
class FilesBrowserNavigator extends StatelessWidget {
|
|
|
|
const FilesBrowserNavigator({
|
|
|
|
required this.uri,
|
|
|
|
required this.bloc,
|
|
|
|
super.key,
|
|
|
|
});
|
|
|
|
|
|
|
|
final PathUri uri;
|
|
|
|
final FilesBrowserBloc bloc;
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(final BuildContext context) => SizedBox(
|
|
|
|
height: ButtonTheme.of(context).height,
|
|
|
|
child: ListView.separated(
|
|
|
|
padding: const EdgeInsets.symmetric(
|
|
|
|
horizontal: 10,
|
|
|
|
),
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
itemCount: uri.pathSegments.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: FilesLocalizations.of(context).goToPath(''),
|
|
|
|
icon: const Icon(Icons.house),
|
|
|
|
onPressed: () {
|
|
|
|
bloc.setPath(PathUri.cwd());
|
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
final partialPath = PathUri(
|
|
|
|
isAbsolute: uri.isAbsolute,
|
|
|
|
isDirectory: uri.isDirectory,
|
|
|
|
pathSegments: uri.pathSegments.sublist(0, index),
|
|
|
|
);
|
|
|
|
return TextButton(
|
|
|
|
onPressed: () {
|
|
|
|
bloc.setPath(partialPath);
|
|
|
|
},
|
|
|
|
child: Text(
|
|
|
|
partialPath.name,
|
|
|
|
semanticsLabel: FilesLocalizations.of(context).goToPath(partialPath.name),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
},
|
|
|
|
separatorBuilder: (final context, final index) => const Icon(Icons.keyboard_arrow_right),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|