import 'dart:io'; import 'package:http/http.dart' as http; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import '../database/daos/parametri_dao.dart'; import '../core/constants.dart'; class ImageService { final ParametriDao _parametriDao; ImageService(this._parametriDao); String? token; Future getBaseUrl() => _parametriDao.read(AppConstants.kUrlParam); Map get _headers { final headers = { 'Accept': 'application/json', }; final t = token; if (t != null && t.isNotEmpty) { headers['Authorization'] = 'Bearer $t'; } return headers; } String get _imageDir => 'PowerAge/images'; Future getImage(String codArticolo, {bool thumb = true}) async { final dir = await getApplicationDocumentsDirectory(); final imageDir = Directory(p.join(dir.path, _imageDir)); if (!await imageDir.exists()) await imageDir.create(recursive: true); final suffix = thumb ? '_thumb' : ''; final localFile = File(p.join(imageDir.path, '$codArticolo$suffix.jpg')); if (await localFile.exists()) return localFile; try { final baseUrl = await getBaseUrl(); if (baseUrl == null || baseUrl.isEmpty) return null; final endpoint = thumb ? '/rest/articoli/image/thumb/$codArticolo' : '/rest/articoli/image/$codArticolo'; final response = await http.get( Uri.parse('$baseUrl$endpoint'), headers: _headers, ).timeout(const Duration(seconds: 30)); if (response.statusCode == 200 && response.bodyBytes.isNotEmpty) { await localFile.writeAsBytes(response.bodyBytes); return localFile; } } catch (_) { } return null; } Future getImageUrl(String codArticolo, {bool thumb = true}) async { final baseUrl = await getBaseUrl(); if (baseUrl == null || baseUrl.isEmpty) return null; final suffix = thumb ? '/thumb' : ''; return '$baseUrl/rest/articoli/image$suffix/$codArticolo'; } }