tomigar
tomigar

Reputation: 43

Need to update TextController with Provider

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

Answers (1)

Lulupointu
Lulupointu

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

Related Questions