birzha_mobile/lib/components/verifyPhoneDialog.dart

144 lines
4.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:birzha/components/TextInputCustom.dart';
import 'package:birzha/core/adaptix/adaptix.dart';
import 'package:birzha/models/settings/settingsModel.dart';
import 'package:birzha/services/textMetaData.dart';
import 'package:birzha/services/validator.dart';
import '../constants.dart';
import '../core/manager/manager.dart';
import '../models/user/userManager.dart';
import '../services/modals.dart';
import 'button.dart';
class VerifyPhoneDialog extends StatefulWidget {
@override
__VerifyPhoneDialogState createState() => __VerifyPhoneDialogState();
}
class __VerifyPhoneDialogState extends State<VerifyPhoneDialog> with ManagerObserverMixin<VerifyPhoneDialog, AppUserManager, TaskStatus> {
late final TextEditingController _controller;
final GlobalKey<FormState> _form = GlobalKey<FormState>();
TaskStatus status = TaskStatus.None;
@override
void initState() {
super.initState();
_controller = TextEditingController();
}
@override
Widget build(BuildContext context) {
return Dialog(
insetPadding: EdgeInsets.symmetric(
horizontal: AppConstants.horizontalPadding(context),
),
child: Container(
padding: EdgeInsets.all(14.adaptedPx()),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
height: 10.adaptedPx(),
),
Text(
"phoneConfirmation".translation,
style: Theme.of(context).primaryTextTheme.headline2!.copyWith(
fontSize: AppConstants.h1FontSize,
),
),
SizedBox(
height: 15.adaptedPx(),
),
Text(
"smsSentInfo".translation,
style: Theme.of(context).primaryTextTheme.headline2!.copyWith(
fontWeight: FontWeight.normal,
fontSize: AppConstants.h1FontSize,
),
textAlign: TextAlign.center,
),
SizedBox(
height: 15.adaptedPx(),
),
Form(
key: _form,
child: Row(
children: [
Expanded(
child: TextInputCustom(
fieldStandard: TextInputMetaData(
name: 'enterSmsCode'.translation,
label: 'enterSmsCode'.translation,
type: TextInputType.number,
autoFocus: true,
validation: Validation(conditions: [
(inp) {
return inp.isEmpty || (int.tryParse(inp.trim())) == null ? 'formatError'.translation : null;
}
]),
formatters: [
LengthLimitingTextInputFormatter(4),
FilteringTextInputFormatter.digitsOnly,
],
key: 'sms_code',
),
controller: _controller,
),
),
],
),
),
SizedBox(
height: 8.adaptedPx(),
),
Center(
child: ManagerSelector<AppUserManager, TaskStatus>(
selector: (context, manager) => manager.getStatusByKey('sms_verify'),
shouldRebuild: (previous, next) => previous != next,
onUpdate: () {
if (mounted && AppUserManager.of(context).getStatusByKey('sms_verify') == TaskStatus.Success) {
Navigator.of(context).pop(true);
}
},
builder: (_, value) => MyButton(
text: 'confirm'.translation,
inProgress: value == TaskStatus.Loading,
onTap: () {
AppUserManager.of(context).checkCode(context, _controller.text);
},
height: 40.adaptedPx(),
),
),
),
],
),
),
);
}
@override
TaskStatus selector(BuildContext context, AppUserManager someManager) {
return someManager.getStatusByKey(_keyForTask);
}
@override
bool shouldUpdateListener(TaskStatus old, TaskStatus newOne) {
return old != newOne;
}
@override
void updateListener() {
if (mounted)
setState(() {
status = AppUserManager.of(context).getStatusByKey(_keyForTask);
if (status == TaskStatus.Success) showSnackBar(context, content: 'dataIsUpdated'.translation);
});
}
}
const _keyForTask = 'sms_verify';