我有一个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(() {
});
}
答案 0 :(得分:2)
您需要使用一些状态管理来改善屏幕之间的共享数据。
例如,如果您在此处使用提供程序来提供屏幕A和B的值,则当您更新任一屏幕上的数据时,两个小部件都将收到有关更改的通知。如果您有多个共享同一数据的屏幕,那就很好。
在此处了解有关状态管理的更多信息:
https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple