Я пытаюсь прослушать обновления строковой переменной в моей модели поставщика. Flutter предполагает, что я их не слушаю, поскольку слушатель явно находится вне контекста дерева виджетов, и я не понимаю, почему.
Мой виджет, который я вызываю слушателем, - это IconButton, который находится в классе виджетов с отслеживанием состояния, который является частью элемента списка многих других элементов, который входит в построитель ListView. Я хочу получить строку от слушателя, а затем вызвать setState в классе виджета Stateful, чтобы обновить элемент списка только из элемента списка, у которого был нажат IconButton. Я не хочу обновлять каждый элемент списка в построителе ListView. В противном случае я бы поместил слушателя непосредственно в текстовое поле. Надеюсь, это имеет смысл .. :)
IconButton(
icon: Icon(Icons.mic),
onPressed: () {
Provider.of<VoiceFunctions>(context, listen: false).startFirstVoiceListener();
var newWords = Provider.of<VoiceFunctions>(context, listen: true).outputString;
print(newWords);
}),
Я попытался переместить прослушиватель для outputString в его собственную функцию, чтобы он вышел из onPressed (), но это дает ту же ошибку.
Полная трассировка стека:
════════ Exception caught by gesture ═══════════════════════════════════════════
The following assertion was thrown while handling a gesture:
Tried to listen to a value exposed with provider, from outside of the widget tree.
This is likely caused by an event handler (like a button's onPressed) that called
Provider.of without passing `listen: false`.
To fix, write:
Provider.of<VoiceFunctions>(context, listen: false);
It is unsupported because may pointlessly rebuild the widget associated to the
event handler, when the widget tree doesn't care about the value.
The context used was: FlashcardItemWidget(dependencies: [MediaQuery, _LocalizationsScope-[GlobalKey#02e26], _InheritedTheme], state: _FlashcardItemWidgetState#51c99)
'package:provider/src/provider.dart':
Failed assertion: line 191 pos 7: 'context.owner.debugBuilding ||
listen == false ||
debugIsInInheritedProviderUpdate'