|
|
@@ -0,0 +1,59 @@
|
|
|
+import 'dart:io';
|
|
|
+import 'package:path_provider/path_provider.dart';
|
|
|
+import 'package:path/path.dart' as p;
|
|
|
+
|
|
|
+class DefaultSaver {
|
|
|
+ final Directory directory;
|
|
|
+
|
|
|
+ DefaultSaver._(this.directory);
|
|
|
+
|
|
|
+ static Future<DefaultSaver> init() async {
|
|
|
+ final dir = await getApplicationDocumentsDirectory();
|
|
|
+ return DefaultSaver._(dir);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// Вспомогательный метод для сборки полного пути
|
|
|
+ String _buildPath(String key, String? extension) {
|
|
|
+ final fileName = extension != null ? '$key.$extension' : key;
|
|
|
+ return p.join(directory.path, fileName);
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<void> saveFile({
|
|
|
+ required File file,
|
|
|
+ required String key,
|
|
|
+ String? extension,
|
|
|
+ }) async {
|
|
|
+ // Если расширение не передано, попробуем взять его из исходного файла
|
|
|
+ final ext = extension ?? p.extension(file.path).replaceFirst('.', '');
|
|
|
+ final String fullPath = _buildPath(key, ext);
|
|
|
+
|
|
|
+ await file.copy(fullPath);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 2. Получение файла (например, для Image.file(file))
|
|
|
+ File getFile(String key, {String? extension}) {
|
|
|
+ return File(_buildPath(key, extension));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 3. Проверка: существует ли файл?
|
|
|
+ Future<bool> exists(String key, {String? extension}) async {
|
|
|
+ return await File(_buildPath(key, extension)).exists();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// Метод удаления файла
|
|
|
+ Future<bool> deleteFile({required String key, String? extension}) async {
|
|
|
+ try {
|
|
|
+ final String fullPath = _buildPath(key, extension);
|
|
|
+ final file = File(fullPath);
|
|
|
+
|
|
|
+ if (await file.exists()) {
|
|
|
+ await file.delete();
|
|
|
+ return true; // Файл успешно удален
|
|
|
+ }
|
|
|
+ return false; // Файл не найден
|
|
|
+ } catch (e) {
|
|
|
+ print('Ошибка при удалении файла: $e');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|