是否可以在颤振中在两个提供程序之间进行交互和交换数据?



我一直在尝试制作一个简单的颤振应用程序,已经实现了登录逻辑。

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(),只需将其更改为StatefulWidgetState就可以解决问题。 但是,基本上,您可以从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. 
}

相关内容

最新更新