flutter - 需要用 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();
}
提供程序正在正确更新,但文本字段没有正确更新,是的,我已在文本字段上设置了控制器。我会感谢每一个提示。
解决方案
如果你需要监听依赖更新,你需要使用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
}
}
}
推荐阅读
- python - DeferredList 中的断言错误
- javascript - html\js 多选表过滤器
- ios - AVAudioSession 配置用于录制和与他人一起播放
- javascript - 模态对话框解析忽略传递的属性值
- mysql - creating a new table using result set from union all
- php - 结合名字和姓氏在php中将其显示为全名
- javascript - 调用函数时出现“未处理的承诺拒绝”(无法读取未定义的属性“0”)
- javascript - Get original parameter input - Dialogflow Fulfillment
- python - Python:按键的前半部分/部分重新排序字典
- r - Estimate mean score including missingness in R