我一直在尝试制作一个简单的颤振应用程序,已经实现了登录逻辑。
void _saveForm() async {
final loginDetails = Provider.of<Login>(context);
final isValid = _form.currentState.validate();
if (!isValid) {
return;
}
_form.currentState.save();
loginDetails.isLoggingIn();
await loginDetails.logIn(_loginDetails);
if (loginDetails.getIsLoggedIn()) {
print("Changing page");
Navigator.of(context).pushReplacementNamed(ActivityScreen.routeName);
}
}
这将简单地导航到不同的页面。现在我想要的是,如果它已登录,我可以使用loginDetails.getIsLoggedIn()
在我的另一个提供程序类中开始获取一些数据。
我尝试使用Provider.of<Login>(context);
但找不到上下文。
如果不可能,我应该在哪里调用提供程序中的函数来获取数据,并且由于我通过登录获得了身份验证令牌,并且我正在Login
提供程序中保存,因此我是否必须调用 Login 的提供程序以获取身份验证令牌并每次通过请求传递。
Provider
有没有类似拦截器的东西.
谢谢。
如果您在StatelessWidget
中使用_saveForm()
,只需将其更改为StatefulWidget
,State
就可以解决问题。 但是,基本上,您可以从build()
函数传递context
。
/// Inside the StatelessWidget
Widget build(BuildContext context) {
/// some code
_saveForm(context);
}
void _saveForm(BuildContext context) async {
final loginDetails = Provider.of<Login>(context); // now you can use context
/// Same code you wrote.
}