我正在开发一个由supabase_flutter实现的flutter项目。当用户使用电子邮件和密码注册时,我将他重定向到主屏幕。但每次我热重启我的应用程序时。我必须再次重新输入用户凭据。有人可以帮忙解决这个问题吗?
我正在尝试,因为我遇到了 flutter 应用程序中的一个问题。我期待这个社区提供一个合适的解决方案。
第 1 步:在您的
main.dart
文件中设置 GetStorage 和 GetX
首先,导入必要的包并在main.dart文件中初始化GetStorage。然后,定义您的主应用程序小部件并根据用户的登录状态配置初始路线。
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'controllers/auth_controller.dart';
import 'pages/home_page.dart';
import 'pages/login_page.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await GetStorage.init();
Get.lazyPut<AuthController>(() => AuthController());
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final AuthController authController = Get.find();
authController.checkTokenValidityAndRefresh();
final initialRoute = authController.isLoggedIn.isTrue ? '/home':'/login';
return GetMaterialApp(
title: 'Test',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.white),
useMaterial3: true,
),
initialRoute: initialRoute,
getPages: [
GetPage(name: '/home', page: () => const HomePage()),
GetPage(name: '/login', page: () => const LoginPage()),
],
);
}
}
第2步:实现AuthController来管理登录状态 创建 AuthController 以使用 GetStorage 管理登录状态。该控制器将在初始化期间读取存储的登录状态,并提供更新登录状态的方法。
auth_controller.dart
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
class AuthController extends GetxController {
final box = GetStorage();
var isLoggedIn = false.obs;
AuthController() {
isLoggedIn.value = box.read('isLoggedIn') ?? false;
if (isLoggedIn.value == true) {
fetchUserData(); // Perform any additional actions if needed
}
}
void setLoggedIn(bool status) {
isLoggedIn.value = status;
box.write('isLoggedIn', status);
print(isLoggedIn.value);
}
void fetchUserData() {
// Add your logic to fetch user data
}
}