secure access

This commit is contained in:
Rajshinde046
2024-03-19 12:19:01 +05:30
parent daa3f5f1c6
commit 03d5d3dc1a
19 changed files with 898 additions and 11 deletions

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"java.configuration.updateBuildConfiguration": "interactive"
}

View File

@@ -47,7 +47,7 @@ android {
applicationId "com.example.traderscircuit"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion
minSdkVersion 21
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
assets/images/png/pin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,77 @@
// ignore_for_file: non_constant_identifier_names, file_names, prefer_const_constructors
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
class CommonAppbar extends StatelessWidget implements PreferredSizeWidget {
@override
Size get preferredSize => Size.fromHeight(height);
const CommonAppbar(
{Key? key,
required this.titleTxt,
this.showLeading = true,
this.customBack,
this.backPageName = '',
this.height = 105})
: super(key: key);
final String titleTxt;
final bool? showLeading;
final bool? customBack;
final String? backPageName;
final double height;
@override
Widget build(BuildContext context) {
return PreferredSize(
preferredSize: Size.fromHeight(130),
child: AppBar(
scrolledUnderElevation: 0.0,
backgroundColor: Colors.black,
elevation: 0,
leadingWidth: 56.w,
leading: Padding(
padding: EdgeInsets.only(left: 16.w, top: 20.h),
child: GestureDetector(
onTap: () {
customBack ?? false ? Get.toNamed(backPageName!) : Get.back();
},
child: Padding(
padding: EdgeInsets.only(left: 8.w),
child: Icon(
Icons.arrow_back_ios,
color: Colors.white,
size: 25.r,
),
),
),
),
flexibleSpace: FlexibleSpaceBar(
centerTitle: false,
titlePadding: EdgeInsets.all(0),
title: Padding(
padding: EdgeInsets.only(left: 16.w),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
titleTxt,
style: TextStyle(
color: Colors.white,
fontSize: 24.sp,
fontWeight: FontWeight.w500,
fontFamily: 'manrope'),
maxLines: 2,
softWrap: true,
),
// newTextfield(
// FontWeight.w400, 0)
],
),
),
),
),
);
}
}

View File

@@ -123,13 +123,13 @@ class _CustomTextFormFieldState extends State<CustomTextFormField> {
),
style: TextStyle(color: Colors.white),
keyboardType: widget.texttype,
validator: widget.validator ??
(value) {
if (value == null || value.isEmpty) {
return "Empty value";
}
return null;
},
// validator: widget.validator ??
// (value) {
// if (value == null || value.isEmpty) {
// return "Empty value";
// }
// return null;
// },
inputFormatters: widget.inputFormatters,
onChanged: (value) {
widget.onInput?.call(value);

33
lib/Utils/Dialogs.dart Normal file
View File

@@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
class utils {
static showToast(String? msg) {
if (msg != null && msg != "null" && msg.isNotEmpty) {
Fluttertoast.showToast(msg: msg);
}
}
static loader() {
Get.dialog(
Dialog(
elevation: 0,
backgroundColor: Colors.transparent,
child: WillPopScope(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
color: Color(0xffc18948),
),
],
),
),
onWillPop: () async => false),
),
barrierDismissible: false,
);
}
}

View File

@@ -1,6 +1,17 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
Widget text20W400(String text) {
return Text(
text,
style: TextStyle(
fontSize: 20.sp,
color: Colors.white,
fontWeight: FontWeight.w400,
fontFamily: 'manrope'),
);
}
Widget text18W800(String text) {
return Text(
text,
@@ -23,6 +34,17 @@ Widget text18W600(String text) {
);
}
Widget text18W400(String text) {
return Text(
text,
style: TextStyle(
fontSize: 18.sp,
color: Colors.white,
fontWeight: FontWeight.w400,
fontFamily: 'manrope'),
);
}
Widget text16W400(String text) {
return Text(
text,

View File

@@ -1,8 +1,19 @@
class RouteName {
static const String splashScreen = '/';
static const String nointernet = '/nointernet';
//slidescreen
static const String sliderscreen1 = '/sliderscreen1';
static const String sliderscreen2 = '/sliderscreen2';
static const String sliderscreen3 = '/sliderscreen3';
//login/signup
static const String loginscreen = '/loginscreen';
static const String verifyotp = '/verifyotp';
//secureaccess
static const String secureaccess = '/secureaccess';
static const String faceid = '/faceid';
static const String fingerprint = '/fingerprint';
static const String pin = '/pin';
}

View File

@@ -2,10 +2,15 @@ import 'package:get/get.dart';
import 'package:traderscircuit/Utils/Common/noInternet.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/login/LoginScreen.dart';
import 'package:traderscircuit/view/login/VerifyOtp.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen2.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen3.dart';
import 'package:traderscircuit/view/secureAccess.dart/Faceid.dart';
import 'package:traderscircuit/view/secureAccess.dart/Fingerprint.dart';
import 'package:traderscircuit/view/secureAccess.dart/Pin.dart';
import 'package:traderscircuit/view/secureAccess.dart/SecureAccess.dart';
class AppRoutes {
static appRoutes() => [
@@ -17,6 +22,8 @@ class AppRoutes {
name: RouteName.nointernet,
page: () => const NoInternet(),
),
//slidescreen
GetPage(
name: RouteName.sliderscreen1,
page: () => const Sliderscreen1(),
@@ -29,9 +36,33 @@ class AppRoutes {
name: RouteName.sliderscreen3,
page: () => const Sliderscreen3(),
),
//login/signup
GetPage(
name: RouteName.loginscreen,
page: () => const LoginScreen(),
),
GetPage(
name: RouteName.verifyotp,
page: () => const VerifyOTP(),
),
//secureaccess
GetPage(
name: RouteName.secureaccess,
page: () => const SecureAccess(),
),
GetPage(
name: RouteName.faceid,
page: () => const Faceid(),
),
GetPage(
name: RouteName.fingerprint,
page: () => const Fingerprint(),
),
GetPage(
name: RouteName.pin,
page: () => const Pin(),
),
];
}

View File

@@ -1,13 +1,16 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/Common/text.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/main.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class LoginScreen extends StatefulWidget {
@@ -18,6 +21,13 @@ class LoginScreen extends StatefulWidget {
}
class _LoginScreenState extends State<LoginScreen> {
TextEditingController phonecontroller = TextEditingController();
bool isValidPhoneNumber(String phoneNumber) {
final RegExp phoneNumberExpression = RegExp(r"^0{10}$");
return !phoneNumberExpression.hasMatch(phoneNumber);
}
@override
Widget build(BuildContext context) {
return Scaffold(
@@ -124,7 +134,26 @@ class _LoginScreenState extends State<LoginScreen> {
),
Container(
width: 285.w,
child: CustomTextFormField(),
child: CustomTextFormField(
texttype: TextInputType.phone,
textEditingController: phonecontroller,
// validator: (value) {
// if (value.isEmpty) {
// return 'Enter your phone number';
// } else if (!RegExp(r'(^(?:[+0]9)?[0-9]{10}$)')
// .hasMatch(value)) {
// return 'Enter a valid phone number';
// } else if (!isValidPhoneNumber(value)) {
// return 'Phone number cannot contain 10 zeros';
// }
// return null;
// },
inputFormatters: [
LengthLimitingTextInputFormatter(10),
FilteringTextInputFormatter.allow(
RegExp('[0-9]')),
],
),
)
],
),
@@ -136,7 +165,11 @@ class _LoginScreenState extends State<LoginScreen> {
SizedBox(
height: 65.h,
),
CommonBtn(text: "Login/Signup", onTap: () {}),
CommonBtn(
text: "Login/Signup",
onTap: () {
Get.toNamed(RouteName.verifyotp);
}),
SizedBox(
height: 10.h,
),

View File

@@ -0,0 +1,128 @@
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
import 'package:traderscircuit/Utils/Dialogs.dart';
class VerifyOTP extends StatefulWidget {
const VerifyOTP({super.key});
@override
State<VerifyOTP> createState() => _VerifyOTPState();
}
class _VerifyOTPState extends State<VerifyOTP> {
final GlobalKey<FormState> _otpform = GlobalKey<FormState>();
TextEditingController pincode = TextEditingController();
Color primaryColor = Colors.transparent.withOpacity(0.2);
Color secondaryColor = Colors.grey.shade800;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonAppbar(titleTxt: "Verify OTP"),
backgroundColor: Colors.black,
extendBody: true,
body: Stack(
children: [
CommonBlurLeft(),
CommonBlurRight(),
Stack(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: Form(
key: _otpform,
child: ListView(
physics: BouncingScrollPhysics(),
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
text18W400("Enter four digit code send to"),
SizedBox(
height: 100.h,
),
Container(
child: PinCodeTextField(
showCursor: true,
cursorColor: Colors.white,
textStyle:
TextStyle(fontSize: 18.sp, color: Colors.white),
errorTextSpace: 22,
validator: (value) {
if (value != null && value.isEmpty) {
return "Please Enter verification code";
} else if (value != null && value.length < 4) {
return "OTP length should be atleast 4";
}
return null;
},
keyboardType: TextInputType.number,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
length: 4,
obscureText: false,
animationType: AnimationType.fade,
pinTheme: PinTheme(
selectedFillColor: primaryColor,
inactiveFillColor: primaryColor,
activeFillColor: primaryColor,
inactiveColor: secondaryColor,
activeColor: secondaryColor,
selectedColor: secondaryColor,
shape: PinCodeFieldShape.box,
borderRadius: BorderRadius.circular(15),
fieldHeight: 60.h,
fieldWidth: 60.w,
),
animationDuration: Duration(milliseconds: 300),
enableActiveFill: true,
controller: pincode,
onCompleted: (v) {
print("Completed");
},
onChanged: (value) {
print(value);
setState(() {});
},
beforeTextPaste: (text) {
print("Allowing to paste $text");
return true;
},
appContext: context,
),
),
SizedBox(
height: 45.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
text16W700("Resend Code"),
],
),
SizedBox(
height: 200.h,
),
CommonBtn(
text: "Verify OTP",
onTap: () {
Get.toNamed(RouteName.secureaccess);
},
)
],
),
),
),
],
),
],
),
);
}
}

View File

@@ -0,0 +1,71 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class Faceid extends StatefulWidget {
const Faceid({super.key});
@override
State<Faceid> createState() => _FaceidState();
}
class _FaceidState extends State<Faceid> {
Color primaryColor = Colors.transparent.withOpacity(0.2);
Color secondaryColor = Colors.grey.shade800;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonAppbar(titleTxt: "Secure your access"),
backgroundColor: Colors.black,
extendBody: true,
body: Stack(
children: [
CommonBlurLeft(),
CommonBlurRight(),
Stack(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: ListView(
physics: BouncingScrollPhysics(),
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10.h,
),
text18W400("Quickly set up Face ID for secure access."),
SizedBox(
height: 180.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/images/png/face-id.png"),
],
),
SizedBox(
height: 180.h,
),
CommonBtn(
text: "Setup",
onTap: () {
Get.toNamed(RouteName.loginscreen);
},
)
],
),
),
],
),
],
),
);
}
}

View File

@@ -0,0 +1,71 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class Fingerprint extends StatefulWidget {
const Fingerprint({super.key});
@override
State<Fingerprint> createState() => _FingerprintState();
}
class _FingerprintState extends State<Fingerprint> {
Color primaryColor = Colors.transparent.withOpacity(0.2);
Color secondaryColor = Colors.grey.shade800;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonAppbar(titleTxt: "Secure your access"),
backgroundColor: Colors.black,
extendBody: true,
body: Stack(
children: [
CommonBlurLeft(),
CommonBlurRight(),
Stack(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: ListView(
physics: BouncingScrollPhysics(),
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10.h,
),
text18W400("Quickly set up Fingerprint for secure access."),
SizedBox(
height: 180.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/images/png/fingerprint.png"),
],
),
SizedBox(
height: 180.h,
),
CommonBtn(
text: "Setup",
onTap: () {
Get.toNamed(RouteName.loginscreen);
},
)
],
),
),
],
),
],
),
);
}
}

View File

@@ -0,0 +1,122 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class Pin extends StatefulWidget {
const Pin({super.key});
@override
State<Pin> createState() => _PinState();
}
class _PinState extends State<Pin> {
TextEditingController pin = TextEditingController();
Color primaryColor = Colors.transparent.withOpacity(0.2);
Color secondaryColor = Colors.grey.shade800;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonAppbar(titleTxt: "Verify your number"),
backgroundColor: Colors.black,
extendBody: true,
body: Stack(
children: [
CommonBlurLeft(),
CommonBlurRight(),
Stack(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: ListView(
physics: BouncingScrollPhysics(),
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10.h,
),
text18W400("Quickly set up pin for secure access."),
SizedBox(
height: 180.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: PinCodeTextField(
showCursor: true,
cursorColor: Colors.white,
textStyle:
TextStyle(fontSize: 18.sp, color: Colors.white),
errorTextSpace: 22,
validator: (value) {
if (value != null && value.isEmpty) {
return "Please Enter verification code";
} else if (value != null && value.length < 4) {
return "OTP length should be atleast 4";
}
return null;
},
keyboardType: TextInputType.number,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
length: 4,
obscureText: false,
animationType: AnimationType.fade,
pinTheme: PinTheme(
selectedFillColor: primaryColor,
inactiveFillColor: primaryColor,
activeFillColor: primaryColor,
inactiveColor: secondaryColor,
activeColor: secondaryColor,
selectedColor: secondaryColor,
shape: PinCodeFieldShape.box,
borderRadius: BorderRadius.circular(15),
fieldHeight: 60.h,
fieldWidth: 60.w,
),
animationDuration: Duration(milliseconds: 300),
enableActiveFill: true,
controller: pin,
onCompleted: (v) {
print("Completed");
},
onChanged: (value) {
print(value);
setState(() {});
},
beforeTextPaste: (text) {
print("Allowing to paste $text");
return true;
},
appContext: context,
),
),
],
),
SizedBox(
height: 180.h,
),
CommonBtn(
text: "Setup",
onTap: () {
Get.toNamed(RouteName.loginscreen);
},
)
],
),
),
],
),
],
),
);
}
}

View File

@@ -0,0 +1,267 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class SecureAccess extends StatefulWidget {
const SecureAccess({super.key});
@override
State<SecureAccess> createState() => _SecureAccessState();
}
class _SecureAccessState extends State<SecureAccess> {
TextEditingController pincode = TextEditingController();
Color primaryColor = Colors.transparent.withOpacity(0.2);
Color secondaryColor = Colors.grey.shade800;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CommonAppbar(titleTxt: "Secure ypur access"),
backgroundColor: Colors.black,
extendBody: true,
body: Stack(
children: [
CommonBlurLeft(),
CommonBlurRight(),
Stack(
children: [
Padding(
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: ListView(
physics: BouncingScrollPhysics(),
// mainAxisAlignment: MainAxisAlignment.start,
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 30.h,
),
InkWell(
onTap: () {
Get.toNamed(RouteName.faceid);
},
child: GlassmorphicContainer(
width: double.infinity,
height: 80.h,
borderRadius: 8,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Colors.white.withOpacity(0.1),
Color(0xFFFFFFFF).withOpacity(0.05),
],
stops: [
0.1,
1,
]),
border: 0,
blur: 10,
borderGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff9A0000).withOpacity(0.5),
Color(0xFFffffff).withOpacity(0.5),
],
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
SizedBox(
width: 10.w,
),
Image.asset(
"assets/images/png/face-id.png",
height: 40.h,
width: 40.w,
),
SizedBox(
width: 20.w,
),
text20W400(
"Face ID",
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Icon(
Icons.arrow_forward_ios,
color: Colors.white,
),
SizedBox(
width: 20.w,
),
],
)
],
),
),
),
),
SizedBox(
height: 20.h,
),
InkWell(
onTap: () {
Get.toNamed(RouteName.fingerprint);
},
child: GlassmorphicContainer(
width: double.infinity,
height: 80.h,
borderRadius: 8,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Colors.white.withOpacity(0.1),
Color(0xFFFFFFFF).withOpacity(0.05),
],
stops: [
0.1,
1,
]),
border: 0,
blur: 10,
borderGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff9A0000).withOpacity(0.5),
Color(0xFFffffff).withOpacity(0.5),
],
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
SizedBox(
width: 10.w,
),
Image.asset(
"assets/images/png/fingerprint.png",
height: 40.h,
width: 40.w,
),
SizedBox(
width: 20.w,
),
text20W400("Fingerprint"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Icon(
Icons.arrow_forward_ios,
color: Colors.white,
),
SizedBox(
width: 20.w,
)
],
)
],
),
),
),
),
SizedBox(
height: 20.h,
),
InkWell(
onTap: () {},
child: GlassmorphicContainer(
width: double.infinity,
height: 80.h,
borderRadius: 8,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Colors.white.withOpacity(0.1),
Color(0xFFFFFFFF).withOpacity(0.05),
],
stops: [
0.1,
1,
]),
border: 0,
blur: 10,
borderGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff9A0000).withOpacity(0.5),
Color(0xFFffffff).withOpacity(0.5),
],
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
SizedBox(
width: 10.w,
),
Image.asset(
"assets/images/png/pin.png",
height: 40.h,
width: 40.w,
),
SizedBox(
width: 20.w,
),
text20W400("4 Digit Pin"),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Icon(
Icons.arrow_forward_ios,
color: Colors.white,
),
SizedBox(
width: 20.w,
)
],
),
],
),
),
),
),
SizedBox(
height: 250.h,
),
CommonBtn(
text: "Verify OTP",
onTap: () {
Get.toNamed(RouteName.loginscreen);
},
)
],
),
),
],
),
],
),
);
}
}

View File

@@ -144,6 +144,14 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
fluttertoast:
dependency: "direct main"
description:
name: fluttertoast
sha256: dfdde255317af381bfc1c486ed968d5a43a2ded9c931e87cbecd88767d6a71c1
url: "https://pub.dev"
source: hosted
version: "8.2.4"
get:
dependency: "direct main"
description:
@@ -272,6 +280,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.0.2"
pin_code_fields:
dependency: "direct main"
description:
name: pin_code_fields
sha256: "4c0db7fbc889e622e7c71ea54b9ee624bb70c7365b532abea0271b17ea75b729"
url: "https://pub.dev"
source: hosted
version: "8.0.1"
platform:
dependency: transitive
description:

View File

@@ -41,6 +41,8 @@ dependencies:
shared_preferences: ^2.0.15
connectivity_plus: ^5.0.2
glassmorphism: ^3.0.0
pin_code_fields: ^8.0.1
fluttertoast: ^8.0.9