144 lines
4.7 KiB
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';
|