Sharedpreferences值未更新

时间:2020-11-05 22:41:02

标签: flutter

我有一个Screen A,它从sharedPreferences实例加载数据。

有一个按钮可以打开屏幕B:

onTap: () {
       print("Card1 Clicked");
       Navigator.push(context, MaterialPageRoute(builder: (BuildContext ctx) => MisClinicas()));

然后在屏幕B上,我更改了一些sharedPreferences值,然后回到屏幕A,单击AppBar上的后退按钮。

Mi问题是屏幕A中的新sharedPreferences值未更新为屏幕B中的新值。

从屏幕B返回到屏幕A时,应该如何获取sharedPreferences更新的值?

编辑屏幕B

这是在屏幕B中执行的用于更改sharedPreferences的方法:

Future<String> setClinicaIdUsuarioActual(String clinicaId,) async {
    final prefs = await SharedPreferences.getInstance();

    prefs.setString('clinica_id', clinicaId);

  ;

    setState(() {});
  }
  Future<String> setClinicaUsuarioActual(String clinica) async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setString('clinica', clinica);
    miClinica = prefs.getString("clinica");
   

    setState(() {});
  }

编辑屏幕A

@override
  void initState()  {
      super.initState();
      WidgetsBinding.instance.addObserver(this);
      print("estoy en initstate de home");
      getEmailUsuarioActual();
      getImagenUsuarioActual();
      getIdUsuarioActual();
      getClinicaUsuarioActual();
      getClinicaIdUsuarioActual();


  }


 Future<String> getEmailUsuarioActual() async{
    final prefs = await SharedPreferences.getInstance();

    miEmail = prefs.getString("email");
print("*****EMEIL "+miEmail);
    _datosLeidos = true;

    setState(() {
    });
  }
  Future<String> getImagenUsuarioActual() async{
    final prefs = await SharedPreferences.getInstance();
    miImagen = prefs.getString("foto");
    print("*****IMAGEN "+miImagen);

    setState(() {
    });
  }

  Future<String> getIdUsuarioActual() async{
    final prefs = await SharedPreferences.getInstance();
    miId = prefs.getString("id");
    print("*****Id "+miId);

    setState(() {
    });
  }
  Future<String> getClinicaUsuarioActual() async{
    final prefs = await SharedPreferences.getInstance();
    miClinica = prefs.getString("clinica") ?? "No has seleccionado ninguna clínica" ;
    print("*****Clinica "+miClinica);

    setState(() {
    });
  }

  Future<String> getClinicaIdUsuarioActual() async{
    final prefs = await SharedPreferences.getInstance();
    miClinicaId = prefs.getString("clinica_id");
    print("*****ClinicaId "+miClinicaId);

    setState(() {
    });
  }

1 个答案:

答案 0 :(得分:2)

您需要使用一些状态管理来改善屏幕之间的共享数据。

例如,如果您在此处使用提供程序来提供屏幕A和B的值,则当您更新任一屏幕上的数据时,两个小部件都将收到有关更改的通知。如果您有多个共享同一数据的屏幕,那就很好。

在此处了解有关状态管理的更多信息:

https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple