Conflict resolve
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"java.configuration.updateBuildConfiguration": "interactive"
|
||||
}
|
||||
@@ -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
|
||||
|
||||
BIN
assets/images/png/face-id.png
Normal file
BIN
assets/images/png/face-id.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/images/png/fingerprint.png
Normal file
BIN
assets/images/png/fingerprint.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
BIN
assets/images/png/pin.png
Normal file
BIN
assets/images/png/pin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
77
lib/Utils/Common/CommonAppbar.dart
Normal file
77
lib/Utils/Common/CommonAppbar.dart
Normal 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)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
import 'package:traderscircuit/Utils/Common/text.dart';
|
||||
|
||||
Widget commonGlassContainer(
|
||||
{required double width,
|
||||
|
||||
33
lib/Utils/Dialogs.dart
Normal file
33
lib/Utils/Dialogs.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
@@ -1,9 +1,13 @@
|
||||
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 homescreen = '/homescreen';
|
||||
static const String sidemenu = '/sidemenu';
|
||||
@@ -13,4 +17,11 @@ class RouteName {
|
||||
|
||||
|
||||
|
||||
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';
|
||||
}
|
||||
|
||||
@@ -6,10 +6,15 @@ import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/ShortTrade.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/Sidemenu.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() => [
|
||||
@@ -21,6 +26,8 @@ class AppRoutes {
|
||||
name: RouteName.nointernet,
|
||||
page: () => const NoInternet(),
|
||||
),
|
||||
|
||||
//slidescreen
|
||||
GetPage(
|
||||
name: RouteName.sliderscreen1,
|
||||
page: () => const Sliderscreen1(),
|
||||
@@ -33,6 +40,8 @@ class AppRoutes {
|
||||
name: RouteName.sliderscreen3,
|
||||
page: () => const Sliderscreen3(),
|
||||
),
|
||||
|
||||
//login/signup
|
||||
GetPage(
|
||||
name: RouteName.loginscreen,
|
||||
page: () => const LoginScreen(),
|
||||
@@ -52,6 +61,28 @@ class AppRoutes {
|
||||
GetPage(
|
||||
name: RouteName.shortTrade,
|
||||
page: () => const ShortTrade(),
|
||||
),
|
||||
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(),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'package:traderscircuit/Utils/Common/CommonBottomNavigation.dart';
|
||||
import 'package:traderscircuit/Utils/Common/MainController.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/Common/text.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
|
||||
|
||||
@@ -6,7 +6,7 @@ import 'package:glassmorphism/glassmorphism.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppBar.dart';
|
||||
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/Common/text.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
|
||||
@@ -28,11 +28,13 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
backgroundColor: Colors.black,
|
||||
drawer: Container(width: 320.w, child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: CommonAppbar(
|
||||
titleTxt: '',
|
||||
preferredSize: Size.fromHeight(60.h),
|
||||
showLeading: false,
|
||||
customleading: InkWell(
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
@@ -43,13 +45,31 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
// Icon(
|
||||
// Icons.menu,
|
||||
// color: Colors.white,
|
||||
// size: 27.sp,
|
||||
// ),
|
||||
),
|
||||
),
|
||||
|
||||
// CommonAppbar(
|
||||
// titleTxt: '',
|
||||
// // preferredSize: Size.fromHeight(60.h),
|
||||
// showLeading: false,
|
||||
// customleading: InkWell(
|
||||
// onTap: () {
|
||||
// _scaffoldKey1.currentState?.openDrawer();
|
||||
// },
|
||||
// child: Center(
|
||||
// child: Image.asset(
|
||||
// 'assets/images/png/menu.png',
|
||||
// height: 15.h,
|
||||
// width: 20.w,
|
||||
// ),
|
||||
// ),
|
||||
// // Icon(
|
||||
// // Icons.menu,
|
||||
// // color: Colors.white,
|
||||
// // size: 27.sp,
|
||||
// // ),
|
||||
// ),
|
||||
// ),
|
||||
body: Stack(children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
|
||||
@@ -3,7 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/sized_box.dart';
|
||||
import 'package:traderscircuit/Utils/Common/text.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
|
||||
class SideMenu extends StatefulWidget {
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
|
||||
128
lib/view/login/VerifyOtp.dart
Normal file
128
lib/view/login/VerifyOtp.dart
Normal 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);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
71
lib/view/secureAccess.dart/Faceid.dart
Normal file
71
lib/view/secureAccess.dart/Faceid.dart
Normal 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);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
71
lib/view/secureAccess.dart/Fingerprint.dart
Normal file
71
lib/view/secureAccess.dart/Fingerprint.dart
Normal 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);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
122
lib/view/secureAccess.dart/Pin.dart
Normal file
122
lib/view/secureAccess.dart/Pin.dart
Normal 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);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
267
lib/view/secureAccess.dart/SecureAccess.dart
Normal file
267
lib/view/secureAccess.dart/SecureAccess.dart
Normal 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);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
16
pubspec.lock
16
pubspec.lock
@@ -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:
|
||||
|
||||
@@ -40,6 +40,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
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user