Sous Android, nous pouvons appeler setOnFocusChangeListener()
, faire quelque chose dans la méthode onFocusChanged()
, mais flutter ne fournit pas d'interface onFocus()
comme onTap()
dans GestureDetector ou onKey()
dans RawKeyboardListener.
J'ai lu l'API Flutter sur la mise au point, https://docs.flutter.io/flutter/widgets/FocusManager-class.html mais je ne trouve pas de moyen de réaliser ma demande, quiconque le peut donne-moi un coup de main?
Je suppose que vous recherchez FocusNode class. Utilisez la méthode addListener
pour ajouter une fonction d'écoute qui écoute le changement de focus.
Voici un exemple de travail simple de FocusNode en utilisant un TextField.
Widget build(BuildContext context) {
...
var _focusNode = new FocusNode();
var _textField = new TextField(
focusNode: _focusNode
);
_focusNode.addListener(() {
if (!_focusNode.hasFocus) {
// TextField has lost focus
}
});
...
}
Voici la réponse entièrement correcte. addListener
doit être dans initState()
, pas build()
, car cela entraînerait l'ajout d'un écouteur à chaque fois qu'un widget est construit et vous ne voulez probablement pas cela.
class _SomeWidgetState extends State<SomeWidget> {
final FocusNode _focusNode = FocusNode();
@override
void initState() {
super.initState();
_focusNode.addListener(() {
print("Has focus: ${_focusNode.hasFocus}");
});
}
@override
Widget build(BuildContext context) {
return TextField(focusNode: _focusNode);
}
@override
void dispose() {
_focusNode.dispose();
super.dispose();
}
}