default_saver.dart 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'dart:io';
  2. import 'package:path_provider/path_provider.dart';
  3. import 'package:path/path.dart' as p;
  4. class DefaultSaver {
  5. final Directory directory;
  6. DefaultSaver._(this.directory);
  7. static Future<DefaultSaver> init() async {
  8. final dir = await getApplicationDocumentsDirectory();
  9. return DefaultSaver._(dir);
  10. }
  11. /// Вспомогательный метод для сборки полного пути
  12. String _buildPath(String key, String? extension) {
  13. final fileName = extension != null ? '$key.$extension' : key;
  14. return p.join(directory.path, fileName);
  15. }
  16. Future<void> saveFile({
  17. required File file,
  18. required String key,
  19. String? extension,
  20. }) async {
  21. // Если расширение не передано, попробуем взять его из исходного файла
  22. final ext = extension ?? p.extension(file.path).replaceFirst('.', '');
  23. final String fullPath = _buildPath(key, ext);
  24. await file.copy(fullPath);
  25. }
  26. /// 2. Получение файла (например, для Image.file(file))
  27. File getFile(String key, {String? extension}) {
  28. return File(_buildPath(key, extension));
  29. }
  30. /// 3. Проверка: существует ли файл?
  31. Future<bool> exists(String key, {String? extension}) async {
  32. return await File(_buildPath(key, extension)).exists();
  33. }
  34. /// Метод удаления файла
  35. Future<bool> deleteFile({required String key, String? extension}) async {
  36. try {
  37. final String fullPath = _buildPath(key, extension);
  38. final file = File(fullPath);
  39. if (await file.exists()) {
  40. await file.delete();
  41. return true; // Файл успешно удален
  42. }
  43. return false; // Файл не найден
  44. } catch (e) {
  45. print('Ошибка при удалении файла: $e');
  46. return false;
  47. }
  48. }
  49. }