如何在Flutter中检查应用首次启动

7gyucuyw  于 2022-12-27  发布在  Flutter
关注(0)|答案(4)|浏览(364)

我是一个初学者在一个Flutter,我已经创建了我的应用程序,但我想检查如果用户打开应用程序后第一次安装,我已经看到this article但不知道如何?
这是启动屏幕代码,代码在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,
          )),
        ],
      ),
    );
  }
}
9njqaruj

9njqaruj1#

@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来保存bool值,但是firestore对于像这样的简单任务来说可能是一个过度的破坏。

希望这个有用。

yhxst69z

yhxst69z2#

您可以在用户第一次输入时使用https://pub.dev/packages/shared_preferences添加值

brgchamk

brgchamk3#

使用is_first_run包就更简单了,您只需执行以下操作:

bool firstRun = await IsFirstRun.isFirstRun();

如果应用是首次启动,则返回true

2guxujil

2guxujil4#

你可以在首次启动或安装应用时设置布尔值。首次启动或安装应用后,将其设置为true。默认值应为false。将其设置为true后,你必须将其保存在本地存储的shared_preference中。此后,每次重新启动应用时,读取shared_preference值。该值应始终为true,除非你对其进行更改。watch the video here

相关问题