#flutter
Вопрос:
Я пытаюсь обрабатывать ошибки из своего текстового поля по-другому, я не хочу, чтобы ошибка от валидатора отображалась в текстовом поле, вместо этого я покажу ошибку в закусочной. Что я пытаюсь сделать, так это создать класс ошибок, в котором будут обрабатываться ошибки. В этом классе у меня будет список, в который будут поступать ошибки, если таковые имеются. У меня есть несколько виджетов на этом экране, и главный экран будет вызывать этот класс, поэтому я буду передавать класс ошибок в качестве параметров для других виджетов. Хотя у меня возникли проблемы с закусочной и ошибками.
Класс ошибок:
import 'dart:math';
class Errors {
static List<String>? erros;
void product_error(String error) {
switch (error) {
case 'Título muito curto!':
erros!.add('Título muito curto!');
break;
case 'Descrição muito curta':
erros!.add('Descrição muito curta');
break;
default:
break;
}
}
@override
String toString() {
return 'List: $erros';
}
}
Это фрагмент моего экрана:
body: Form(
key: formKey,
child: ListView(
children: [
ImagesForm(product),
Divider(),
Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextFormField(
initialValue: product.name,
decoration: const InputDecoration(
hintText: 'Título',
border: InputBorder.none,
errorStyle: TextStyle(height: 0)),
style: GoogleFonts.firaCode(
textStyle: TextStyle(
fontSize: 20, fontWeight: FontWeight.w600)),
validator: (name) {
if (name!.length < 6) {
errors.product_error('Título muito curto!');
return '';
}
return null;
},
onSaved: (name) => product.name = name!,
),
Padding(
padding: const EdgeInsets.only(top: 8),
child: Text(
'A partir de',
style: GoogleFonts.firaCode(
textStyle: TextStyle(
color: Colors.grey[800], fontSize: 13)),
),
),
And this is the raised button:
RaisedButton(
onPressed: !product.loading
? () async {
if (formKey.currentState!.validate()) {
formKey.currentState!.save();
await product.save();
context
.read<ProductManager>()
.update(product);
Navigator.pop(context);
} else {
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(
content: Text(errors.toString()),
backgroundColor: Colors.red,
));
}
}
: null,