#flutter #dart
Вопрос:
Я создаю динамическое текстовое поле с помощью Listviewbuilder :-
(1). Я хочу добавить проверку в поле «Мобильный» (2). Я хочу добавить проверку в поле имя
Но в динамическом состоянии моя проверка не работает должным образом.
Комментарии:
1. поделитесь с нами тем, что вы сделали до сих пор
Ответ №1:
Сначала сохраните проверку полей на карте, как показано ниже.
Карта содержит «ключ» в качестве имени полей и «значения» в качестве функций валидатора.
Maplt;String, String? Function(String?)?gt; formFields = { 'username': (String? value) { return (value!.isEmpty) ? 'Can not be Empty' : null; }, 'password': (String? value) { return (value == null || value!.length lt; 8) ? 'Must be 8 Char Long' : null; }, };
Используйте ключ карты для доступа к функциям валидатора.
Поля форм[Поля форм.ключи.элементАт(индекс)]
А затем используйте ListView.builder для создания нескольких текстовых полей, как показано ниже.
ListView.builder( itemCount: formFields.length, itemBuilder: (context, index) { return TextFormField( decoration: InputDecoration( labelText: formFields.keys.elementAt( index), // this gives key String ('username', 'password') ), onSaved: (String? value) {}, validator: formFields[formFields.keys.elementAt(index)], ); }, ),
Для различных типов элементов формы, например, TextFormField, DropdownButtonFormField, вы можете напрямую добавлять эти виджеты на КАРТУ вместо только валидатора.
Maplt;String, String? Function(String?)?gt; formFields = { 'username': TextFormField( decoration: InputDecoration( labelText: formFields.keys.elementAt( index), // this gives key String ('username', 'password') ), onSaved: (String? value) {}, validator: TextFormField( decoration: InputDecoration( labelText: formFields.keys.elementAt( index), // this gives key String ('username', 'password') ), onSaved: (String? value) {}, validator: (String? value) { return (value!.isEmpty) ? 'Can not be Empty' : null; }, );, );, );