首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换共享首选项,检查第一次运行是否不工作

切换共享首选项,检查第一次运行是否不工作
EN

Stack Overflow用户
提问于 2022-04-13 13:33:47
回答 2查看 1.3K关注 0票数 0

我最初遵循的是在这里找到的答案代码:

检查应用程序是否在第一次运行时使用颤振。

我把它合并到pub.dev上的pub.dev包中

我成功地让它在第一次加载时为我的入职页面加载页面。然后,当我完成入职页面时,我尝试将共享首选项值设置为“true”,所以当我重新加载应用程序时,它将跳过入职页面,但当我在VS代码中的模拟器中测试时,它不起作用。

我在这里检查第一本书的价值:

代码语言:javascript
复制
class _MyAppState extends State<MyApp> {
  bool isLoggedIn = false;
  _MyAppState() {
    MySharedPreferences.instance
        .getBooleanValue("isfirstRun")
        .then((value) => setState(() {
              isLoggedIn = value;
            }));
  }

如果错误,我会在这里加载入职屏幕:

代码语言:javascript
复制
    home: isLoggedIn ? MainPage() : OnBoard(),

我共享的Pref文件是:

导入'package:shared_preferences/shared_preferences.dart';

代码语言:javascript
复制
class MySharedPreferences {
  MySharedPreferences._privateConstructor();

  static final MySharedPreferences instance =
      MySharedPreferences._privateConstructor();
  setBooleanValue(String key, bool value) async {
    SharedPreferences myPrefs = await SharedPreferences.getInstance();
    myPrefs.setBool(key, value);
  }

  Future<bool> getBooleanValue(String key) async {
    SharedPreferences myPrefs = await SharedPreferences.getInstance();
    return myPrefs.getBool(key) ?? false;
  }
}

当入职板完成后,我运行以下命令:

代码语言:javascript
复制
          MySharedPreferences.instance.setBooleanValue("loggedin", true);
          //replace with main page
          Route route = MaterialPageRoute(builder: (context) => MainPage());
          Navigator.pushReplacement(context, route);

如果我热重新加载VS一切都是好的,但如果我重新启动应用程序,它运行的入职屏幕每次。

EN

回答 2

Stack Overflow用户

发布于 2022-04-13 13:52:30

您应该检查并更改initstate函数中的isLoggedIn值。

例如

代码语言:javascript
复制
  class _MyAppState extends State<MyApp> {
  bool isLoggedIn = false;
  @override
  void initState() {
  MySharedPreferences.instance
      .getBooleanValue("isfirstRun")
      .then((value) => setState(() {
  isLoggedIn = value;
  }));
  super.initState();

  }


  @override
  Widget build(BuildContext context) {
  return Something...
  }
票数 0
EN

Stack Overflow用户

发布于 2022-04-13 14:36:28

在单独的函数中使用asyncawait,然后在initState中使用

代码语言:javascript
复制
  void verityFirstRun() async {

    final verification = await SharedPreferences.getInstance();

    isLoggedIn = verification.getBool("isfirstRun") ?? false;

  }

  @override
  void initState() {
    verityFirstRun();
    super.initState();
  }

使用这种方式调用SharedPreferences实例:

代码语言:javascript
复制
final verification = await SharedPreferences.getInstance();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71858407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档