flutter中shared preference的alternate是什么

问题描述 投票:0回答:2

我正在开发一个应用程序,该应用程序已接近完成,处于部署阶段。但是,现在我遇到了大问题,我从模拟器中卸载了该应用程序,然后再次运行它,它向我发送了

shared preference
版本的错误,颤振将其版本从
2.0.5
更新为
2.0.7
,所以我更改了版本从
shared preference
2.0.5
2.0.7
,然后当我运行该应用程序时它成功构建但我无法移动到下一个屏幕。我的 api 正在运行它正在向我发送
200
响应状态代码。

我在登录屏幕中使用

shared preference
,这样当用户登录时,我会在
response.data
中获取所有详细信息,然后使用
shared preference
将数据从登录屏幕传递到主屏幕和其他屏幕。

这里是登录功能代码


var data={};
  Future login() async {
    Dio dio = new Dio();
    
    try {  
      data = {
        'username':"abc",
        'password':"abc123",
        'date': "2021-08-29"
      }; 
     await dio
          .post(localhostUrlLogin, data: json.encode(data),)
          .then((onResponse) async {
          print(onResponse.statusCode);

        String name = (onResponse.data['User']['username']);    
        String email = (onResponse.data['User']['email']);

      //here i am using shared preference to pass the name and email to home and other screen
        myPrefs.setString('name', name);
        myPrefs.setString('email', email);

//here i am calling the home screen
        Navigator.push(
              context, new MaterialPageRoute(builder: (context) => Home()));
      
      });
    } catch (e) {
         showDialog(
            context: context,
            builder: (BuildContext context) {
              return AdvanceCustomAlert(
                title: "Connection Error",
                descriptions: "Connection error",
                icon: Icons.error,
                bgcolor: Colors.red,
                fgcolor: Colors.red,
              );
            });
        
      } 
  }

当我点击登录按钮时,它会在终端发送这个输出


I/flutter (11877): 200
I/flutter (11877): NoSuchMethodError: The method 'setString' was called on null.
I/flutter (11877): Receiver: null
I/flutter (11877): Tried calling: setString("name", "abc")

如何解决这个问题?

flutter null sharedpreferences alternate
2个回答
2
投票

如果

myPrefs
SharedPreference
实例的变量那么你应该知道我们必须等待它的一个实例才能对它做任何事情。根据控制台中的消息
myPrefs
似乎是
null

尝试:

var myPrefs = await SharedPreferences.getInstance();

await myPrefs.setString('name', name);
await myPrefs.setString('email', email);


0
投票

在 Flutter 中使用共享首选项进行安全存储的替代方法是 Valt。 Valt 是专为安全存储而开发的新 Flutter 包,提供强大的加密功能,与共享偏好相比,它是存储敏感数据的更安全选择。它还易于使用,使其成为寻求安全存储选项的开发人员的绝佳解决方案。您可以在 https://pub.dev/packages/valt.

查看 Valt

如果您想为 Valt 做出贡献,请在 GitHub 上提出问题或拉取请求。

© www.soinside.com 2019 - 2024. All rights reserved.