如何检查用户当前是否已登录并将其重定向到主屏幕或 Supabase flutter 中的登录屏幕

问题描述 投票:0回答:1

我正在开发一个由supabase_flutter实现的flutter项目。当用户使用电子邮件和密码注册时,我将他重定向到主屏幕。但每次我热重启我的应用程序时。我必须再次重新输入用户凭据。有人可以帮忙解决这个问题吗?

我正在尝试,因为我遇到了 flutter 应用程序中的一个问题。我期待这个社区提供一个合适的解决方案。

android ios flutter dart supabase
1个回答
0
投票

第 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
}
}
© www.soinside.com 2019 - 2024. All rights reserved.