flutter - 是否可以在颤振中的两个提供者之间进行交互和交换数据?
问题描述
我一直在尝试制作一个简单的颤振应用程序,已经实现了登录逻辑。
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 类中使用它来开始获取一些数据。
我尝试使用Provider.of<Login>(context);
但未找到上下文。
如果不可能,我应该在哪里调用提供程序中的函数来获取数据,并且由于我通过登录获得了一个身份验证令牌,我保存在Login
提供程序中,我是否必须调用登录的提供程序来获取身份验证令牌并在每次请求中传递。
中是否有类似拦截器的东西Provider
。
谢谢。
解决方案
如果您_saveForm()
在 a中使用StatelessWidget
,只需将其更改为StatefulWidget
and即可State
解决问题。但是,基本上,您可以传递context
frombuild()
函数。
/// 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.
}
推荐阅读
- html - 可以输入 type="date" 选择 dd/mm 格式的日期
- pytorch - 当我使用 pytorch 训练模型时出现 cuda 运行时错误(59)
- jquery - 使用引导程序显示子菜单
- ethereum - geth 节点可以通过 JSON RPC 返回交易的签名吗?
- hapijs - Hapi 17:将服务器属性公开给模块注册
- c# - 在 Angular 7 和 net 2.1 中使用 Secret String 进行身份验证
- java - 使用 Spring 配置 Hazelcast 的正确方法
- azure - 使用 Azure Kubernetes 在端口 80 上运行 Spring Boot
- r - ggplot图在R Shiny Dashboard中不可见
- css - 如何在 BEM 中表达结构伪类(例如 `:last-child`)?