Flutter: differenza TextField tra onEdittingComplete e onSubmitted
Sto cercando di capire la differenza tra onEdittingCompletee onSubmitted, non so quando quest'ultimo dovrebbe essere usato poiché il primo può essere usato per cambiare il focus o per inviare il contenuto del modulo.
Ho provato a esaminare la documentazione ma non si è parlato molto della onSubmittedproprietà.
Risposte
onSubmitted:
final ValueChanged<String> onSubmitted
Restituisce il TextFieldvalore immesso in onSubmittedcallback, il più delle volte viene utilizzato per il pulsante del campo successivo / precedente della tastiera quando si utilizza TextInputAction.nexte TextInputAction.previousper textInputActioneseguito.
onEditingComplete:
final VoidCallback onEditingComplete
È simile onSubmittedma non restituisce il valore all'interno del callback, invece aggiorna il testo controllere quindi possiamo recuperare un valore da controllerdove richiesto.
onSubmitted
Come suggerisce il nome, viene chiamato quando l'utente termina la modifica, ad esempio, premere "fatto" o "invia" sulla tastiera. La richiamata trasferisce convenientemente il valore a te, in modo che tu possa fare la tua logica aziendale con esso. Allo stesso tempo, poiché Flutter presume che l'utente abbia "finito", nasconderà la tastiera su schermo.
onEditingComplete
Questo è più un "evento" che ti dice che l'utente ha terminato la modifica. È stato licenziato prima onSubmitted . Non ti trasmette il valore (mentre tecnicamente puoi ottenere il valore utilizzando un controller, questa non è l'intenzione qui), perché puoi ancora gestire la logica aziendale relativa al valore in onSubmitted. Entrambi gli eventi verranno comunque attivati.
Il vero scopo onEditingCompleteè che, nell'implementazione predefinita, Flutter nasconde la tastiera su schermo quando l'azione della tastiera è considerata un'azione di "completamento", come "fatto", "vai", "invia" o "cerca", ma non nasconde la tastiera se l'azione è "non completata", come "successivo" o "precedente". (L'azione della tastiera può essere modificata tramite la textInputActionproprietà del TextFieldwidget.)
Se non ti piace questo comportamento, dovresti modificarlo. Ad esempio, "invia" è considerato un '"azione di completamento" qui, quindi in un'app di messaggistica istantanea (chat), ogni volta che l'utente invia un breve messaggio, la tastiera verrà compressa, il che non va bene. Ma se sovrascriviamo il onEditingCompletecallback a una funzione vuota, interromperà il comportamento predefinito e non nasconderà la tastiera. Per esempio:
TextField(
controller: _controller,
onSubmitted: (text) {
sendMessage(text);
_controller.clear();
},
onEditingComplete: () {},
textInputAction: TextInputAction.send,
)
Demo: