Skip to content

Commit

Permalink
feat: support offline login when auto logining
Browse files Browse the repository at this point in the history
  • Loading branch information
abc873693 committed Sep 13, 2024
1 parent 1b05298 commit 8e6fdb6
Showing 1 changed file with 34 additions and 8 deletions.
42 changes: 34 additions & 8 deletions lib/pages/home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -601,20 +601,38 @@ class HomePageState extends State<HomePage> {
}
}

void showLoginingSnackBar() {
if (isLogin) return;
_homeKey.currentState
?.showSnackBar(
text: ApLocalizations.of(context).logining,
actionText: ApLocalizations.of(context).offlineLogin,
onSnackBarTapped: offLineLogin,
)
?.closed
.then(
(SnackBarClosedReason reason) {
showLoginingSnackBar();
},
);
}

Future<void> _login() async {
await Future<void>.delayed(const Duration(microseconds: 30));
if (!mounted) return;
showLoginingSnackBar();
final String username = Preferences.getString(Constants.prefUsername, '');
final String password =
Preferences.getStringSecurity(Constants.prefPassword, '');

//ignore: use_build_context_synchronously
if (!mounted) return;
Helper.instance.login(
context: context,
username: username,
password: password,
callback: GeneralCallback<LoginResponse?>(
onSuccess: (LoginResponse? response) {
if (isLogin) return;
ShareDataWidget.of(context)!.data.loginResponse = response;
isLogin = true;
Preferences.setBool(Constants.prefIsOfflineLogin, false);
Expand All @@ -623,20 +641,22 @@ class HomePageState extends State<HomePage> {
if (state != HomeState.finish) {
_getAnnouncements();
}
_homeKey.currentState!.showBasicHint(text: ap.loginSuccess);
_homeKey.currentState
?..hideSnackBar()
..showBasicHint(text: ap.loginSuccess);
},
onFailure: (DioException e) {
if (isLogin) return;
final String text = e.i18nMessage!;
_homeKey.currentState!.showSnackBar(
text: text,
actionText: ap.retry,
onSnackBarTapped: _login,
);
Preferences.setBool(Constants.prefIsOfflineLogin, true);
ApUtils.showToast(context, ap.loadOfflineData);
isLogin = true;
offLineLogin();
},
onError: (GeneralResponse response) async {
if (isLogin) return;
String message = '';
if (response.statusCode == ApStatusCode.userDataError ||
response.statusCode == ApStatusCode.passwordFiveTimesError) {
Expand All @@ -661,15 +681,21 @@ class HomePageState extends State<HomePage> {
actionText: ap.retry,
onSnackBarTapped: _login,
);
Preferences.setBool(Constants.prefIsOfflineLogin, true);
ApUtils.showToast(context, ap.loadOfflineData);
isLogin = true;
offLineLogin();
}
},
),
);
}

void offLineLogin() {
Preferences.setBool(Constants.prefIsOfflineLogin, true);
ApUtils.showToast(context, ap.loadOfflineData);
isLogin = true;
_getUserInfo();
_homeKey.currentState?.hideSnackBar();
}

void handleLoginSuccess(String? username, String? password) {
isLogin = true;
Preferences.setBool(Constants.prefIsOfflineLogin, false);
Expand Down

0 comments on commit 8e6fdb6

Please sign in to comment.