Флаттер, как создать общее поле текстовой формы для проверки различного входного текста (несколько виджетов использовалиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Флаттер, как создать общее поле текстовой формы для проверки различного входного текста (несколько виджетов использовали

Сообщение Anonymous »

Код: Выделить всё

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:test/config/app_theme.dart';

class LoginInfoFormField extends StatelessWidget {
const LoginInfoFormField(
{required this.controller,
required this.hintText,
required this.labelText,
this.validator,
this.onChanged,
this.inputFormatters,
this.focusNode,
this.enableSuggestions = true,
this.autocorrect = true,
this.obscureText = false,
this.suffixIcon,
super.key});
final TextEditingController? controller;
final String? Function(String?)? validator;
final void Function(String)? onChanged;
final List? inputFormatters;
final FocusNode? focusNode;
final String labelText;
final String hintText;
final bool enableSuggestions;
final bool autocorrect;
final bool obscureText;
final Widget? suffixIcon;

@override
Widget build(BuildContext context) {
print('Key: ${key.toString()}');
return Theme(
data: ThemeData(),
child: TextFormField(
key: key,
controller: controller,
focusNode: focusNode,
obscureText: obscureText,
validator: validator,
onChanged: onChanged,
enableSuggestions: enableSuggestions,
autocorrect: autocorrect,
inputFormatters: inputFormatters,
style: TextStyle(color: Theme.of(context).colorScheme.secondaryContainer),
decoration: InputDecoration(
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: AppTheme.grayColor)),
labelText: tr(labelText),
labelStyle: TextStyle(
fontSize: context.locale == const Locale('my', 'MM') ? 13 : 16,
color: Theme.of(context).colorScheme.secondaryContainer),
hintText: tr(hintText),
hintStyle: TextStyle(
fontSize: context.locale == const Locale('my', 'MM') ? 15 : 16,
),
suffixIcon: suffixIcon),
),
);
}
}
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:test/widgets/formfield/login_info_form_field.dart';

class Login extends StatefulWidget {
const Login({super.key});

@override
State createState() => _LoginState();
}

class _LoginState extends State {

final GlobalKey _userNameKey = GlobalKey();
final GlobalKey _emailKey = GlobalKey();

TextEditingController userNameController = TextEditingController();
TextEditingController emailController = TextEditingController();
@override
Widget build(BuildContext context) {

return Column(
children: [
Padding(
padding: const EdgeInsets.fromLTRB(32, 0, 32, 10),
child: LoginInfoFormField(
key: _userNameKey,
controller: userNameController,
validator: (value) {
if ((value!).trim().isEmpty) {
return tr('userNameRequired');
}
return null;
},
onChanged: (val) =>
_userNameKey.currentState!.validate(),
labelText: 'UserName',
hintText: 'UserName',
),
),
Padding(
padding: const EdgeInsets.fromLTRB(
32, 0, 32, 10),
child: LoginInfoFormField(
key: _emailKey,
validator: (value) {
if ((value!).trim().isEmpty) {
return tr('emailIsRequired');
}
return null;
},
onChanged: (val) {
_emailKey.currentState!.validate();
},
controller: emailController,
inputFormatters: [
FilteringTextInputFormatter
.singleLineFormatter
],
labelText: 'EnterYourEmail',
hintText: 'EnterYourEmail',
),
)
]
);
}
}
< /code>
Я сталкиваюсь с ошибкой и не работаю. p>
Ключ [LabeledGlobalKey#c646e] использовался несколькими виджетами. Родителями этих виджетов были: - DefaultSelectionStyle - _FormScope Глобальный ключ можно указать только для одного виджета одновременно в дереве виджетов.


Подробнее здесь: https://stackoverflow.com/questions/786 ... input-text
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»