首页 > 解决方案 > 是否可以在颤振中的两个提供者之间进行交互和交换数据?

问题描述

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

  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

谢谢。

标签: flutterprovider-model

解决方案


如果您_saveForm()在 a中使用StatelessWidget,只需将其更改为StatefulWidgetand即可State解决问题。但是,基本上,您可以传递contextfrombuild()函数。

/// 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. 
  }

推荐阅读