handle login status

This commit is contained in:
mohamadmahdi jebeli 2025-09-27 08:37:32 +03:30
parent bdddd9768e
commit 8d77b17220
2 changed files with 74 additions and 45 deletions

View File

@ -1,12 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../extension/screenSize.dart';
import '../../gen/assets.gen.dart';
import '../../res/colors.dart';
import 'login_page.dart';
class OnboardingPage extends StatefulWidget {
const OnboardingPage({super.key});
final VoidCallback? onCompleted;
const OnboardingPage({super.key, this.onCompleted});
@override
State<OnboardingPage> createState() => _OnboardingPageState();
@ -28,17 +30,23 @@ class _OnboardingPageState extends State<OnboardingPage> {
Assets.icons.slide3.path,
];
void _next() {
void _next() async {
if (currentIndex < imageAssets.length - 1) {
_pageController.nextPage(
duration: Duration(milliseconds: 300),
curve: Curves.easeInOut,
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginPage()),
);
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('first_time_user', false);
if (mounted) {
if (widget.onCompleted != null) {
widget.onCompleted!();
} else {
Navigator.pop(context);
}
}
}
}

View File

@ -3,51 +3,72 @@ import 'package:flutter/material.dart';
import 'package:lba/screens/auth/login_page.dart';
import 'package:lba/screens/auth/onboarding_page.dart';
import 'package:lba/screens/mains/navigation/navigation.dart';
import 'package:shared_preferences/shared_preferences.dart';
class SimpleAuthGate extends StatelessWidget {
class SimpleAuthGate extends StatefulWidget {
const SimpleAuthGate({super.key});
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
State<SimpleAuthGate> createState() => _SimpleAuthGateState();
}
if (snapshot.hasError) {
return const Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.error, size: 64, color: Colors.red),
SizedBox(height: 16),
Text('An error occurred. Please try again later.'),
],
),
),
);
}
class _SimpleAuthGateState extends State<SimpleAuthGate> {
bool _isLoading = true;
Widget? _targetScreen;
final user = snapshot.data;
final isLoggedIn = user != null;
if (isLoggedIn) {
return const MainScreen();
}
return _shouldShowOnboarding() ? const OnboardingPage() : const LoginPage();
},
);
@override
void initState() {
super.initState();
_determineInitialScreen();
}
bool _shouldShowOnboarding() {
return false;
Future<void> _determineInitialScreen() async {
final user = FirebaseAuth.instance.currentUser;
final isLoggedIn = user != null;
if (isLoggedIn) {
_setTargetScreen(const MainScreen());
return;
}
final prefs = await SharedPreferences.getInstance();
final isFirstTime = prefs.getBool('first_time_user') ?? true;
if (isFirstTime) {
_setTargetScreen(OnboardingPage(
onCompleted: () {
_setTargetScreen(const LoginPage());
},
));
} else {
_setTargetScreen(const LoginPage());
}
}
void _setTargetScreen(Widget screen) {
if (mounted) {
setState(() {
_targetScreen = screen;
_isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
if (_isLoading || _targetScreen == null) {
return const Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
return _targetScreen!;
}
static Future<void> resetOnboarding() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setBool('first_time_user', true);
}
}