Flutter Onboarding Screen only one time from onboarding to Login to Mainscreen
Future < void > main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({
Key ? key
}): super(key: key);
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark
));
Future < int > alreadyAUser = IsFirstTime().getOnce();
return MultiProvider(
providers: AppProviders.providers,
child: MaterialApp(
debugShowCheckedModeBanner: false,
routes: AppRoutes.routes(),
home: FutureBuilder(
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasData) {
final data = snapshot.data as int;
print(data);
switch (data) {
case 0:
return OnboardingScreen();
case 1:
return LoginScreen();
case 2:
return MainScreen();
}
}
}
return Container(
color: Colors.white,
);
},
future: alreadyAUser,
),
),
);
}
}
class IsFirstTime {
Future < int > getOnce() async {
int ? intValue;
SharedPreferences prefs = await SharedPreferences.getInstance();
if (prefs.getInt("initScreen") == null) {
intValue = 0;
} else {
intValue = prefs.getInt("initScreen");
}
return intValue!;
}
Future once(int num) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setInt("initScreen", num);
int initScreen = (prefs.getInt("initScreen")) !;
print('initScreen ${initScreen}');
}
}
class OnboardingScreen extends StatefulWidget {
OnboardingScreen({
Key ? key
}): super(key: key);
@override
State < OnboardingScreen > createState() => _onboardingScreenState();
}
class _onboardingScreenState extends State < OnboardingScreen > {
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: GestureDetector(
onTap: () {
IsFirstTime().once(1);
},
child: Text('Login screen something')),
));
}
}
class login extends StatefulWidget {
login({
Key ? key
}): super(key: key);
@override
State < login > createState() => _loginState();
}
class _loginState extends State < login > {
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: GestureDetector(
onTap: () {
IsFirstTime().once(2);
},
child: Text('Login screen something')),
));
}
}