我正在开发一个应用程序,该应用程序已接近完成,处于部署阶段。但是,现在我遇到了大问题,我从模拟器中卸载了该应用程序,然后再次运行它,它向我发送了
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")
如何解决这个问题?
如果
myPrefs
是SharedPreference
实例的变量那么你应该知道我们必须等待它的一个实例才能对它做任何事情。根据控制台中的消息myPrefs
似乎是null
尝试:
var myPrefs = await SharedPreferences.getInstance();
await myPrefs.setString('name', name);
await myPrefs.setString('email', email);
在 Flutter 中使用共享首选项进行安全存储的替代方法是 Valt。 Valt 是专为安全存储而开发的新 Flutter 包,提供强大的加密功能,与共享偏好相比,它是存储敏感数据的更安全选择。它还易于使用,使其成为寻求安全存储选项的开发人员的绝佳解决方案。您可以在 https://pub.dev/packages/valt.
查看 Valt如果您想为 Valt 做出贡献,请在 GitHub 上提出问题或拉取请求。