You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App/lib/widgets/otp/sms-popup.dart

313 lines
9.0 KiB
Dart

5 years ago
import 'dart:async';
import 'dart:io';
5 years ago
import 'package:diplomaticquarterapp/config/size_config.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
5 years ago
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:flutter/material.dart';
4 years ago
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
4 years ago
import 'package:sms_otp_auto_verify/sms_otp_auto_verify.dart';
import '../otp_widget.dart';
class SMSOTP {
final type;
4 years ago
final mobileNo;
4 years ago
final Function onSuccess;
4 years ago
final Function onFailure;
4 years ago
final context;
5 years ago
4 years ago
int remainingTime = 120;
5 years ago
Future<Null> timer;
static BuildContext _context;
static bool _loading;
SMSOTP(
5 years ago
this.context,
this.type,
this.mobileNo,
this.onSuccess,
this.onFailure,
);
5 years ago
final verifyAccountForm = GlobalKey<FormState>();
final TextEditingController _pinPutController = TextEditingController();
5 years ago
TextEditingController digit1 = TextEditingController(text: "");
4 years ago
5 years ago
TextEditingController digit2 = TextEditingController(text: "");
4 years ago
5 years ago
TextEditingController digit3 = TextEditingController(text: "");
4 years ago
5 years ago
TextEditingController digit4 = TextEditingController(text: "");
Map verifyAccountFormValue = {
5 years ago
'digit1': '',
'digit2': '',
'digit3': '',
'digit4': '',
};
4 years ago
final focusD1 = FocusNode();
4 years ago
final focusD2 = FocusNode();
4 years ago
final focusD3 = FocusNode();
4 years ago
final focusD4 = FocusNode();
4 years ago
5 years ago
String errorMsg;
4 years ago
ProjectViewModel projectProvider;
4 years ago
5 years ago
String displayTime = '';
4 years ago
String _code;
4 years ago
dynamic setState;
4 years ago
static String signature;
displayDialog(BuildContext context) async {
4 years ago
// var signature = await checkSignature();
// print(signature);
// if (signature) {
// onSuccess(signature);
// }
return showDialog(
context: context,
barrierColor: Colors.black.withOpacity(0.63),
builder: (context) {
projectProvider = Provider.of(context);
4 years ago
return Dialog(
backgroundColor: Colors.white,
shape: RoundedRectangleBorder(),
insetPadding: EdgeInsets.only(left: 21, right: 21),
child: StatefulBuilder(builder: (context, setState) {
if (displayTime == '') {
startTimer(setState);
4 years ago
// startLister();
if (Platform.isAndroid) checkSignature();
}
return Container(
padding: EdgeInsets.only(left: 21, right: 18, top: 39, bottom: 59),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
4 years ago
SvgPicture.asset(
type == 1 ? "assets/images/new/verify_sms.svg" : "assets/images/new/verify_whatsapp.svg",
height: 50,
width: 50,
),
IconButton(
padding: EdgeInsets.zero,
icon: Icon(Icons.close),
constraints: BoxConstraints(),
onPressed: () {
Navigator.pop(context);
4 years ago
this.onFailure();
},
)
],
),
SizedBox(height: 22),
Text(
TranslationBase.of(context).pleaseEnterTheVerificationCode + ' xxxxxxxx' + mobileNo.toString().substring(mobileNo.toString().length - 3),
4 years ago
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48),
),
SizedBox(height: 18),
Directionality(
textDirection: TextDirection.ltr,
4 years ago
child: Center(
child: OTPWidget(
autoFocus: true,
controller: _pinPutController,
defaultBorderColor: Color(0xffD8D8D8),
maxLength: 4,
onTextChanged: (text) {},
pinBoxColor: Colors.white,
onDone: (code) => _onOtpCallBack(code, null),
textBorderColor: Color(0xffD8D8D8),
pinBoxWidth: 60,
pinBoxHeight: 60,
pinTextStyle: TextStyle(
fontSize: 24.0,
color: Color(0xff2B353E),
),
pinTextAnimatedSwitcherTransition: ProvidedPinBoxTextAnimation.scalingTransition,
pinTextAnimatedSwitcherDuration: Duration(milliseconds: 300),
pinBoxRadius: 10,
4 years ago
keyboardType: TextInputType.number,
),
),
),
SizedBox(height: 30),
RichText(
text: TextSpan(
text: TranslationBase.of(context).validationMessage + '\n',
4 years ago
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48),
children: <TextSpan>[
TextSpan(
text: displayTime,
4 years ago
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xffD02127), letterSpacing: -0.48),
),
],
),
),
],
),
);
}),
);
});
}
TextStyle buildTextStyle() {
return TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
);
}
InputDecoration buildInputDecoration(BuildContext context) {
return InputDecoration(
5 years ago
counterText: " ",
4 years ago
// ts/images/password_icon.png
4 years ago
5 years ago
// contentPadding: EdgeInsets.only(top: 20, bottom: 20),
4 years ago
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(color: Colors.black),
),
4 years ago
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Theme.of(context).primaryColor),
),
4 years ago
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Theme.of(context).errorColor),
),
4 years ago
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Theme.of(context).errorColor),
),
);
}
String validateCodeDigit(value) {
if (value.isEmpty) {
5 years ago
return ' ';
} else if (value.length == 3) {
print(value);
} else {
return null;
}
}
5 years ago
checkValue() {
//print(verifyAccountFormValue);
4 years ago
5 years ago
if (verifyAccountForm.currentState.validate()) {
onSuccess(digit1.text.toString() + digit2.text.toString() + digit3.text.toString() + digit4.text.toString());
5 years ago
}
}
getSecondsAsDigitalClock(int inputSeconds) {
var sec_num = int.parse(inputSeconds.toString()); // don't forget the second param
4 years ago
5 years ago
var hours = (sec_num / 3600).floor();
4 years ago
5 years ago
var minutes = ((sec_num - hours * 3600) / 60).floor();
4 years ago
5 years ago
var seconds = sec_num - hours * 3600 - minutes * 60;
4 years ago
5 years ago
var minutesString = "";
4 years ago
5 years ago
var secondsString = "";
4 years ago
minutesString = minutes < 10 ? "0" + minutes.toString() : minutes.toString();
4 years ago
secondsString = seconds < 10 ? "0" + seconds.toString() : seconds.toString();
4 years ago
5 years ago
return minutesString + ":" + secondsString;
}
startTimer(setState) {
this.remainingTime--;
4 years ago
5 years ago
setState(() {
displayTime = this.getSecondsAsDigitalClock(this.remainingTime);
});
timer = Future.delayed(Duration(seconds: 1), () {
if (this.remainingTime > 0) {
startTimer(setState);
} else {
Navigator.pop(context);
}
});
}
static void hideSMSBox(context) {
Navigator.pop(context);
}
_onOtpCallBack(String otpCode, bool isAutofill) {
if (otpCode.length == 4) {
onSuccess(otpCode);
}
}
4 years ago
checkSignature() async {
SmsVerification.startListeningSms().then((message) {
// setState(() {
final intRegex = RegExp(r'\d+', multiLine: true);
var otp = SmsVerification.getCode(message, intRegex);
_pinPutController.text = otp;
onSuccess(otp);
// });
});
}
// startLister() {
// var signature = checkSignature();
//
// print(signature);
// }
static getSignature() async {
if (Platform.isAndroid) {
4 years ago
return await SmsVerification.getAppSignature();
} else {
return null;
}
}
}