handle login status
This commit is contained in:
parent
bdddd9768e
commit
8d77b17220
|
|
@ -1,12 +1,14 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import '../../extension/screenSize.dart';
|
import '../../extension/screenSize.dart';
|
||||||
import '../../gen/assets.gen.dart';
|
import '../../gen/assets.gen.dart';
|
||||||
import '../../res/colors.dart';
|
import '../../res/colors.dart';
|
||||||
import 'login_page.dart';
|
|
||||||
|
|
||||||
class OnboardingPage extends StatefulWidget {
|
class OnboardingPage extends StatefulWidget {
|
||||||
const OnboardingPage({super.key});
|
final VoidCallback? onCompleted;
|
||||||
|
|
||||||
|
const OnboardingPage({super.key, this.onCompleted});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<OnboardingPage> createState() => _OnboardingPageState();
|
State<OnboardingPage> createState() => _OnboardingPageState();
|
||||||
|
|
@ -28,17 +30,23 @@ class _OnboardingPageState extends State<OnboardingPage> {
|
||||||
Assets.icons.slide3.path,
|
Assets.icons.slide3.path,
|
||||||
];
|
];
|
||||||
|
|
||||||
void _next() {
|
void _next() async {
|
||||||
if (currentIndex < imageAssets.length - 1) {
|
if (currentIndex < imageAssets.length - 1) {
|
||||||
_pageController.nextPage(
|
_pageController.nextPage(
|
||||||
duration: Duration(milliseconds: 300),
|
duration: Duration(milliseconds: 300),
|
||||||
curve: Curves.easeInOut,
|
curve: Curves.easeInOut,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Navigator.push(
|
final prefs = await SharedPreferences.getInstance();
|
||||||
context,
|
await prefs.setBool('first_time_user', false);
|
||||||
MaterialPageRoute(builder: (context) => LoginPage()),
|
|
||||||
);
|
if (mounted) {
|
||||||
|
if (widget.onCompleted != null) {
|
||||||
|
widget.onCompleted!();
|
||||||
|
} else {
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,51 +3,72 @@ import 'package:flutter/material.dart';
|
||||||
import 'package:lba/screens/auth/login_page.dart';
|
import 'package:lba/screens/auth/login_page.dart';
|
||||||
import 'package:lba/screens/auth/onboarding_page.dart';
|
import 'package:lba/screens/auth/onboarding_page.dart';
|
||||||
import 'package:lba/screens/mains/navigation/navigation.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});
|
const SimpleAuthGate({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
State<SimpleAuthGate> createState() => _SimpleAuthGateState();
|
||||||
return StreamBuilder<User?>(
|
}
|
||||||
stream: FirebaseAuth.instance.authStateChanges(),
|
|
||||||
builder: (context, snapshot) {
|
|
||||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
||||||
return const Scaffold(
|
|
||||||
body: Center(
|
|
||||||
child: CircularProgressIndicator(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (snapshot.hasError) {
|
class _SimpleAuthGateState extends State<SimpleAuthGate> {
|
||||||
return const Scaffold(
|
bool _isLoading = true;
|
||||||
body: Center(
|
Widget? _targetScreen;
|
||||||
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.'),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
final user = snapshot.data;
|
@override
|
||||||
final isLoggedIn = user != null;
|
void initState() {
|
||||||
|
super.initState();
|
||||||
if (isLoggedIn) {
|
_determineInitialScreen();
|
||||||
return const MainScreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
return _shouldShowOnboarding() ? const OnboardingPage() : const LoginPage();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _shouldShowOnboarding() {
|
Future<void> _determineInitialScreen() async {
|
||||||
return false;
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue