Как передать контекст во второе дерево виджетов для провайдера

Я пытаюсь передать контекст второму дереву виджетов (в функции), но получаю сообщение об ошибке:

Пытался использовать Provider с подтипом Listenable / Stream (Model2). Вероятно, это ошибка, поскольку поставщик не будет автоматически обновлять иждивенцев при обновлении Model2. Вместо этого рассмотрите возможность изменения Provider для более конкретной реализации, которая обрабатывает механизм обновления, например: - ListenableProvider - ChangeNotifierProvider - ValueListenableProvider - StreamProvider

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**

person FlutterFirebase    schedule 20.08.2019    source источник


Ответы (1)


Вместо Provider.value следует использовать ChangeNotifierProvider.value

person Rémi Rousselet    schedule 20.08.2019
comment
Спасибо! ChangeNotifierProvider(builder: (context) => Model2, тоже работают думаю! Я не знаю разницы с ChangeNotifierProvider.value - person FlutterFirebase; 20.08.2019
comment
Нет, не используйте это. Уведомитель будет удален, когда вы покинете маршрут, что нежелательно. - person Rémi Rousselet; 20.08.2019