web-dev-qa-db-ja.com

ユーザーが初めてアプリを開いたかどうかを確認する方法(Flutterアプリ、Dartコード)

私はフラッターの初心者ですが、アプリケーションを作成しましたが、ユーザーがインストール後に初めてアプリケーションを開いたかどうかを確認したいのですが、 この記事 を確認しましたが、その方法を知りませんでしたか?

これはスプラッシュ画面コードです。コードは3秒後にユーザーをメイン画面に直接移動しますが、ユーザーが初めてアプリを開いてユーザーをようこそ画面に移動するかどうか、またはユーザーが初めてではなくユーザーをメイン画面に移動するかどうかを確認します。

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、他のユーザーの提案に従ってshared_preferencesを使用してください。これを行う方法は次のとおりです。

  • pubspec.yamlのshared_preferencesパッケージに依存し、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');
  }
  ........

注:ユーザーがキャッシュをクリアすると、SharedPreferencesデータが削除されます。 SharePreferencesはローカルオプションです。それを防止したい場合は、firestoreを使用してブール値を保存できますが、firestoreはおそらくこのような単純なタスクではやりすぎです。

お役に立てれば。

1
Pro

https://pub.dev/packages/shared_preferences を使用して、ユーザーが初めて入力したときに値を追加できます

1
Cenk YAGMUR

ここにエラーのない明確なコードがあります

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