| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import 'dart:io' as io; // Используем префикс io
- import 'dart:typed_data';
- import 'package:flutter_cache_manager/flutter_cache_manager.dart';
- import 'package:path_provider/path_provider.dart';
- import 'package:path/path.dart' as p;
- class DefaulFileManager {
- final io.Directory directory;
- DefaulFileManager._(this.directory);
- static Future<DefaulFileManager> init() async {
- final dir = await getApplicationDocumentsDirectory();
- return DefaulFileManager._(dir);
- }
- /// Вспомогательный метод для сборки полного пути
- String _buildPath(String key, String? extension) {
- final fileName = extension != null ? '$key.$extension' : key;
- return p.join(directory.path, fileName);
- }
- Future<io.File> saveFile({
- required String key,
- required Uint8List bytes, // Изменили имя для ясности, что это байты
- String? extension,
- }) async {
- // Формируем путь. Если расширение не передано, файл будет без него
- final String fullPath = _buildPath(key, extension);
- final file = io.File(fullPath);
- // Записываем байты в файл.
- // flush: true гарантирует, что данные будут сброшены на диск перед завершением Future
- return await file.writeAsBytes(bytes, flush: true);
- }
- /// 2. Получение файла (например, для Image.file(file))
- Future<io.File?> getFile(String key, {String? extension}) async {
- final path = _buildPath(key, extension);
- final file = io.File(path);
- if (await file.exists()) {
- return file;
- } else {
- DefaultCacheManager defaultCacheManager = DefaultCacheManager();
- FileInfo? file = await defaultCacheManager.getFileFromCache(key);
- if (file != null) {
- await saveFile(key: key, bytes: file.file.readAsBytesSync());
- await defaultCacheManager.removeFile(key);
- return file.file;
- }
- }
- return null;
- }
- /// 3. Проверка: существует ли файл?
- Future<bool> exists(String key, {String? extension}) async {
- return await io.File(_buildPath(key, extension)).exists();
- }
- /// Метод удаления файла
- Future<bool> deleteFile({required String key, String? extension}) async {
- try {
- final String fullPath = _buildPath(key, extension);
- final file = io.File(fullPath);
- if (await file.exists()) {
- await file.delete();
- return true; // Файл успешно удален
- }
- return false; // Файл не найден
- } catch (e) {
- print('Ошибка при удалении файла: $e');
- return false;
- }
- }
- }
|