首页 > 解决方案 > 需要用 Provider 更新 TextController

问题描述

目前,我正在学习颤振,当提供者中的值发生变化时,无法更新一个 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();
  }

提供程序正在正确更新,但文本字段没有正确更新,是的,我已在文本字段上设置了控制器。我会感谢每一个提示。

标签: fluttertextfieldflutter-provider

解决方案


如果你需要监听依赖更新,你需要使用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
    }
  }
}

推荐阅读