default_saver.dart 2.1 KB

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