You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.0 KiB
74 lines
2.0 KiB
3 weeks ago
|
import 'package:get/get.dart';
|
||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||
|
import 'package:dio/dio.dart';
|
||
|
import '../services/local_database.dart';
|
||
|
|
||
|
class AuthController extends GetxController {
|
||
|
final LocalDatabase _localDatabase = LocalDatabase();
|
||
|
final RxBool isLoggedIn = false.obs;
|
||
|
final RxBool isOnlineMode = false.obs;
|
||
|
final RxString username = ''.obs;
|
||
|
|
||
|
@override
|
||
|
void onInit() {
|
||
|
super.onInit();
|
||
|
checkLoginStatus();
|
||
|
}
|
||
|
|
||
|
Future<void> checkLoginStatus() async {
|
||
|
final prefs = await SharedPreferences.getInstance();
|
||
|
final offlineLogin = prefs.getBool('offlineLogin') ?? false;
|
||
|
isLoggedIn.value = offlineLogin;
|
||
|
|
||
|
if (offlineLogin) {
|
||
|
username.value = prefs.getString('username') ?? '离线用户';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Future<bool> offlineLogin(String username) async {
|
||
|
final prefs = await SharedPreferences.getInstance();
|
||
|
await prefs.setBool('offlineLogin', true);
|
||
|
await prefs.setString('username', username);
|
||
|
|
||
|
isLoggedIn.value = true;
|
||
|
this.username.value = username;
|
||
|
isOnlineMode.value = false;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
Future<bool> onlineLogin(String username, String password) async {
|
||
|
try {
|
||
|
final dio = Dio();
|
||
|
final response = await dio.post(
|
||
|
'https://your-server.com/api/login',
|
||
|
data: {'username': username, 'password': password},
|
||
|
);
|
||
|
|
||
|
if (response.statusCode == 200) {
|
||
|
final prefs = await SharedPreferences.getInstance();
|
||
|
await prefs.setBool('offlineLogin', false);
|
||
|
await prefs.setString('username', username);
|
||
|
|
||
|
isLoggedIn.value = true;
|
||
|
this.username.value = username;
|
||
|
isOnlineMode.value = true;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
} catch (e) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Future<void> logout() async {
|
||
|
final prefs = await SharedPreferences.getInstance();
|
||
|
await prefs.remove('offlineLogin');
|
||
|
await prefs.remove('username');
|
||
|
|
||
|
isLoggedIn.value = false;
|
||
|
username.value = '';
|
||
|
}
|
||
|
}
|