You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Supabase:实现登录状态校验跳转与登录态持久化

解决Supabase Flutter热重启后需重新登录的问题

1. 配置持久化存储依赖

Supabase需要本地存储来持久化用户会话,热重启后才能自动恢复登录状态。首先在pubspec.yaml中添加必要依赖:

dependencies:
  supabase_flutter: ^2.0.0 # 建议使用最新稳定版本
  shared_preferences: ^2.2.0

2. 初始化Supabase时配置本地存储

在应用启动的main函数中,完成Supabase初始化并指定持久化存储实现:

import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  final prefs = await SharedPreferences.getInstance();
  
  await Supabase.initialize(
    url: '你的Supabase项目URL',
    anonKey: '你的Supabase匿名密钥',
    localStorage: SharedPreferencesLocalStorage(prefs),
  );
  
  runApp(const MyApp());
}

3. 根组件监听会话状态自动跳转

在应用根组件中,通过StreamBuilder监听Auth状态变化,根据当前会话状态自动导航到首页或登录页:

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Supabase Demo',
      home: StreamBuilder<AuthState>(
        stream: Supabase.instance.client.auth.onAuthStateChange,
        initialData: AuthState(
          session: Supabase.instance.client.auth.currentSession,
          event: AuthChangeEvent.initialSession,
        ),
        builder: (context, snapshot) {
          final session = snapshot.data?.session;
          return session != null ? const HomePage() : const LoginPage();
        },
      ),
    );
  }
}

4. 验证会话持久化效果

登录/注册成功后,可以通过以下代码确认会话已保存:

// 登录成功后调用
final session = Supabase.instance.client.auth.currentSession;
print('当前会话:${session?.user.email}');

热重启后,再次打印该值,若不为空则说明持久化生效。

常见问题排查

  • 确保WidgetsFlutterBinding.ensureInitialized()在所有异步操作前调用,避免初始化顺序问题
  • 检查Supabase项目的Auth设置中,JWT过期时间是否合理(默认不会立即过期)
  • 若使用iOS模拟器,确认SharedPreferences能正常写入(部分模拟器可能存在权限问题)

内容的提问来源于stack exchange,提问作者Shahid ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:12:43