MaximMonakhov/crypt_signature

Вынести инициализацию текстового контроллера из билд метода отображения диалога

Closed this issue · 1 comments

В файле lib/src/ui/dialogs.dart

Инициализация происходит в билд методе.

В редких случаях при скрытии клавиатуры происходит ребилд окна и текстовое поле очищается, таким образом не получается ввести корректный пароль.

Нужно как-то вынести инициализацию контроллера из билд метода.

Костыльно у себя исправил так:

Future<String?> showInputDialog( BuildContext context, String message, String hintText, TextInputType keyboardType, { required TextEditingController controller, List<TextInputFormatter>? inputFormatters, bool obscureText = false, })

Future<String?> askPassword(BuildContext context, String title) => showInputDialog( context, title, "Пароль", TextInputType.visiblePassword, obscureText: true, controller: TextEditingController(), );

`Future<License?> setNewLicenseSheet(BuildContext context) async {
var maskFormatter = MaskTextInputFormatter(
mask: '#####-#####-#####-#####-#####',
filter: {"#": RegExp('[0-9+A-Z]')},
);
String? newLicense = await showInputDialog(
context,
"Введите вашу лицензию Крипто ПРО",
"Номер лицензии",
TextInputType.emailAddress,
inputFormatters: [maskFormatter],
controller: TextEditingController(),
);

return newLicense != null && newLicense.isNotEmpty ? setLicense(context, newLicense) : null;

}`

У меня не удалось вызвать ребилд окна никакими способами. Так что не смог воспроизвести проблему.
Вынес контроллер в любом случае с cec72c9.