如何将上下文传递给提供者的第二个小部件树

Posted

技术标签:

【中文标题】如何将上下文传递给提供者的第二个小部件树【英文标题】:How to pass context to second widget tree for provider 【发布时间】:2019-12-26 01:56:36 【问题描述】:

我正在尝试将上下文传递给第二个小部件树(在函数中),但出现错误:

尝试使用带有 Listenable/Stream (Model2) 子类型的 Provider。 这可能是一个错误,因为 Provider 不会自动更新 更新 Model2 时的依赖项。相反,请考虑更改 Provider 对于处理更新机制的更具体的实现, 如: - ListenableProvider - ChangeNotifierProvider - ValueListenableProvider - 流提供者

Future<void> _neverSatisfied(Key key, @required BuildContext context) async 

final model2 = Provider.of<Model2>(context, listen: false);

  return showDialog<void>(
    context: context,
    barrierDismissible: false, 
    builder: (BuildContext context) 
      return 


    Provider.value(value: model2, child:


AlertDialog(
        title: Text('Rewind and remember'),
        content: SingleChildScrollView(
          child: ListBody(
            children: <Widget>[
              Text('You will never be satisfied.'),
              Text('You\’re like me. I’m never satisfied.'),
            ],
          ),
        ),
        actions: <Widget>[
          FlatButton(
            child: Text('Regret'),
            onPressed: () async 
await model2.getData();

              Navigator.of(context).pop();
            ,
          ),
        ],
),
      );
    ,
  );

同一个StatefulWidget中的第一个小部件:

@override
  Widget build(BuildContext context) 
return ChangeNotifierProxyProvider<Model1, Model2>(
initialBuilder: (_) => Model2(),
  builder: (_, model1, model2) => model2
    ..string = model1.string,
),
  child: Consumer<Model2>(
    builder: (context, model2, _) =>

第二个(我从这里传递上下文):

  @override
  Widget buildStep(BuildContext context) 
  Consumer<Model2>(
    builder: (context, model2, _) =>
...

   _neverSatisfied(context: context); //**pass context**

【问题讨论】:

【参考方案1】:

你应该使用ChangeNotifierProvider.value而不是Provider.value

【讨论】:

谢谢! ChangeNotifierProvider(builder: (context) =&gt; Model2, 我认为也可以!我不知道与ChangeNotifierProvider.value 的区别 不,不要使用它。当您离开路线时,它会处理通知程序,这是不受欢迎的。

以上是关于如何将上下文传递给提供者的第二个小部件树的主要内容,如果未能解决你的问题,请参考以下文章

多个 QGLWidgets 和 gluUnProject

将路径参数传递给 React 上下文提供程序

如何将对象上下文传递给 jQuery.ajax JSONP 回调?

Drupal 视图 - 使用第一个参数来计算第二个上下文过滤器参数

如何将上下文对象传递给 NSValueTransformer

如何将 this 上下文传递给函数?