fixed logout at refresh failed

This commit is contained in:
amirrezaghabeli
2026-04-16 16:36:55 +03:30
parent 41bba5d32c
commit cc0032b21d
12 changed files with 475 additions and 344 deletions
+8 -1
View File
@@ -41,7 +41,14 @@ List<SingleChildWidget> get essentialProviders {
List<SingleChildWidget> get cores {
return [
Provider(create: (context) => NetworkManager(context.read()), lazy: true),
Provider(
create: (context) {
final nm = NetworkManager(context.read());
return nm;
},
lazy: true,
),
ChangeNotifierProvider(create: (context) => ThemeProvider(), lazy: true),
ChangeNotifierProvider(
create: (context) => NotificationStateService(),
+12
View File
@@ -17,6 +17,14 @@ class NetworkManager {
bool _interceptorsAdded = false;
final SharedPreferences _prefs;
/// Callback invoked when refresh token fails (expired, missing, or errored).
/// Should clear local auth state and navigate to the login screen.
/// // Callback to be called when refresh token fails (logout callback)
Future<void> Function()? _onAuthFailed;
void setAuthFailed(Future<void> Function() callback) {
_onAuthFailed = callback;
}
NetworkManager(this._prefs)
: mainDio = Dio(
BaseOptions(
@@ -75,6 +83,10 @@ class NetworkManager {
mainDio.options.headers['Authorization'] = 'Bearer $newAccessToken';
return handler.resolve(await mainDio.fetch(error.requestOptions));
}
// Refresh token failed force logout
appLogger.error('❌ Refresh token failed, triggering logout');
await _onAuthFailed!();
}
return handler.next(error);
},