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