Je suis un débutant en flutter, j'ai créé mon application mais je veux vérifier si l'utilisateur ouvre l'application pour la première fois après l'installation, j'ai vu cet article mais je ne savais pas comment ça?
Ceci est le code de l'écran de démarrage, le code déplace l'utilisateur directement vers l'écran principal après 3 secondes, mais je veux vérifier si l'utilisateur ouvre l'application pour la première fois et déplace l'utilisateur vers l'écran de bienvenue ou si l'utilisateur n'est pas la première fois et déplace l'utilisateur vers l'écran principal.
import 'Dart:async';
import 'package:flutter/material.Dart';
import 'package:book_pen/main.Dart';
import 'package:book_pen/Welcome.Dart';
void main() {
runApp(new MaterialApp(
home: new SplashScreen(),
routes: <String, WidgetBuilder>{
'/HomePage': (BuildContext context) => new HomePage(),
'/WelcomePage': (BuildContext context) => new WelcomePage()
},
));
}
class SplashScreen extends StatefulWidget {
@override
_SplashScreenState createState() => new _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
startTime() async {
var _duration = new Duration(seconds: 3);
return new Timer(_duration, navigationPageHome);
}
void navigationPageHome() {
Navigator.of(context).pushReplacementNamed('/HomePage');
}
void navigationPageWel() {
Navigator.of(context).pushReplacementNamed('/WelcomePage');
}
@override
void initState() {
super.initState();
startTime();
}
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Scaffold(
body: Stack(
children: <Widget>[
Center(
child: new Image.asset(
'assets/images/SplashBack.jpg',
width: size.width,
height: size.height,
fit: BoxFit.fill,
),
),
Center(
child: new Image.asset(
'assets/images/BigPurppleSecSh.png',
height: 150,
width: 300,
)),
],
),
);
}
}
@Abdullrahman, veuillez utiliser shared_preferences
comme suggéré par d'autres. Voici comment vous pouvez faire cela,
pubspec.yaml
et courir Packages get
:dependencies:
flutter:
sdk: flutter
shared_preferences: ^0.5.4+6
import 'package:shared_preferences/shared_preferences.Dart';
class _SplashScreenState extends State<SplashScreen> {
startTime() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool firstTime = prefs.getBool('first_time');
var _duration = new Duration(seconds: 3);
if (firstTime != null && !firstTime) {// Not first time
return new Timer(_duration, navigationPageHome);
} else {// First time
prefs.setBool('first_time', false);
return new Timer(_duration, navigationPageWel);
}
}
void navigationPageHome() {
Navigator.of(context).pushReplacementNamed('/HomePage');
}
void navigationPageWel() {
Navigator.of(context).pushReplacementNamed('/WelcomePage');
}
........
Remarque: Les données SharedPreferences seront supprimées si l'utilisateur efface le cache. SharePreferences est une option locale. Si vous voulez éviter cela, vous pouvez utiliser Firestore pour enregistrer la valeur booléenne, mais Firestore serait probablement excessif pour une tâche simple comme celle-ci.
J'espère que cela t'aides.
Vous pouvez utiliser https://pub.dev/packages/shared_preferences ajouter une valeur la première fois qu'un utilisateur entre
Voici le code de sans aucune erreur et bien clarifier
class _SplashScreenState extends State<SplashScreen> {
Future<bool> isFirstTime() async {
var isFirstTime = SharedPref.pref.getBool('first_time');
if (isFirstTime != null && !isFirstTime) {
SharedPref.pref.setBool('first_time', false);
return false;
} else {
SharedPref.pref.setBool('first_time', false);
return true;
}
}
@override
void initState() {
super.initState();
Timer(Duration(seconds: 3), () {
isFirstTime().then((isFirstTime) {
isFirstTime ? print("First time") : print("Not first time");
});
}
);
}
}