Я пытаюсь использовать Riverpod для управления сценой Flutter.
Я создал класс UsuarioProvider:
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
class UsuarioProvider extends StateNotifier<String> {
UsuarioProvider(): super("No user");
void cambiarUsuario (String nuevo){
state = nuevo;
cambiarEmailUsuarioSP(nuevo);
}
cambiarEmailUsuarioSP(String nuevo) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
state =nuevo;
prefs.setString("email", nuevo);
}
recibirEmailSP() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
String emailActual = prefs.getString("email");
}
}
На main.dart я объявил об использовании провайдера riverpod следующим образом:
//riverpod USUARIO
final usuarioProvider = StateNotifierProvider<UsuarioProvider>((ref) {
return UsuarioProvider();
});
void cambiarUsuario(String nueva) {
context.read(usuarioProvider).cambiarUsuario(nueva);
}
Теперь мне нужно изменить состояние UsuarioProvider следующим образом:
...
cambiarUsuario(parsed['user']['email'].toString());
...
Значение parsed['user']['email'].toString() = '[email protected]'
но затем, пытаясь получить для него состояние:
child: Consumer(builder: (_, ScopedReader watch, __) {
var value = watch(usuarioProvider.state);
print("%%%%%%%%%%%%%%%%%%EMail en Home:"+value.toString());
if (value == "No user") {
value = 'NoClinic'.tr().toString();
}
return Text(
value.toString(),
style: TextStyle(
fontSize: 12.0,
),
);
}),
Я всегда получаю "Нет пользователя", а не "[email protected]"
Что я делаю неправильно?
cambiarUsuario
?, Попробуйте добавить оператор печати вcambiarUsuario
, чтобы распечатать значение, которое вы используете для обновления состояния, просто чтобы убедиться, что провайдер его получил. - person 7mada   schedule 04.03.2021