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.
 
 
 
 
 
 

73 lines
2.0 KiB

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 = '';
}
}