bugfix(image): Перенос хранения картинок из бд в папку приложения

This commit is contained in:
2025-09-08 20:55:17 +03:00
parent a376faf0ce
commit 51c4ae4f02
22 changed files with 191 additions and 155 deletions

View File

@@ -3,6 +3,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:remever/common/functions.dart';
import 'package:remever/common/resources.dart';
import 'package:remever/common/utils.dart';
@@ -21,6 +22,7 @@ import 'package:remever/screens/create_card/widgets/crud_ticket.dart';
import 'package:remever/services/tickets/tickets_interface.dart';
import 'package:remever/widgets/debug/app_debug.dart';
import 'package:remever/widgets/primary_button.dart';
import 'package:path/path.dart' as path;
@RoutePage()
class CreateScreen extends StatefulWidget {
@@ -50,13 +52,27 @@ class _CreateScreenState extends State<CreateScreen> {
showErrorToast('Не удалось получить путь к файлу');
return;
}
final file = File(filePath);
final bytes = await file.readAsBytes();
// Получаем директорию документов
final Directory directory = await getApplicationDocumentsDirectory();
final String ticketsDirPath = path.join(directory.path, 'tickets');
final Directory ticketsDir = Directory(ticketsDirPath);
// Создаём директорию рекурсивно
if (!(await ticketsDir.exists())) {
await ticketsDir.create(recursive: true);
}
final String fileName = path.basename(filePath);
final String destinationPath = path.join(ticketsDirPath, fileName);
final copiedFile = await File(filePath).copy(destinationPath);
safeSetState(() {
_dto =
isQuestion
? _dto.copyWith(questionImage: bytes)
: _dto.copyWith(answerImage: bytes);
? _dto.copyWith(questionImage: copiedFile.path)
: _dto.copyWith(answerImage: copiedFile.path);
});
}
@@ -284,7 +300,10 @@ class _CreateScreenState extends State<CreateScreen> {
condition: _dto.collection?.image != null,
builder:
(context) => ClipOval(
child: Image.memory(_dto.collection!.image!, fit: BoxFit.cover),
child: Image.file(
File(_dto.collection!.image!),
fit: BoxFit.cover,
),
),
fallback:
(context) => Center(

View File

@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:readmore/readmore.dart';
import 'package:remever/common/resources.dart';
@@ -100,8 +102,8 @@ class CrudTicket extends StatelessWidget {
builder: (context) {
return ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(8)).r,
child: Image.memory(
isQuestion ? dto.questionImage! : dto.answerImage!,
child: Image.file(
File(isQuestion ? dto.questionImage! : dto.answerImage!),
fit: BoxFit.cover,
),
);