SharedPreferences 不适用于真实设备 FLUTTER

2023-12-23

我使用 SharedPreferences 来记住用户名和密码,以便下次登录时无需询问密码。当我使用带有 USB 线的真实设备进行调试时,它运行良好。但当我构建 APK 并安装它时,它在我的设备中不起作用。我不知道我错过了什么。

我像这样在登录页面保存数据`

Future<Null> loginUser(isLogin, name, fac, year, gender) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('Name', name);
prefs.setString('IsLogin', isLogin);
prefs.setString('Faculty', fac);
prefs.setString('Year', year);
prefs.setString('Gender', gender);
prefs.setString('Email', email);

print(prefs.getString('Faculty'));

}

我在主页中使用了这段代码......

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
  Widget build(BuildContext context) {
    return NewMain();
  }
}

class NewMain extends StatefulWidget {
  @override
  _NewMainState createState() => _NewMainState();
}

class _NewMainState extends State<NewMain> {
  var name, fac, year, gender, email;
  var goToLogin = true;
  @override
  void initState() {
    // TODO: implement initState
    checkRem();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    if (goToLogin)
      return MaterialApp(
        home: Login(),
      );
    else
      return MaterialApp(
        home: MainClass(name, fac, year, gender, email),
      );
  }

  void checkRem() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    if (prefs.getString('IsLogin') == 'Yes') {
      goToLogin = false;
      fac = prefs.getString('Faculty');
      name = prefs.getString('Name');
      gender = prefs.getString('Gender');
      year = prefs.getString('Year');
      email = prefs.getString('Email');
    }
  }
}

如果 goToLogin 为 false,它将移至 MainClass。 它在调试中完美运行。它不适用于构建的 apk 应用程序。

Solved

这是我的 IDE 的问题。更新并修复


问题是你打电话checkRem()这是异步的initState()所以在完成执行之前调用构建方法checkRem().

索恩: 用它包裹起来futureBuilder()或致电setState()方法执行完成后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SharedPreferences 不适用于真实设备 FLUTTER 的相关文章

随机推荐

  • 通过ObjectId查询Mongoose Schema

    再次需要你的帮助 希望对于这个项目 我在这里得到的答案将是最后一个 我发现这是一个相当常见的问题 但我已经尝试过另一个问题堆栈溢出帖子 https stackoverflow com questions 7878557 cant find
  • spring-context 是否支持 bean 实例上的 JSR-330 限定符?

    春天有它自己的Qualifier注释 我认为它相当于javax inject Named注释 它又是 JSR 330 中的具体限定符 所以 我想知道哪个版本的 Spring 如果有的话 支持 Qualifier 这是我的示例用法 不幸的是它
  • 你可以重写私有虚拟方法吗?

    我认为你可以 但我的同事认为你不能 你甚至不能declare私有虚拟方法 唯一有意义的时候是如果你有 public class Outer private virtual void Foo public class Nested Outer
  • Azure Web 应用程序新的 X509Certificate2() 导致 System.Security.Cryptography.CryptographicException:访问被拒绝

    现在我正在上传一个 pfx 文件 输入密码并调用 var cert new X509Certificate2 fileData password 并存储指纹等内容 我不需要将其实际存储在服务器上 只需验证它是否是有效的证书并存储一些信息 在
  • Apache Beam Python 窗口和 GroupByKey

    LE TL 博士 如何在 Python 中创建无限数据源 是否可以 我正在构建一个流数据流 它将持续处理来自具有时间戳 id 和读数值的传感器的浮点值 将这些值放入FixedWindows2秒 然后输出聚合 代码链接 https gist
  • 从数组中删除每隔一个元素并重新排列键?

    我应该如何从这样的数组中删除每个第二个元素 只使用 PHP 中的内置数组函数 array array first second third fourth fifth sixth seventh 当我删除每隔一个元素时 我应该得到 array
  • Gradle wsdl 生成

    我想从 wsdl 生成 java 文件 我尝试使用wsdl2java https github com nilsmagnus wsdl2javagradle 插件 我定义插件 subprojects buildscript reposito
  • 将 KILL 与声明的变量一起使用

    我试图将 KILL 语句与声明的变量一起使用 但它给了我一个语法错误 有没有办法不使用常量并以编程方式更改 SPID 例如 DECLARE SPID smallint SET SPID 100 Kill SPID 顺便说一句 这只是一个例子
  • 设置一个元素的长度(高度或宽度)减去另一个元素的可变长度,即 calc(x - y),其中 y 未知

    我知道我们可以使用calc https developer mozilla org en US docs Web CSS calc当长度被定义时 flex basis calc 33 33 60px left calc 50 25px he
  • 虽然有复合主键,但当只有一个键唯一时 Hibernate 会报错

    我遇到了一个 Hibernate 错误 上面写着找到多于一行具有给定标识符的行我被困住了 我非常感谢对此的任何帮助 我想创建一个表订单行其中包含特定销售订单的产品代码 数量等 A 销售订单可以包含许多 orderLines orderLin
  • realloc 但只有前几个字节有意义

    假设我已经使用过ptr malloc old size 分配内存块old size字节 只有第一个header size字节是有意义的 我将把尺寸增加到new size new size大于old size and old size大于he
  • 直接连接:从大型机向 Unix 发送文件

    当我从 Mainframe Connect 直接发送可变长度文件到 UNIX 框时 UNIX 上的文件在 Mainframe 文件的开头有一些额外的字节 我尝试使用不同的 SYSOPTS 选项 但仍然收到这些初始字节 任何想法 您应该考虑将
  • Rust:从动态加载库执行特定代码行时出现段错误

    我正在用 Rust 编写一个简单的基于插件的系统 以获得使用该语言的一些技能和经验 我的系统动态加载库并在运行时执行它们以初始化每个插件 从动态加载的库执行代码时 我遇到了一个有趣的段错误问题 这是加载和运行插件初始化函数的代码 这部分工作
  • LINQ 选择第一个

    嗨 我有这段 linq 代码 var fp lnq attaches First a gt a sysid sysid name 经过分析后 它会生成以下 t sql SELECT TOP 1 t0 sysid t0 name t0 att
  • 如何压缩文件名中包含今天日期的文件夹?

    我有一个批处理和一个 vbs 文件来压缩具有特定目录名称的文件夹并将其复制到另一个文件夹 如何只压缩包含今天日期的文件夹 如果不可能 我如何才能仅压缩将今天日期作为 修改日期 列的文件夹 bat echo off set mypath C
  • admob 广告加载失败:3

    我正在开发一个 Android 应用程序 我想在我的应用程序中显示横幅广告 我以前的应用程序工作正常并且显示广告 当我创建新应用程序时 即使在旧应用程序中广告也没有显示 显示广告加载失败 ad 3 这是 logcat 中显示的内容 11 2
  • Airflow 中的 KubernetesPodOperator 特权 security_context

    我在 Google 的 Cloud Composer 上运行 Airflow 我正在使用KubernetesPodOperator https airflow apache org api airflow contrib operators
  • 当调用 dlclose 时,共享库中的全局变量会发生什么?

    如果通过 dlopen 和 dlclose 机制使用共享库 或 DLL 并且创建的共享库有一些内存来自堆的全局变量 那么当调用 dlclose 时这些变量和内存会发生什么 如果在同一个进程中 再次调用 dlopen 会出现什么行为 If d
  • 带有空 aps 字典的 iOS 推送通知

    进行研究以尝试选择通知类型的方向 我希望能够通知我的应用程序有新数据需要刷新 但不会通过弹出 通知消息打扰用户 这个想法是 如果应用程序打开或关闭 则会发出相同的通知 并且当此 特殊 消息到达并且应用程序打开时 它知道要获取数据 我的想法是
  • SharedPreferences 不适用于真实设备 FLUTTER

    我使用 SharedPreferences 来记住用户名和密码 以便下次登录时无需询问密码 当我使用带有 USB 线的真实设备进行调试时 它运行良好 但当我构建 APK 并安装它时 它在我的设备中不起作用 我不知道我错过了什么 我像这样在登