I’m working on an application where I have several views with TextInput widgets, and I’d like to detect when they gain focus in order to dispatch a specific message. I’ve assigned an Id to my TextInput widgets like this:
let text_input = TextInput::new("", save_name)
.id(Id::new("save_preset_input"));
I’ve looked into the find_focused operation, but I’m unsure how to proceed with it, or even if it’s the right tool for this job. I haven’t found a built-in on_focus event for TextInput. Could anyone guide me on how to properly use commands, or any other mechanism, to detect when a TextInput is focused and dispatch a message in response?
Any advice or examples would be greatly appreciated.
I was trying to achieve something similar a few months ago, and the solution I found was to create a very simple custom widget that wraps the iced::widget::TextInput widget and whose constructor allows passing a callback to receive messages for changes in the TextInput’s “focus state”.
I have been struggling with the same question, determining which TextInput has the focus as I want to use up and down cursor keys to adjust the content of the field. It holds a String version of a date, so up and down increases and decreases the date. There are multiple ‘date’ fields on the screen. Your solution is really neat but seems a bit over engineered for what should be I feel a lot simpler. Anyway thanks for the answer, was useful for something else.
I maintain my own copy of the TextInput widget with added on_focus and on_unfocus event handlers. Feel free to use it in your app, it’s currently up to date with Iced 0.12.1: ~lufte/vimini (master): src/widget/ - sourcehut git.