Files
CheckTheethKids/lib/auth_gate.dart
2026-07-07 11:41:15 +01:00

56 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'main.dart' show supabase;
import 'home_screen.dart';
import 'logged_home.dart';
final ValueNotifier<bool> forceHomeScreen = ValueNotifier<bool>(false);
class AuthGate extends StatelessWidget {
const AuthGate({super.key});
@override
Widget build(BuildContext context) {
return ValueListenableBuilder<bool>(
valueListenable: forceHomeScreen,
builder: (context, forcedHome, _) {
return StreamBuilder<AuthState>(
stream: supabase.auth.onAuthStateChange,
initialData: AuthState(AuthChangeEvent.initialSession, supabase.auth.currentSession),
builder: (context, snapshot) {
final user = snapshot.data?.session?.user;
final Widget child;
if (snapshot.connectionState == ConnectionState.waiting) {
child = const SizedBox.shrink();
} else if (forcedHome || user == null) {
child = const HomeScreen(key: ValueKey('home_screen'));
} else {
child = const LoggedHomeScreen(key: ValueKey('logged_home_screen'));
}
return AnimatedSwitcher(
duration: const Duration(milliseconds: 280),
reverseDuration: const Duration(milliseconds: 240),
switchInCurve: Curves.easeOutCubic,
switchOutCurve: Curves.easeInCubic,
transitionBuilder: (child, animation) {
final fade = CurvedAnimation(parent: animation, curve: Curves.easeOut);
return FadeTransition(
opacity: fade,
child: ScaleTransition(
scale: Tween<double>(begin: 0.985, end: 1.0).animate(fade),
child: child,
),
);
},
child: child,
);
},
);
},
);
}
}