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

10

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


1
你链接的那个回答已经讲得很清楚了。你需要理解 SharedPreferencesSharedPreferences 是应用程序的本地存储,在其中可以保存少量简单数据。在你的情况下,你可以使用它来存储用户是否已经打开过你的应用程序的信息。你可以在每次应用程序启动时检查这个信息。如果没有这个信息,你的用户是第一次打开它。然后你可以保存一个值并将他发送到欢迎屏幕。 - Alexander Hoffmann
4个回答

14

@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数据将被删除。 SharedPreferences是本地选项。如果你想要防止这种情况,你可以使用Firestore来保存bool值,但对于这样一个简单的任务,Firestore可能过于复杂了。

希望这能帮到你。


谢谢,这对我很有帮助。 - Mikel Tawfik
@SardorbekRkh 我认为计时器与OP的应用程序功能有关。这在问题中提到了。 - Pro

4
使用 is_first_run 包更加简单。你只需执行以下操作:
bool firstRun = await IsFirstRun.isFirstRun();

如果应用程序是第一次启动,则返回true


3

0

在应用程序首次启动或安装时,您可以设置一个布尔值。一旦应用程序首次启动或安装,将其设置为true。默认值应为false。 将其设置为true后,您必须将其保存在本地存储中的shared_preference中。 之后每次重新启动应用程序时,读取shared_preference值。该值应始终为true,除非您更改它。 在此观看视频


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接