一尘不染

如何检查用户是否首次打开我的应用(Flutter应用,飞镖代码)

flutter

我是flutter的初学者,我创建了我的应用程序,但是我想检查用户是否在安装后第一次打开该应用程序,我看过这篇文章但不知道该怎么做?

这是启动屏幕代码,该代码在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,
          )),
        ],
      ),
    );
  }
}

阅读 1228

收藏
2020-08-13

共1个答案

一尘不染

@Abdullrahman,请shared_preferences按照他人的建议使用。这是你可以做到的

  • 依赖于shared_preferences包pubspec.yaml并运行Packages get

    dependencies:
    flutter:
    sdk: flutter
    shared_preferences: ^0.5.4+6

  • 导入包:

    import ‘package:shared_preferences/shared_preferences.dart’;

  • 实现它:

    class _SplashScreenState extends State {
    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来保存bool值,但是对于这样的简单任务,firestore可能会显得过分杀伤力。

希望这可以帮助。

2020-08-13