default_saver.dart 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import 'dart:io' as io; // Используем префикс 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 io.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<io.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 = io.File(fullPath);
  25. // Записываем байты в файл.
  26. // flush: true гарантирует, что данные будут сброшены на диск перед завершением Future
  27. return await file.writeAsBytes(bytes, flush: true);
  28. }
  29. /// 2. Получение файла (например, для Image.file(file))
  30. Future<io.File?> getFile(String key, {String? extension}) async {
  31. final path = _buildPath(key, extension);
  32. final file = io.File(path);
  33. if (await file.exists()) {
  34. return file;
  35. }
  36. return null;
  37. }
  38. /// 3. Проверка: существует ли файл?
  39. Future<bool> exists(String key, {String? extension}) async {
  40. return await io.File(_buildPath(key, extension)).exists();
  41. }
  42. /// Метод удаления файла
  43. Future<bool> deleteFile({required String key, String? extension}) async {
  44. try {
  45. final String fullPath = _buildPath(key, extension);
  46. final file = io.File(fullPath);
  47. if (await file.exists()) {
  48. await file.delete();
  49. return true; // Файл успешно удален
  50. }
  51. return false; // Файл не найден
  52. } catch (e) {
  53. print('Ошибка при удалении файла: $e');
  54. return false;
  55. }
  56. }
  57. }