image_service.dart 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. String? token;
  11. Future<String?> getBaseUrl() => _parametriDao.read(AppConstants.kUrlParam);
  12. Map<String, String> get _headers {
  13. final headers = <String, String>{
  14. 'Accept': 'application/json',
  15. };
  16. final t = token;
  17. if (t != null && t.isNotEmpty) {
  18. headers['Authorization'] = 'Bearer $t';
  19. }
  20. return headers;
  21. }
  22. String get _imageDir => 'PowerAge/images';
  23. Future<File?> getImage(String codArticolo, {bool thumb = true}) async {
  24. final dir = await getApplicationDocumentsDirectory();
  25. final imageDir = Directory(p.join(dir.path, _imageDir));
  26. if (!await imageDir.exists()) await imageDir.create(recursive: true);
  27. final suffix = thumb ? '_thumb' : '';
  28. final localFile = File(p.join(imageDir.path, '$codArticolo$suffix.jpg'));
  29. if (await localFile.exists()) return localFile;
  30. try {
  31. final baseUrl = await getBaseUrl();
  32. if (baseUrl == null || baseUrl.isEmpty) return null;
  33. final endpoint = thumb
  34. ? '/rest/articoli/image/thumb/$codArticolo'
  35. : '/rest/articoli/image/$codArticolo';
  36. final response = await http.get(
  37. Uri.parse('$baseUrl$endpoint'),
  38. headers: _headers,
  39. ).timeout(const Duration(seconds: 30));
  40. if (response.statusCode == 200 && response.bodyBytes.isNotEmpty) {
  41. await localFile.writeAsBytes(response.bodyBytes);
  42. return localFile;
  43. }
  44. } catch (_) { }
  45. return null;
  46. }
  47. Future<String?> getImageUrl(String codArticolo, {bool thumb = true}) async {
  48. final baseUrl = await getBaseUrl();
  49. if (baseUrl == null || baseUrl.isEmpty) return null;
  50. final suffix = thumb ? '/thumb' : '';
  51. return '$baseUrl/rest/articoli/image$suffix/$codArticolo';
  52. }
  53. }