image_service.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import 'dart:io';
  2. import 'package:http/http.dart' as http;
  3. import 'package:path/path.dart' as p;
  4. import 'package:path_provider/path_provider.dart';
  5. import '../database/daos/parametri_dao.dart';
  6. import '../core/constants.dart';
  7. class ImageService {
  8. final ParametriDao _parametriDao;
  9. ImageService(this._parametriDao);
  10. Future<String?> getBaseUrl() => _parametriDao.read(AppConstants.kUrlParam);
  11. String get _imageDir => 'PowerAge/images';
  12. Future<File?> getImage(String codArticolo, {bool thumb = true}) async {
  13. final dir = await getApplicationDocumentsDirectory();
  14. final imageDir = Directory(p.join(dir.path, _imageDir));
  15. if (!await imageDir.exists()) await imageDir.create(recursive: true);
  16. final suffix = thumb ? '_thumb' : '';
  17. final localFile = File(p.join(imageDir.path, '$codArticolo$suffix.jpg'));
  18. if (await localFile.exists()) return localFile;
  19. try {
  20. final baseUrl = await getBaseUrl();
  21. if (baseUrl == null || baseUrl.isEmpty) return null;
  22. final endpoint = thumb
  23. ? '/rest/articoli/image/thumb/$codArticolo'
  24. : '/rest/articoli/image/$codArticolo';
  25. final response = await http.get(Uri.parse('$baseUrl$endpoint'))
  26. .timeout(const Duration(seconds: 30));
  27. if (response.statusCode == 200 && response.bodyBytes.isNotEmpty) {
  28. await localFile.writeAsBytes(response.bodyBytes);
  29. return localFile;
  30. }
  31. } catch (_) { }
  32. return null;
  33. }
  34. Future<String?> getImageUrl(String codArticolo, {bool thumb = true}) async {
  35. final baseUrl = await getBaseUrl();
  36. if (baseUrl == null || baseUrl.isEmpty) return null;
  37. final suffix = thumb ? '/thumb' : '';
  38. return '$baseUrl/rest/articoli/image$suffix/$codArticolo';
  39. }
  40. }