Reputation: 43
Currently, I'm learning flutter and can't update one textController when the value in provider changes. Here is the code I tried already:
TextEditingController textController;
@override
void initState() {
TranslateTextProvider myProvider = Provider.of<TranslateTextProvider>(
context,
listen: false,
);
super.initState();
textController = TextEditingController(text: myProvider.translated);
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
The provider is updating correctly but textfield doesn't and yes I have set the controller on textfield. I'll be grateful for every tip.
Upvotes: 3
Views: 1538
Reputation: 3584
if you need to listen to dependencies updates, you need to use didChangeDependencies
! This is triggered if you are listening to a provider which is updated.
Here is you example adapted:
TextEditingController textController;
@override
void initState() {
super.initState();
textController = TextEditingController();
}
@override
void didChangeDependencies() {
textController.text = Provider.of<TranslateTextProvider>(
context,
listen: true, // Be sure to listen
).text;
super.didChangeDependencies();
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
Of course your Provider
has to dispatch the changes, if you are using a ChangeNotifier
for example, it would imply calling notifyListeners
(if you ChangeNotifier) whenever the text is updated:
class TranslateTextProvider extends ChangeNotifier {
String _text = "";
String get text => _text;
set text(String newText) {
if (newText != text) {
_text = newText;
notifyListeners(); // Notify if the text changed
}
}
}
Upvotes: 8