需要用 Provider 更新 TextController

Need to update TextController with Provider

目前,我正在学习 flutter,无法在 provider 中的值更改时更新一个 textController。 这是我已经尝试过的代码:

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();
  }

提供商正在正确更新,但文本字段没有更新,是的,我已经在文本字段上设置了控制器。 我将不胜感激。

如果需要监听依赖更新,需要使用didChangeDependencies!如果您正在收听已更新的提供商,则会触发此事件。

这是你改编的例子:

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();
}

当然,您的 Provider 必须发送更改,例如,如果您使用的是 ChangeNotifier,这意味着每当文本出现时调用 notifyListeners(如果您使用 ChangeNotifier)更新:

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