Функция в классе ChangeNotifier не вызывается - PullRequest
0 голосов
/ 11 марта 2020

У меня есть приложение Flutter с провайдером в качестве менеджера штата. ChangeNotifierProvier находится в самом верху моего приложения (ie. Над виджетом MaterialApp).

  1. У меня есть класс ChangeNotifier следующим образом:
class AmountManager extends ChangeNotifier {
  String amount;
  void changeAmount(String newAmount) {
    amount = newAmount;
    notifyListeners();
  }
}
Тогда у меня есть другой класс с TextField:
class MyTextField extends StatelessWidget {
  @override 
  Widget build(BuildContext context) {
    return TextField(
      //some decorations here
      onChanged(value) {
        Provider.of<AmountManager>(context).changeAmount(value);
      },
    );
  }
}
А в другом классе в главном приложении я вызываю переменную amount:
class MyText extends StatelessWidget {
  @override 
  Widget build(BuildContext context) {
    return Text(
      Provider.of<AmountManager>(context).amount,
    );
  }
}

Проблема в том, что метод Provider.of(...) не может быть вызван. Я посмотрел несколько уроков и не смог найти причину этого. Если я использую текст stati c вместо объекта AmountManager, он работает. Программа использует только начальное значение amount в MyText классе.

Что, по-вашему, я ошибаюсь?

Заранее спасибо,

1 Ответ

1 голос
/ 11 марта 2020

Вам нужно listen: false, когда вы используете Provider.of() в onChanged.

onChanged: (value) {
  Provider.of<AmountManager>(context, listen: false).changeAmount(value);
},

См. это для деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...