70 lines
2.1 KiB
Dart
70 lines
2.1 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
|
import 'package:http/http.dart';
|
|
|
|
import '../../../Helper/Logger.dart';
|
|
import '../../../Model/Response/Tenants/Tenantinforesponse.dart';
|
|
|
|
class TenantsProvider {
|
|
static const cacheKey = 'TenantCache';
|
|
final cacheManager = DefaultCacheManager();
|
|
|
|
Future<TenantInfo?> getTenantInfo(String urlData) async {
|
|
TenantInfo? tenantInfo;
|
|
|
|
logger.i('TenantInfo URL data: ${urlData}');
|
|
logger.i('TenantInfo URL data: $urlData'); // 👈 Add this here
|
|
|
|
|
|
try {
|
|
/// 1. Attempt to load from cache first
|
|
final fileInfo = await cacheManager.getFileFromCache(cacheKey);
|
|
|
|
String? cachedData;
|
|
|
|
if (fileInfo != null && fileInfo.file.existsSync()) {
|
|
cachedData = await fileInfo.file.readAsString();
|
|
final parsedJson = json.decode(cachedData);
|
|
tenantInfo = TenantInfo.fromJson(parsedJson);
|
|
logger.i("......Loaded data from cache......");
|
|
}
|
|
|
|
/// 2.Always make a request to check for updates
|
|
final response = await get(Uri.parse(urlData), headers: {
|
|
'Content-Type': 'application/json',
|
|
'Accept': 'application/json',
|
|
});
|
|
|
|
|
|
if (response.statusCode == 200) {
|
|
final freshData = response.body;
|
|
|
|
/// Compare with cached data (optional optimization: hash/ETag/updatedAt)
|
|
if (cachedData == null || freshData != cachedData) {
|
|
logger.i("......Updating TenantDetails cache with fresh API data.......");
|
|
|
|
/// Update the cache with fresh data
|
|
await cacheManager.putFile(
|
|
cacheKey,
|
|
response.bodyBytes,
|
|
fileExtension: 'json',
|
|
key: cacheKey,
|
|
);
|
|
final parsedJson = json.decode(freshData);
|
|
tenantInfo = TenantInfo.fromJson(parsedJson);
|
|
} else {
|
|
logger.i(".........Tenant Details API data is same as cache, no update required..........");
|
|
}
|
|
} else {
|
|
logger.w("Tenant Details API responded with status code: ${response.statusCode}");
|
|
}
|
|
} catch (e) {
|
|
logger.e("Error fetching customer deals: $e");
|
|
}
|
|
|
|
return tenantInfo;
|
|
}
|
|
|
|
|
|
} |