|
|
|
|
@ -5,7 +5,10 @@ import 'package:flutter/services.dart';
|
|
|
|
|
import 'package:flutter_svg/svg.dart';
|
|
|
|
|
import 'package:hmg_nurses/classes/colors.dart';
|
|
|
|
|
import 'package:hmg_nurses/classes/utils.dart';
|
|
|
|
|
import 'package:hmg_nurses/extensions/int_extensions.dart';
|
|
|
|
|
import 'package:hmg_nurses/extensions/string_extensions.dart';
|
|
|
|
|
import 'package:hmg_nurses/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:hmg_nurses/widgets/button/default_button.dart';
|
|
|
|
|
import 'package:local_auth/local_auth.dart';
|
|
|
|
|
import 'package:sizer/sizer.dart';
|
|
|
|
|
|
|
|
|
|
@ -28,47 +31,25 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
|
|
|
|
|
int selectedFlag = 0;
|
|
|
|
|
bool isNeedVerifyWithFaceIDAndBiometrics = false;
|
|
|
|
|
|
|
|
|
|
bool lastLoginCheck = false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
_getAvailableBiometrics();
|
|
|
|
|
super.initState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
|
|
|
|
appBar: AppBar(
|
|
|
|
|
backgroundColor: Colors.transparent,
|
|
|
|
|
leading: IconButton(
|
|
|
|
|
icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
|
|
|
|
|
onPressed: () => Navigator.pop(context),
|
|
|
|
|
),
|
|
|
|
|
// actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
|
|
|
|
|
),
|
|
|
|
|
body: ListView(
|
|
|
|
|
padding: const EdgeInsets.all(21),
|
|
|
|
|
physics: const BouncingScrollPhysics(),
|
|
|
|
|
children: [
|
|
|
|
|
Text(
|
|
|
|
|
LocaleKeys.pleaseVerifyForBio.tr(),
|
|
|
|
|
style: TextStyle(fontSize: 14.sp, fontWeight: FontWeight.w600),
|
|
|
|
|
),
|
|
|
|
|
if (isNeedVerifyWithFaceIDAndBiometrics) Text(LocaleKeys.pleaseVerifyForBio.tr()),
|
|
|
|
|
GridView(
|
|
|
|
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
|
|
|
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
|
|
|
padding: const EdgeInsets.only(top: 9),
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
children: [
|
|
|
|
|
if (!isNeedVerifyWithFaceIDAndBiometrics) getButton(3),
|
|
|
|
|
if (!isNeedVerifyWithFaceIDAndBiometrics) getButton(4),
|
|
|
|
|
getButton(2),
|
|
|
|
|
getButton(1),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
String getVerificationType(int type) {
|
|
|
|
|
if (type == 1) {
|
|
|
|
|
return LocaleKeys.sms.tr();
|
|
|
|
|
} else if (type == 2) {
|
|
|
|
|
return LocaleKeys.whatsapp.tr();
|
|
|
|
|
} else if (type == 3) {
|
|
|
|
|
return LocaleKeys.face.tr();
|
|
|
|
|
} else if (type == 4) {
|
|
|
|
|
return LocaleKeys.fingerPrint.tr();
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> _getAvailableBiometrics() async {
|
|
|
|
|
@ -149,10 +130,7 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
|
|
|
|
|
width: 38,
|
|
|
|
|
color: isDisable ? MyColors.darkTextColor.withOpacity(0.7) : null,
|
|
|
|
|
),
|
|
|
|
|
Text(
|
|
|
|
|
title,
|
|
|
|
|
style: const TextStyle(fontWeight: FontWeight.w600),
|
|
|
|
|
)
|
|
|
|
|
title.toText14()
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
@ -184,4 +162,117 @@ class LoginMethodsPageState extends State<LoginMethodsPage> {
|
|
|
|
|
}
|
|
|
|
|
return isAvailable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(
|
|
|
|
|
appBar: AppBar(
|
|
|
|
|
backgroundColor: Colors.transparent,
|
|
|
|
|
leading: IconButton(
|
|
|
|
|
icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
|
|
|
|
|
onPressed: () => Navigator.pop(context),
|
|
|
|
|
),
|
|
|
|
|
// actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
|
|
|
|
|
),
|
|
|
|
|
body: ListView(
|
|
|
|
|
padding: const EdgeInsets.all(21),
|
|
|
|
|
physics: const BouncingScrollPhysics(),
|
|
|
|
|
children: [
|
|
|
|
|
if (lastLoginCheck)
|
|
|
|
|
Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.welcomeBack.tr().toText12(),
|
|
|
|
|
"Faiz Hashmi".toText24(isBold: true),
|
|
|
|
|
10.height,
|
|
|
|
|
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText18(),
|
|
|
|
|
Container(
|
|
|
|
|
height: 72,
|
|
|
|
|
margin: const EdgeInsets.only(top: 23, bottom: 23),
|
|
|
|
|
alignment: Alignment.center,
|
|
|
|
|
padding: const EdgeInsets.only(left: 17, right: 12),
|
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
|
borderRadius: BorderRadius.circular(10),
|
|
|
|
|
color: Colors.white,
|
|
|
|
|
border: Border.all(
|
|
|
|
|
color: const Color(0xffefefef),
|
|
|
|
|
width: 1,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
children: [
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.lastLoginDetails.tr().toText16(),
|
|
|
|
|
//TODO: DATE
|
|
|
|
|
// DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12(),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
Row(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
|
|
|
children: [
|
|
|
|
|
LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
|
|
|
|
|
//TODO: VERIFICATION TYPE
|
|
|
|
|
// getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(),
|
|
|
|
|
const Expanded(child: SizedBox()),
|
|
|
|
|
//TODO: DATE
|
|
|
|
|
|
|
|
|
|
// DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
if (!lastLoginCheck)
|
|
|
|
|
Text(
|
|
|
|
|
LocaleKeys.pleaseVerifyForBio.tr(),
|
|
|
|
|
style: TextStyle(fontSize: 14.sp, fontWeight: FontWeight.w600),
|
|
|
|
|
),
|
|
|
|
|
if (isNeedVerifyWithFaceIDAndBiometrics) Text(LocaleKeys.pleaseVerifyForBio.tr()),
|
|
|
|
|
GridView(
|
|
|
|
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
|
|
|
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
|
|
|
padding: const EdgeInsets.only(top: 9),
|
|
|
|
|
shrinkWrap: true,
|
|
|
|
|
children: [
|
|
|
|
|
if (!isNeedVerifyWithFaceIDAndBiometrics) getButton(3),
|
|
|
|
|
if (!isNeedVerifyWithFaceIDAndBiometrics) getButton(4),
|
|
|
|
|
getButton(2),
|
|
|
|
|
getButton(1),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 10.h),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
bottomSheet: !lastLoginCheck
|
|
|
|
|
? null
|
|
|
|
|
: Container(
|
|
|
|
|
height: 10.h,
|
|
|
|
|
color: MyColors.backgroundColor,
|
|
|
|
|
width: double.infinity,
|
|
|
|
|
child: Center(
|
|
|
|
|
child: FractionallySizedBox(
|
|
|
|
|
widthFactor: 0.9,
|
|
|
|
|
child: Column(
|
|
|
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
Padding(
|
|
|
|
|
padding: EdgeInsets.symmetric(horizontal: 4.w),
|
|
|
|
|
child: DefaultButton(LocaleKeys.useAnotherAccount.tr(), () {}, colors: const [MyColors.redColor, MyColors.redColor]),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 3.h)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|