-
Notifications
You must be signed in to change notification settings - Fork 1
/
input_email.dart
78 lines (68 loc) · 2.3 KB
/
input_email.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import "dart:async";
import "package:flutter/material.dart";
import "package:flutter_gen/gen_l10n/app_localizations.dart";
import "package:kana_to_kanji/src/core/constants/regexp.dart";
class InputEmail extends StatefulWidget {
final TextEditingController controller;
final bool autofocus;
final bool isRequired;
final bool enabled;
final VoidCallback? onChange;
final VoidCallback? onEditingComplete;
final TextInputAction textInputAction;
const InputEmail(
{required this.controller,
this.isRequired = true,
this.autofocus = false,
this.enabled = true,
this.textInputAction = TextInputAction.none,
this.onChange,
this.onEditingComplete,
super.key});
@override
State<InputEmail> createState() => _InputEmailState();
}
class _InputEmailState extends State<InputEmail> {
final GlobalKey<FormFieldState> _formFieldKey =
GlobalKey<FormFieldState>(debugLabel: "email_input_widget");
Timer? timer;
@override
void dispose() {
timer?.cancel();
super.dispose();
}
void _onChange(String? _) {
timer?.cancel();
timer = Timer(const Duration(milliseconds: 300), () {
_formFieldKey.currentState!.validate();
widget.onChange?.call();
});
}
String? _validate(String? value, AppLocalizations l10n) {
if (widget.isRequired && (value == null || value.isEmpty)) {
return l10n.input_email_missing_email;
} else if (value != null && !emailRegexp.hasMatch(value)) {
return l10n.input_email_incorrect_email_format;
}
return null;
}
@override
Widget build(BuildContext context) {
final AppLocalizations l10n = AppLocalizations.of(context);
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 7),
child: TextFormField(
key: _formFieldKey,
controller: widget.controller,
autofillHints: const [AutofillHints.email],
keyboardType: TextInputType.emailAddress,
autofocus: widget.autofocus,
enabled: widget.enabled,
textInputAction: widget.textInputAction,
onEditingComplete: widget.onEditingComplete,
onChanged: _onChange,
decoration: InputDecoration(hintText: l10n.input_email_placeholder),
validator: (String? value) => _validate(value, l10n)),
);
}
}