返回

Flutter 中的 SharedPreferences 不持久?

发布时间:2022-05-12 18:54:52 281
# 信息

我正在尝试通过使用 SharedPreferences 来实现“记住我”功能。不幸的是,无论我做什么,登录详细信息似乎都不会持续存在。我通过在initState方法中调用它(通过我的 GetX 控制器)在我的登录屏幕上使用 SharedPreferences,如下所示:

  final SignInController controller = Get.put(SignInController());
 
  @override
  void initState() {
    // TODO: implement initState
    controller.loadRememberMeDetails();
    super.initState();
  }

...

Row(
 children: [
                                        SizedBox(
                                          height: 24.0,
                                          width: 24.0,
                                          child: GetBuilder(
                                            builder: (s) => Checkbox(
                                              value: s.isChecked,
                                              onChanged: s.handleRememberMe,
                                            ),
                                          ),
                                        ),
                                        SizedBox(width: 5.0),
                                        Material(
                                            color: Colors.transparent,
                                            child: InkWell(
                                              onTap: () {
                                                controller.handleRememberMe(
                                                    !controller.isChecked);
                                              },
                                              child: Text(
                                                "Remember Me",
                                                style: TextStyle(
                                                    color: Colors.black,
                                                    fontSize: 15),
                                              ),
                                            ))
                                      ],
                                    ),

我调用以下命令来保存它:

  void handleRememberMe(bool? value) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool("remember_me", value!);
    await prefs.setString('email', emailController.text);
    await prefs.setString('password', passwordController.text);

    print("Remember me: ${emailController.text} ${passwordController.text}");

    isChecked = value!;
    update();
  }

initState()初始化时调用以下方法:


 void loadRememberMeDetails() async {
    try {
      SharedPreferences prefs = await SharedPreferences.getInstance();
      var email = prefs.getString("email") ?? "";
      var password = prefs.getString("password") ?? "";
      var rememberMe = prefs.getBool("remember_me") ?? false;

      if (rememberMe) {
        isChecked = true;
        emailController.text = email;
        passwordController.text = password;
        update();
      }
    } catch (e) {
      print(e);
    }
  }

然而email等局部变量显示为空。

有没有关于如何修复的想法?

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
下一篇
域后的asp.net核心路由句柄ID 2022-05-12 17:33:16