在flutter_flux example我们提交新邮件时,_currentMessage
已清空,但TextField
未反映此更改。
这是商店中的代码:
triggerOnAction(commitCurrentMessageAction, (ChatUser me) {
final ChatMessage message =
new ChatMessage(sender: me, text: _currentMessage);
_messages.add(message);
_currentMessage = '';
});
视图使用TextEditingController
作为TextField
小部件的控制器,因此我理解为什么它没有更新。
我们如何使用flutter_flux从商店中清空TextField
?
答案 0 :(得分:3)
编辑: 自我发布此答案后,flutter_flux
示例已更新,现在它正确地丢弃了{{1}中的消息但是以更好的方式。你应该看看它。
我认为正确的方法是将TextField
移至TextEditingController
,而不是简单地将ChatMessageStore
保留在该商店中。然后,您可以通过调用currentMessage
上的clear()
来清空文本字段。
一般来说,使用TextEditingController
时,通常在FooState
中保存在香草扑动中的状态值会进入Store
。由于您通常会在flutter_flux
中创建并保留TextEditingController
,因此我认为将其保留在State
中会更自然。
更新的Store
看起来像这样:
ChatMessageStore
请注意,我们不再需要class ChatMessageStore extends Store {
ChatMessageStore() {
triggerOnAction(commitCurrentMessageAction, (ChatUser me) {
final ChatMessage message =
new ChatMessage(sender: me, text: currentMessage);
_messages.add(message);
_msgController.clear();
});
}
final List<ChatMessage> _messages = <ChatMessage>[];
final TextEditingController _msgController = new TextEditingController();
List<ChatMessage> get messages =>
new List<ChatMessage>.unmodifiable(_messages);
TextEditingController get msgController => _msgController;
String get currentMessage => _msgController.text;
bool get isComposing => currentMessage.isNotEmpty;
}
,因为setCurrentMessageAction
会自行处理文本值更改。
然后,可以删除TextEditingController
窗口小部件中定义的msgController
,并相应地更新ChatScreen
。
_buildTextComposer
希望这有帮助。