【问题标题】:Is it possible to interact and exchange data between two provider in flutter?是否可以在颤振中的两个提供者之间进行交互和交换数据?
【发布时间】:2020-04-01 23:19:25
【问题描述】:

我一直在尝试做一个简单的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&lt;Login&gt;(context);,但找不到上下文。

如果不可能,我应该在哪里调用提供程序中的函数来获取数据,并且由于我通过登录获得了一个身份验证令牌,我保存在Login 提供程序中,我是否必须调用提供程序登录以获取身份验证令牌并在每次请求时传递。

Provider 中是否有类似拦截器的东西。

谢谢。

【问题讨论】:

    标签: flutter provider-model


    【解决方案1】:

    如果您在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. 
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 2011-09-07
      • 2021-11-01
      • 1970-01-01
      • 2016-06-14
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多