Ниже приведен минимальный фрагмент кода виджета смены пароля, воспроизводящий проблему.
Я использую flutter 3.3.10 на Windows 10 и реальном (не эмулируемом) устройстве ZTE Blade A5 с Android 9.
Форма с TextFormField для пароля и подтверждения пароля.
TextFormField оба имеют textInputAction: TextInputAction.next и InputDecoration с кнопка «показать/скрыть».
Кнопки «показать/скрыть» имеют функцию onPressed() для изменения статуса видимости содержимого поля.
При действии ввода нажатие «Далее» на кнопке клавиатуры Android в первом TextFormField, фокус не перемещается на следующее поле, если предполагается, что функция onPressed не равна нулю;
Если я устанавливаю onPressed: null в первом или оба TextFormField, textInputAction "next" работают должным образом. Я тоже попробовал focusNode, но безуспешно.
Есть ли способ заставить его работать?
Спасибо!
void main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData( primarySwatch: Colors.blue ),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
final _formKey = GlobalKey();
final TextEditingController passwordController = TextEditingController();
final TextEditingController confirmPasswordController = TextEditingController();
bool _obscurePassword = true;
bool _obscureConfirmPassword = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Test"),
),
body: Center(
child: Form(
key: _formKey,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
TextFormField(
obscureText: _obscurePassword,
controller: passwordController,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.password),
suffixIcon: MaterialButton(
padding: EdgeInsets.zero,
minWidth: 0,
child: Icon(_obscurePassword ? Icons.visibility_off : Icons.visibility),
onPressed: () => setState(() => _obscurePassword = !_obscurePassword),
),
labelText: "Password",
),
),
TextFormField(
obscureText: _obscureConfirmPassword,
controller: confirmPasswordController,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.password),
suffixIcon: MaterialButton(
padding: EdgeInsets.zero,
minWidth: 0,
child: Icon(_obscureConfirmPassword ? Icons.visibility_off : Icons.visibility),
onPressed: () => setState(() => _obscureConfirmPassword = !_obscureConfirmPassword),
),
labelText: "Password confirmation",
),
),
],
),
),
),
),
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/752 ... n-pressing
Flutter TextInputAction.next не переходит к следующему полю ввода при нажатии кнопки «Далее» на клавиатуре Android ⇐ Android
Форум для тех, кто программирует под Android
1728811835
Anonymous
Ниже приведен минимальный фрагмент кода виджета смены пароля, воспроизводящий проблему.
Я использую flutter 3.3.10 на Windows 10 и реальном (не эмулируемом) устройстве ZTE Blade A5 с Android 9.
Форма с TextFormField для пароля и подтверждения пароля.
TextFormField оба имеют textInputAction: TextInputAction.next и InputDecoration с кнопка «показать/скрыть».
Кнопки «показать/скрыть» имеют функцию onPressed() для изменения статуса видимости содержимого поля.
При действии ввода нажатие «Далее» на кнопке клавиатуры Android в первом TextFormField, фокус не перемещается на следующее поле, если предполагается, что функция onPressed не равна нулю;
Если я устанавливаю onPressed: null в первом или оба TextFormField, textInputAction "next" работают должным образом. Я тоже попробовал focusNode, но безуспешно.
Есть ли способ заставить его работать?
Спасибо!
void main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData( primarySwatch: Colors.blue ),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
final _formKey = GlobalKey();
final TextEditingController passwordController = TextEditingController();
final TextEditingController confirmPasswordController = TextEditingController();
bool _obscurePassword = true;
bool _obscureConfirmPassword = true;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Test"),
),
body: Center(
child: Form(
key: _formKey,
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
TextFormField(
obscureText: _obscurePassword,
controller: passwordController,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.password),
suffixIcon: MaterialButton(
padding: EdgeInsets.zero,
minWidth: 0,
child: Icon(_obscurePassword ? Icons.visibility_off : Icons.visibility),
onPressed: () => setState(() => _obscurePassword = !_obscurePassword),
),
labelText: "Password",
),
),
TextFormField(
obscureText: _obscureConfirmPassword,
controller: confirmPasswordController,
keyboardType: TextInputType.text,
textInputAction: TextInputAction.next,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.password),
suffixIcon: MaterialButton(
padding: EdgeInsets.zero,
minWidth: 0,
child: Icon(_obscureConfirmPassword ? Icons.visibility_off : Icons.visibility),
onPressed: () => setState(() => _obscureConfirmPassword = !_obscureConfirmPassword),
),
labelText: "Password confirmation",
),
),
],
),
),
),
),
);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/75226757/flutter-textinputaction-next-doesnt-move-to-the-next-input-field-when-pressing[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия