如何使用flutter_flux从Store更改TextField文本?

时间:2017-11-29 21:06:05

标签: flutter

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

1 个答案:

答案 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

希望这有帮助。