Флаттер, как создать общее поле текстовой формы для проверки различного входного текста (несколько виджетов использовали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',
),
)
]
);
}
}
Я столкнулся с ошибкой, и проверка не работает.

Несколько виджетов использовали один и тот же GlobalKey.
Я столкнулся с ошибкой и не выполнил проверку.

Несколько виджетов использовали один и тот же GlobalKey.
Я столкнулся с ошибкой и не выполнил проверку.
Я столкнулся с ошибкой и не выполнил проверку.

Несколько виджетов использовали один и тот же GlobalKey.
Я столкнулся с ошибкой и не выполнил проверку.

Несколько виджетов использовали один и тот же GlobalKey.
Я столкнулся с ошибкой и не выполнил проверку.

Несколько виджетов использовали один и тот же GlobalKey.
Я столкнулся с ошибкой, и проверка не работает.

p>
Ключ [LabeledGlobalKey#c646e] использовался несколькими виджетами. Родителями этих виджетов были: - DefaultSelectionStyle - _FormScope Глобальный ключ можно указать только для одного виджета одновременно в дереве виджетов.


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

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

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

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

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

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

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