У меня есть текстовая форма, которая принимает буквы и цифры, а клавиатура меняется динамически. Это работает, но когда я удаляю код, цифровая клавиатура остается Вот пример
final _controller = TextEditingController();
var keyboardType = TextInputType.text;
FocusNode _focusNode = FocusNode();
TextFormField(
style: TextStyle(
color: Colors.black,
fontSize: 50,
fontWeight: FontWeight.w700),
decoration:
InputDecoration(labelText: "code", hintText: 'ABC1234'),
controller: _controller,
focusNode: _focusNode,
textCapitalization: TextCapitalization.characters,
keyboardType: keyboardType,
onChanged: (value) {
if (value.length == 3) {
FocusScope.of(context).unfocus();
setState(() {
keyboardType = TextInputType.number;
});
Future.delayed(Duration(milliseconds: 150)).then((value) {
FocusScope.of(context).requestFocus();
});
} else {
setState(() {
keyboardType = TextInputType.text;
});
}
}),





Это потому, что он уже открыт. вам нужно будет сделать те же шаги, что и для отображения цифровой клавиатуры.
то есть
else {
FocusScope.of(context).unfocus();
setState(() {
keyboardType = TextInputType.text;
});
Future.delayed(Duration(milliseconds: 150)).then((value) {
FocusScope.of(context).requestFocus();
});
Кроме того, этот способ обработки условия приведет к закрытию и повторному открытию клавиатуры во многих случаях, вы должны сделать это следующим образом.
if (value.length == 3 && keyboardType == TextInputType.text) {
//....
} else if (value.length < 3 && keyboardType != TextInput.text) {
да, спасибо @JoãoSoares, я этого не заметил. я отредактировал ответ
Если он это сделает, то клавиатура будет закрываться при каждом нажатии клавиши.