如果类没有上下文,如何从提供者访问数据?

时间:2019-08-07 07:18:40

标签: flutter dart

我正在使用Provider作为状态管理员。我有几个收集数据的小部件。我的小部件之一是应该完成所有数据保存的按钮。它具有onPressed () { ... }事件。我想在保存之前对数据进行一些计算。

我想在单独的课上做

class ResultProcessing 
{
    // here I need access to data from provider
}

按钮:

  Flexible(
    child: Container(
       child: RaisedButton(
       child: Text("Save"),
       onPressed: () {
       // I need to pass data to ResultProcessing 
       },
     )),
   ),

但是我无法访问Provider中的数据的问题,因为ResultProcessing类不是小部件,并且没有context

我需要从处理类中获取的类名称数据为Provider.of<AppState>(context).customer;

我应该在什么时候创建ResultProcessing的实例?在onPressed事件中?

2 个答案:

答案 0 :(得分:1)

你没有,那是反模式。 您的对象有目的地在小部件树之外无法访问。

您应该更改方法。而是使用小部件充当模型和提供者之间的桥梁。

一个典型的例子是ProxyProvider和类似的变体

答案 1 :(得分:1)

您可以执行以下操作。

Flexible(
  child: Container(
   child: RaisedButton(
     child: Text("Save"),
     onPressed: () {
       DataClass data = Provider.of<DataClass>(context); 
       // Pass data to ResultProcessing
       ResultProcessing.handle(data);
     },
   ),
  ),
),