需要用 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
}
}
}
目前,我正在学习 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
}
}
}