Sou novo no Flutter e atualmente estou criando um aplicativo usando Supabase para autenticação.
Tudo funciona bem, como registro de usuário, login, etc., mas estou enfrentando um problema ao sair.
Quando pressiono o botão de logout, o usuário é desconectado com sucesso, mas o aplicativo não navega para a página de login como esperado.
Este é o código de logout
import 'package:expense_tracker/auth/auth_service.dart';
import 'package:expense_tracker/components/elevated_button.dart';
import 'package:flutter/material.dart';
class Setting extends StatefulWidget {
const Setting({super.key});
@override
State<Setting> createState() => _SettingState();
}
class _SettingState extends State<Setting> {
final auth = authService();
void logout() async {
await auth.signOut();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: CustomButton(
onPress: logout,
text: "Logout",
isSmall: true,
),
),
);
}
}
Este é o código de autenticação do portão
import 'package:expense_tracker/pages/home_page.dart';
import 'package:expense_tracker/pages/login_page.dart';
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Supabase.instance.client.auth.onAuthStateChange,
builder: (context, snapshot) {
print("Auth state changed: ${snapshot.data}");
if (snapshot.connectionState == ConnectionState.waiting) {
return const Scaffold(
body: Center(child: CircularProgressIndicator()),
);
}
final session = Supabase.instance.client.auth.currentSession;
print("Current session: $session");
if (session != null) {
return HomePage();
} else {
return LoginPage();
}
},
);
}
}
This is main page code
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
themeMode: ThemeMode.system,
theme: MyThemes.lightTheme,
darkTheme: MyThemes.darkTheme,
home: const AuthStateListener(),
routes: {
"/login": (context) => const LoginPage(),
"/register": (context) => const RegisterPage(),
"/home": (context) => const HomePage(),
"/expense": (context) => const AddExpense(),
"/split": (context) => const SplitFriends(),
"/setting": (context) => const Setting(),
},
);
}
O que eu tentei:
Encapsulamento
signOut()
em um bloco try-catch — nenhum erro detectado.Verificado que
auth.signOut()
realmente desconecta o usuário.Os logs foram verificados e o AuthGate imprime a sessão como nula (esperado após o logout).
Mas ainda não redirecionado para LoginPage.
O que eu espero:
Após sair, o aplicativo deve redirecionar automaticamente para LoginPage (conforme tratado no AuthGate).
OBSERVAÇÃO Sempre que executo um aplicativo sem depuração, ele funciona.