import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart'; import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart'; import '../repository/files_repository.dart'; import 'files_event.dart'; import 'files_state.dart'; class FilesBloc extends LoadableHydratedBloc { final List initialPath; FilesBloc({this.initialPath = const []}); @override FilesRepository repository() => FilesRepository(); @override FilesState fromNothing() => FilesState(currentPath: initialPath); @override FilesState fromStorage(Map json) => FilesState.fromJson(json); @override Map? toStorage(FilesState state) => null; @override Future gatherData() async { final path = innerState?.currentPath ?? initialPath; await _query(path); } Future refresh() async { final path = innerState?.currentPath ?? initialPath; await _query(path); } Future setPath(List path) async { add(Emit((s) => s.copyWith(currentPath: path, listing: null))); await _query(path); } Future createFolder(String name) async { final path = innerState?.currentPath ?? initialPath; await repo.data.createFolder('${path.join('/')}/$name'); await refresh(); } Future _query(List path) async { final pathString = path.isEmpty ? '/' : path.join('/'); final listing = await repo.data.listFiles(pathString); listing.files.removeWhere((file) => file.name.isEmpty || file.name == path.lastOrNull); add(DataGathered((s) => s.copyWith(listing: listing))); } }