Изменить фокус на следующее текстовое поле во флаттере - PullRequest
0 голосов
/ 22 марта 2020

У меня есть код для создания текстовых полей, как показано ниже

 ...Column(
   children: <Widget>[
                      textField(text: 'User Name'),
                      SizedBox(height: 20),
                      textField(text: 'Password'), ])...

textField - это мой класс, который имеет следующий код для создания текстового поля. Я сделал это, чтобы избежать дублирования кода, так как я часто использую текстовые поля в своем приложении.

...TextField(
    textInputAction: TextInputAction.next,
    obscureText: text == 'Password' ? true : false,
    textCapitalization: TextCapitalization.words,
    cursorColor: primaryColor,
    textAlign: TextAlign.center,
    decoration: InputDecoration(
      labelText: text,
      labelStyle: TextStyle(color: primaryColor, fontFamily: 'Bellotta'),
      filled: true,
      fillColor: Colors.white,
      border: OutlineInputBorder(...

Поскольку я использую эту функцию для создания текстового поля, я не могу использовать focusNode для изменения фокуса. Как я могу решить эту проблему ??

1 Ответ

1 голос
/ 22 марта 2020

вы можете указать еще два параметра: один для focusNode текущего текстового поля и еще один для фокуса, который вы хотите изменить, например

textField(
    text: 'User Name', 
    focusNode: // your focus node, 
    nextFocusNode: // your next field focus node
),

, теперь вы можете использовать:

FocusScope.of(context).requestFocus(nextFocus);

Совет: если вы хотите уменьшить дублирование кода, то вместо создания метода текстового поля вы должны сохранить ur InputDecoration в var / method.

...