Riverpod未改变状态



我正在尝试使用Riverpod进行颤振阶段管理。

我已经创建了一个类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");
}
}

主要。我已经声明了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() = 'mimail@gmail.com'

的值然后,尝试获取它的状态:

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,
),
);
}),

我总是得到'No user',而不是'mimail@gmail.com'

我做错了什么?

提供商文件:

import 'package:riverpod/riverpod.dart';
final usuarioProvider = StateNotifierProvider<UsuarioProvider>((ref) {
return UsuarioProvider();
});
class UsuarioProvider extends StateNotifier<String> {
UsuarioProvider() : super("No user");
void cambiarUsuario(String nuevo) {
state = nuevo;
cambiarEmailUsuarioSP(nuevo);
}
cambiarEmailUsuarioSP(String nuevo) async {
await Future.delayed(Duration(seconds: 1));

// this isn't necessary and it will case aditional rebuilt
state = nuevo;
}
}

屏幕:

class MyConsumerScreen extends StatelessWidget {
const MyConsumerScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Consumer(
builder: (context, watch, child) {
var value = watch(usuarioProvider.state);
if (value == "No user") {
value = 'NoClinic';
}
return Text(value);
},
),
SizedBox(height: 50),
ElevatedButton(
onPressed: () {
context.read(usuarioProvider).cambiarUsuario("It work !");
},
child: Text("test"),
)
],
),
),
);
}
}

确保添加了提供者作用域:

void main() => runApp(ProviderScope(child: MyApp()));

最新更新