web-dev-qa-db-fra.com

Comment vérifier si l'utilisateur ouvre mon application pour la première fois (application Flutter, code Dart)

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,
          )),
        ],
      ),
    );
  }
}

3
Abdullrahman Wasfi

@Abdullrahman, veuillez utiliser shared_preferences comme suggéré par d'autres. Voici comment vous pouvez faire cela,

  • Dépend du package shared_preferences dans pubspec.yaml et courir Packages get:
dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.5.4+6
  • Importez le package:
import 'package:shared_preferences/shared_preferences.Dart';
  • Mettre en œuvre:
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.

1
Pro

Vous pouvez utiliser https://pub.dev/packages/shared_preferences ajouter une valeur la première fois qu'un utilisateur entre

1
Cenk YAGMUR

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");
     });
    }
   );
  }

}
0
Paresh Mangukiya