颤动中共享偏好的替代是什么

What is the alternate of shared preference in flutter

我正在开发一个应用程序,该应用程序已接近完成,处于部署阶段。但是,现在我遇到了大问题,我从模拟器中卸载了该应用程序,然后再次 运行 它向我发送了 shared preference 版本的错误,颤振将其版本从 2.0.5 更新为2.0.7 所以我将 shared preference 的版本从 2.0.5 更改为 2.0.7,然后当我 运行 应用程序构建成功但我无法移动到下一个屏幕。我的 api 是 运行ning 它正在向我发送 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")

如何解决这个问题?

如果 myPrefsSharedPreference 实例的变量,那么您应该知道我们必须等待它的实例,然后才能对其进行任何操作。根据控制台中的消息 myPrefs 似乎是 null

尝试:

var myPrefs = await SharedPreferences.getInstance();

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