/
siblun
/
ReadFlow
Обзор
Документация
Войти
/
siblun
/
ReadFlow
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
lib/data/file_storage.dart
72 строки
2 KB
siblun
Add docs
21 апр 2026, 16:13
21 апр 2026, 16:13
c40d018
Код
Авторство
О чём код?
import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:path_provider/path_provider.dart'; import 'package:uuid/uuid.dart'; abstract class FileStorage { Future<String> saveImage(Uint8List bytes, String fileName); Future<void> deleteImage(String path); Future<bool> exists(String path); Future<File?> getFile(String path); } /// Реализация [FileStorage] для работы с локальной директорией Documents. /// /// Автоматически создает папку 'covers' и генерирует уникальные имена файлов /// для предотвращения коллизий. class LocalFileStorage implements FileStorage { final Uuid _uuid = const Uuid(); @override Future<void> deleteImage(String path) async { final dir = await getApplicationDocumentsDirectory(); final file = File('${dir.path}/$path'); if (await file.exists()){ await file.delete(); } } @override Future<bool> exists(String path) async{ final dir = await getApplicationDocumentsDirectory(); final file = File('${dir.path}/$path'); return await file.exists(); } @override Future<String> saveImage(Uint8List bytes, String fileName) async { final dir = await getApplicationDocumentsDirectory(); final coversDir = Directory('${dir.path}/covers'); if (!await coversDir.exists()) { await coversDir.create(recursive: true); } final uniqueName = '${_uuid.v4()}_$fileName'; final file = File('${coversDir.path}/$uniqueName'); await file.writeAsBytes(bytes); return 'covers/$uniqueName'; } @override Future<File?> getFile(String path) async { try { final dir = await getApplicationDocumentsDirectory(); final file = File('${dir.path}/$path'); if (await file.exists()) { final stat = await file.stat(); if (stat.size > 0) { return file; } } return null; } catch (e) { debugPrint('Error loading file $path: $e'); return null; } } }