@@ -505,13 +505,19 @@ class ExpTech {
505505
506506 TalkerManager .instance.debug ('🌐 API: GET $requestUrl ' );
507507
508+ final cacheKey = PreferenceKeys .weatherCache;
509+ final etagKey = PreferenceKeys .weatherEtag;
510+ final coordsKey = '${PreferenceKeys .weatherCache }:coords' ;
511+ final currentCoords = '$lat :$lon ' ;
512+ final cachedCoords = Preference .instance.getString (coordsKey);
513+
508514 final headers = < String , String > {};
509- final cachedEtag = Preference .instance. getString (
510- PreferenceKeys .weatherEtag,
511- );
512- if (cachedEtag != null ) {
513- headers[ 'If-None-Match' ] = cachedEtag;
514- TalkerManager .instance. debug ( '🌐 API: Using ETag: $ cachedEtag ' );
515+ if (cachedCoords == currentCoords) {
516+ final cachedEtag = Preference .instance. getString (etagKey);
517+ if (cachedEtag != null ) {
518+ headers[ 'If-None-Match' ] = cachedEtag;
519+ TalkerManager .instance. debug ( '🌐 API: Using ETag: $ cachedEtag ' ) ;
520+ }
515521 }
516522
517523 final res = await _sharedClient.get (requestUrl, headers: headers);
@@ -521,9 +527,7 @@ class ExpTech {
521527 );
522528
523529 if (res.statusCode == 304 ) {
524- final cachedData = Preference .instance.getString (
525- PreferenceKeys .weatherCache,
526- );
530+ final cachedData = Preference .instance.getString (cacheKey);
527531 if (cachedData != null ) {
528532 TalkerManager .instance.debug (
529533 '🌐 API: Using cached data (304 Not Modified)' ,
@@ -547,12 +551,13 @@ class ExpTech {
547551
548552 final etag = res.headers['etag' ] ?? res.headers['ETag' ];
549553 if (etag != null ) {
550- await Preference .instance.setString (PreferenceKeys .weatherEtag , etag);
554+ await Preference .instance.setString (etagKey , etag);
551555 TalkerManager .instance.debug ('🌐 API: Saved ETag: $etag ' );
552556 }
553557
554558 final json = jsonDecode (res.body) as Map <String , dynamic >;
555- await Preference .instance.setString (PreferenceKeys .weatherCache, res.body);
559+ await Preference .instance.setString (cacheKey, res.body);
560+ await Preference .instance.setString (coordsKey, currentCoords);
556561 TalkerManager .instance.debug ('🌐 API: Saved cached data' );
557562
558563 TalkerManager .instance.debug ('🌐 API: JSON decoded successfully' );
@@ -568,13 +573,20 @@ class ExpTech {
568573
569574 TalkerManager .instance.debug ('🌐 Forecast API: GET $requestUrl ' );
570575
576+ final cacheKey = PreferenceKeys .forecastCache;
577+ final etagKey = PreferenceKeys .forecastEtag;
578+ final regionKey = '${PreferenceKeys .forecastCache }:region' ;
579+ final cachedRegion = Preference .instance.getString (regionKey);
580+
571581 final headers = < String , String > {};
572- final cachedEtag = Preference .instance.getString (
573- PreferenceKeys .forecastEtag,
574- );
575- if (cachedEtag != null ) {
576- headers['If-None-Match' ] = cachedEtag;
577- TalkerManager .instance.debug ('🌐 Forecast API: Using ETag: $cachedEtag ' );
582+ if (cachedRegion == region) {
583+ final cachedEtag = Preference .instance.getString (etagKey);
584+ if (cachedEtag != null ) {
585+ headers['If-None-Match' ] = cachedEtag;
586+ TalkerManager .instance.debug (
587+ '🌐 Forecast API: Using ETag: $cachedEtag ' ,
588+ );
589+ }
578590 }
579591
580592 final res = await _sharedClient.get (requestUrl, headers: headers);
@@ -584,9 +596,7 @@ class ExpTech {
584596 );
585597
586598 if (res.statusCode == 304 ) {
587- final cachedData = Preference .instance.getString (
588- PreferenceKeys .forecastCache,
589- );
599+ final cachedData = Preference .instance.getString (cacheKey);
590600 if (cachedData != null ) {
591601 TalkerManager .instance.debug (
592602 '🌐 Forecast API: Using cached data (304 Not Modified)' ,
@@ -609,12 +619,13 @@ class ExpTech {
609619
610620 final etag = res.headers['etag' ] ?? res.headers['ETag' ];
611621 if (etag != null ) {
612- await Preference .instance.setString (PreferenceKeys .forecastEtag , etag);
622+ await Preference .instance.setString (etagKey , etag);
613623 TalkerManager .instance.debug ('🌐 Forecast API: Saved ETag: $etag ' );
614624 }
615625
616626 final json = jsonDecode (res.body) as Map <String , dynamic >;
617- await Preference .instance.setString (PreferenceKeys .forecastCache, res.body);
627+ await Preference .instance.setString (cacheKey, res.body);
628+ await Preference .instance.setString (regionKey, region);
618629 TalkerManager .instance.debug ('🌐 Forecast API: Saved cached data' );
619630
620631 TalkerManager .instance.debug ('🌐 Forecast API: Response JSON: $json ' );
@@ -872,16 +883,21 @@ class ExpTech {
872883
873884 TalkerManager .instance.debug ('🌐 Realtime Region API: GET $requestUrl ' );
874885
886+ final cacheKey = PreferenceKeys .realtimeRegionCache;
887+ final etagKey = PreferenceKeys .realtimeRegionEtag;
888+ final regionKey = '${PreferenceKeys .realtimeRegionCache }:region' ;
889+
875890 final headers = < String , String > {};
876891 await Preference .reload ();
877- final cachedEtag = Preference .instance.getString (
878- PreferenceKeys .realtimeRegionEtag,
879- );
880- if (cachedEtag != null ) {
881- headers['If-None-Match' ] = cachedEtag;
882- TalkerManager .instance.debug (
883- '🌐 Realtime Region API: Using ETag: $cachedEtag ' ,
884- );
892+ final cachedRegion = Preference .instance.getString (regionKey);
893+ if (cachedRegion == region) {
894+ final cachedEtag = Preference .instance.getString (etagKey);
895+ if (cachedEtag != null ) {
896+ headers['If-None-Match' ] = cachedEtag;
897+ TalkerManager .instance.debug (
898+ '🌐 Realtime Region API: Using ETag: $cachedEtag ' ,
899+ );
900+ }
885901 }
886902
887903 final res = await _sharedClient.get (requestUrl, headers: headers);
@@ -891,9 +907,7 @@ class ExpTech {
891907 );
892908
893909 if (res.statusCode == 304 ) {
894- final cachedData = Preference .instance.getString (
895- PreferenceKeys .realtimeRegionCache,
896- );
910+ final cachedData = Preference .instance.getString (cacheKey);
897911 if (cachedData != null ) {
898912 TalkerManager .instance.debug (
899913 '🌐 Realtime Region API: Using cached data (304 Not Modified)' ,
@@ -919,18 +933,13 @@ class ExpTech {
919933
920934 final etag = res.headers['etag' ] ?? res.headers['ETag' ];
921935 if (etag != null ) {
922- await Preference .instance.setString (
923- PreferenceKeys .realtimeRegionEtag,
924- etag,
925- );
936+ await Preference .instance.setString (etagKey, etag);
926937 TalkerManager .instance.debug ('🌐 Realtime Region API: Saved ETag: $etag ' );
927938 }
928939
929940 final List <dynamic > jsonData = jsonDecode (res.body) as List <dynamic >;
930- await Preference .instance.setString (
931- PreferenceKeys .realtimeRegionCache,
932- res.body,
933- );
941+ await Preference .instance.setString (cacheKey, res.body);
942+ await Preference .instance.setString (regionKey, region);
934943 TalkerManager .instance.debug ('🌐 Realtime Region API: Saved cached data' );
935944
936945 return jsonData
@@ -943,16 +952,21 @@ class ExpTech {
943952
944953 TalkerManager .instance.debug ('🌐 History Region API: GET $requestUrl ' );
945954
955+ final cacheKey = PreferenceKeys .historyRegionCache;
956+ final etagKey = PreferenceKeys .historyRegionEtag;
957+ final regionKey = '${PreferenceKeys .historyRegionCache }:region' ;
958+
946959 final headers = < String , String > {};
947960 await Preference .reload ();
948- final cachedEtag = Preference .instance.getString (
949- PreferenceKeys .historyRegionEtag,
950- );
951- if (cachedEtag != null ) {
952- headers['If-None-Match' ] = cachedEtag;
953- TalkerManager .instance.debug (
954- '🌐 History Region API: Using ETag: $cachedEtag ' ,
955- );
961+ final cachedRegion = Preference .instance.getString (regionKey);
962+ if (cachedRegion == region) {
963+ final cachedEtag = Preference .instance.getString (etagKey);
964+ if (cachedEtag != null ) {
965+ headers['If-None-Match' ] = cachedEtag;
966+ TalkerManager .instance.debug (
967+ '🌐 History Region API: Using ETag: $cachedEtag ' ,
968+ );
969+ }
956970 }
957971
958972 final res = await _sharedClient.get (requestUrl, headers: headers);
@@ -962,9 +976,7 @@ class ExpTech {
962976 );
963977
964978 if (res.statusCode == 304 ) {
965- final cachedData = Preference .instance.getString (
966- PreferenceKeys .historyRegionCache,
967- );
979+ final cachedData = Preference .instance.getString (cacheKey);
968980 if (cachedData != null ) {
969981 TalkerManager .instance.debug (
970982 '🌐 History Region API: Using cached data (304 Not Modified)' ,
@@ -990,18 +1002,13 @@ class ExpTech {
9901002
9911003 final etag = res.headers['etag' ] ?? res.headers['ETag' ];
9921004 if (etag != null ) {
993- await Preference .instance.setString (
994- PreferenceKeys .historyRegionEtag,
995- etag,
996- );
1005+ await Preference .instance.setString (etagKey, etag);
9971006 TalkerManager .instance.debug ('🌐 History Region API: Saved ETag: $etag ' );
9981007 }
9991008
10001009 final List <dynamic > jsonData = jsonDecode (res.body) as List <dynamic >;
1001- await Preference .instance.setString (
1002- PreferenceKeys .historyRegionCache,
1003- res.body,
1004- );
1010+ await Preference .instance.setString (cacheKey, res.body);
1011+ await Preference .instance.setString (regionKey, region);
10051012 TalkerManager .instance.debug ('🌐 History Region API: Saved cached data' );
10061013
10071014 return jsonData
0 commit comments