diff --git a/assets/images/auth_screen/png/stage_one.png b/assets/images/auth_screen/png/stage_one.png
new file mode 100644
index 0000000..4f2d753
Binary files /dev/null and b/assets/images/auth_screen/png/stage_one.png differ
diff --git a/assets/images/auth_screen/png/stage_two.png b/assets/images/auth_screen/png/stage_two.png
new file mode 100644
index 0000000..e55880e
Binary files /dev/null and b/assets/images/auth_screen/png/stage_two.png differ
diff --git a/assets/images/auth_screen/svg/first_step.svg b/assets/images/auth_screen/svg/first_step.svg
new file mode 100644
index 0000000..5c3174b
--- /dev/null
+++ b/assets/images/auth_screen/svg/first_step.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/auth_screen/svg/second_step.svg b/assets/images/auth_screen/svg/second_step.svg
new file mode 100644
index 0000000..ca94e68
--- /dev/null
+++ b/assets/images/auth_screen/svg/second_step.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/auth_screen/svg/third_step.svg b/assets/images/auth_screen/svg/third_step.svg
new file mode 100644
index 0000000..7b842e4
--- /dev/null
+++ b/assets/images/auth_screen/svg/third_step.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/images/biometric_screen/png/biomertric_face.png b/assets/images/biometric_screen/png/biomertric_face.png
new file mode 100644
index 0000000..5044e8b
Binary files /dev/null and b/assets/images/biometric_screen/png/biomertric_face.png differ
diff --git a/assets/images/biometric_screen/png/biometric_fingerprint.png b/assets/images/biometric_screen/png/biometric_fingerprint.png
new file mode 100644
index 0000000..57fafeb
Binary files /dev/null and b/assets/images/biometric_screen/png/biometric_fingerprint.png differ
diff --git a/assets/images/biometric_screen/svg/biometric_bg.svg b/assets/images/biometric_screen/svg/biometric_bg.svg
new file mode 100644
index 0000000..0be6f5d
--- /dev/null
+++ b/assets/images/biometric_screen/svg/biometric_bg.svg
@@ -0,0 +1,23 @@
+
diff --git a/assets/images/country_flag/svg/bahrain_flag.svg b/assets/images/country_flag/svg/bahrain_flag.svg
deleted file mode 100644
index 25d8620..0000000
--- a/assets/images/country_flag/svg/bahrain_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/country_flag/svg/kuwait_flag.svg b/assets/images/country_flag/svg/kuwait_flag.svg
deleted file mode 100644
index bbc8958..0000000
--- a/assets/images/country_flag/svg/kuwait_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/country_flag/svg/oman_flag.svg b/assets/images/country_flag/svg/oman_flag.svg
deleted file mode 100644
index 1636dff..0000000
--- a/assets/images/country_flag/svg/oman_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/country_flag/svg/qatar_flag.svg b/assets/images/country_flag/svg/qatar_flag.svg
deleted file mode 100644
index 68b2a67..0000000
--- a/assets/images/country_flag/svg/qatar_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/country_flag/svg/saudi_arabia_flag.svg b/assets/images/country_flag/svg/saudi_arabia_flag.svg
deleted file mode 100644
index de0b22e..0000000
--- a/assets/images/country_flag/svg/saudi_arabia_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/country_flag/svg/united_arab_emirates_flag.svg b/assets/images/country_flag/svg/united_arab_emirates_flag.svg
deleted file mode 100644
index 56291aa..0000000
--- a/assets/images/country_flag/svg/united_arab_emirates_flag.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
diff --git a/assets/images/dialog/svg/exit_icon.svg b/assets/images/dialog/svg/exit_icon.svg
new file mode 100644
index 0000000..a505a6b
--- /dev/null
+++ b/assets/images/dialog/svg/exit_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/core/routes/route_name.dart b/lib/core/routes/route_name.dart
index b7f6820..7cfc698 100644
--- a/lib/core/routes/route_name.dart
+++ b/lib/core/routes/route_name.dart
@@ -9,6 +9,10 @@ class RouteName {
//Login
static const String loginScreen = 'loginScreen';
+ //Register
+ static const String registerStepScreen = 'registerStepScreen';
+ static const String registerScreen = 'registerScreen';
+
//No Internet
static const String noInternetScreen = 'noInternet';
@@ -17,4 +21,10 @@ class RouteName {
//choose country
static const String chooseCountryScreen = 'chooseCountryScreen';
+
+ //Biometric
+ static const String biometricScreen = 'biometricScreen';
+
+ //Biometric
+ static const String otpScreen = 'otpScreen';
}
diff --git a/lib/core/routes/routes.dart b/lib/core/routes/routes.dart
index f3e3ff6..5792d5c 100644
--- a/lib/core/routes/routes.dart
+++ b/lib/core/routes/routes.dart
@@ -2,7 +2,11 @@
import 'package:go_router/go_router.dart';
import 'package:tanami_app/core/routes/route_name.dart';
+import 'package:tanami_app/features/biometric/presentation/pages/biometric_screen.dart';
import 'package:tanami_app/features/countrySelection/presentation/pages/choose_country_screen.dart';
+import 'package:tanami_app/features/otpVerification/presentation/pages/otp_screen.dart';
+import 'package:tanami_app/features/register/presentation/pages/register_screen.dart';
+import 'package:tanami_app/features/register/presentation/pages/register_step_screen.dart';
import 'package:tanami_app/features/welcome/presentation/pages/weclome_screen.dart';
import '../../features/login/presentation/pages/login_screen.dart';
@@ -23,18 +27,23 @@ final goRouter = GoRouter(
builder: (context, state) {
return const SplashScreen();
},
- // redirect: (context, state) {
- // if (true) {
- // return "/login";
- // }
- // return "/";
- // },
routes: [
GoRoute(
name: RouteName.loginScreen,
- path: RouteName.loginScreen,
+ path: "${RouteName.loginScreen}/:fromScreen",
builder: (context, state) {
- return const LoginScreen();
+ return LoginScreen(
+ fromScreen: state.pathParameters["fromScreen"]!,
+ );
+ },
+ ),
+ GoRoute(
+ name: RouteName.registerStepScreen,
+ path: "${RouteName.registerStepScreen}/:fromScreentype",
+ builder: (context, state) {
+ return RegisterStepScreen(
+ fromScreen: state.pathParameters["fromScreentype"]!,
+ );
},
),
GoRoute(
@@ -51,6 +60,27 @@ final goRouter = GoRouter(
return const ChooseCountryScreen();
},
),
+ GoRoute(
+ name: RouteName.biometricScreen,
+ path: RouteName.biometricScreen,
+ builder: (context, state) {
+ return const BiometricScreen();
+ },
+ ),
+ GoRoute(
+ name: RouteName.registerScreen,
+ path: RouteName.registerScreen,
+ builder: (context, state) {
+ return const RegisterScreen();
+ },
+ ),
+ GoRoute(
+ name: RouteName.otpScreen,
+ path: RouteName.otpScreen,
+ builder: (context, state) {
+ return const OtpScreen();
+ },
+ ),
]),
// GoRoute(
diff --git a/lib/core/styles/app_color.dart b/lib/core/styles/app_color.dart
index 7fc536b..ac91fbe 100644
--- a/lib/core/styles/app_color.dart
+++ b/lib/core/styles/app_color.dart
@@ -36,4 +36,9 @@ class AppColor {
//Radio Color
static const Color radioActiveColor = Color(0xFF0B8933);
+
+ //Otp Color
+ static const Color strokeColor = Color(0xFFB4B4B4);
+ static const Color otpTextColor = Color(0xFF191B1E);
+ static const Color fillColor = Color(0xFFF6F6F6);
}
diff --git a/lib/core/styles/app_images.dart b/lib/core/styles/app_images.dart
index 893c708..feab15b 100644
--- a/lib/core/styles/app_images.dart
+++ b/lib/core/styles/app_images.dart
@@ -22,6 +22,16 @@ class AppImages {
"assets/images/auth_screen/svg/hide_password.svg";
static const String showPassword =
"assets/images/auth_screen/svg/show_password.svg";
+ static const String step1Image =
+ "assets/images/auth_screen/svg/first_step.svg";
+ static const String step2Image =
+ "assets/images/auth_screen/svg/second_step.svg";
+ static const String step3Image =
+ "assets/images/auth_screen/svg/third_step.svg";
+ static const String stage1Image =
+ "assets/images/auth_screen/png/stage_one.png";
+ static const String stage2Image =
+ "assets/images/auth_screen/png/stage_two.png";
//Country Flag
static const String bahrainFlag =
@@ -35,4 +45,15 @@ class AppImages {
"assets/images/country_flag/png/saudi_arabia_flag.png";
static const String unitedArabEmiratesFlag =
"assets/images/country_flag/png/uae_flag.png";
+
+ //Biometric Screen
+ static const String biometricBg =
+ "assets/images/biometric_screen/svg/biometric_bg.svg";
+ static const String biometricFingerprint =
+ "assets/images/biometric_screen/png/biometric_fingerprint.png";
+ static const String biometricFace =
+ "assets/images/biometric_screen/png/biomertric_face.png";
+
+ //Dialog
+ static const String exitAppIcon = "assets/images/dialog/svg/exit_icon.svg";
}
diff --git a/lib/core/styles/app_text.dart b/lib/core/styles/app_text.dart
index d13575e..7b878ea 100644
--- a/lib/core/styles/app_text.dart
+++ b/lib/core/styles/app_text.dart
@@ -29,6 +29,26 @@ class AppText {
static const String invalidPassword = "Invalid Password";
static const String forgorPassword = "Forgot Password";
+ //Register
+ static const String getStartedToday = "Get started today";
+ static const String setupYourTanamiAccountToBegin =
+ "Setup your Tanami account to begin investing in a few simple steps";
+ static const String step1 = "Step 1";
+ static const String step2 = "Step 2";
+ static const String step3 = "Step 3";
+ static const String enterYourCountryOfResidence =
+ "Enter your country of residence and mobile number";
+ static const String enterNameEmailPassword =
+ "Enter your name, email and password";
+ static const String enableBiometricAuthentication =
+ "Enable biometric authentication and select a unique pin code for easy access";
+ static const String getStarted = "Get started";
+ static const String welcome = "Welcome!";
+ static const String selectYourCountryOfResidence =
+ "Select your country of residence and enter your mobile number";
+ static const String nextText = "Next";
+ static const String backText = "Back";
+
//Country Name
static const String bahrainCountryText = "Bahrain";
static const String kuwaitCountryText = "Kuwait";
@@ -36,6 +56,17 @@ class AppText {
static const String qatarCountryText = "Qatar";
static const String saudiArabiaCountryText = "Saudi Arabia";
static const String uaeCountryText = "United Arab Emirates";
-
static const String confirmSelectionText = "Confirm selection";
+
+ //Dialog
+ static const String exitText = "Exit";
+ static const String cancelText = "Cancel";
+ static const String areYouSureYouWantToExitText =
+ "Are you sure you want to Exit?";
+
+ //OTP
+ static const String checkYourMessages = "Check your messages";
+ static const String referToSameOtpMessage =
+ "Please refer to the same OTP message shown below";
+ static const String resendSms = "Resend SMS";
}
diff --git a/lib/core/utils/constant/register_step_data.dart b/lib/core/utils/constant/register_step_data.dart
new file mode 100644
index 0000000..3022a35
--- /dev/null
+++ b/lib/core/utils/constant/register_step_data.dart
@@ -0,0 +1,20 @@
+import 'package:tanami_app/core/styles/app_images.dart';
+import 'package:tanami_app/core/styles/app_text.dart';
+
+List title = [
+ AppText.step1,
+ AppText.step2,
+ AppText.step3,
+];
+
+List description = [
+ AppText.enterYourCountryOfResidence,
+ AppText.enterNameEmailPassword,
+ AppText.enableBiometricAuthentication,
+];
+
+List stepImage = [
+ AppImages.step1Image,
+ AppImages.step2Image,
+ AppImages.step3Image,
+];
diff --git a/lib/features/biometric/presentation/pages/biometric_layout.dart b/lib/features/biometric/presentation/pages/biometric_layout.dart
new file mode 100644
index 0000000..c738d53
--- /dev/null
+++ b/lib/features/biometric/presentation/pages/biometric_layout.dart
@@ -0,0 +1,49 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+
+import '../../../../core/styles/app_images.dart';
+
+class BiometricLayout extends StatelessWidget {
+ const BiometricLayout({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ String biometricImage = "";
+ if (Platform.isIOS) {
+ biometricImage = AppImages.biometricFace;
+ } else {
+ biometricImage = AppImages.biometricFingerprint;
+ }
+ return Scaffold(
+ body: SizedBox(
+ width: 1.sw,
+ height: 1.sh,
+ child: Stack(
+ children: [
+ Positioned.fill(
+ child: SvgPicture.asset(
+ height: 1.sh,
+ width: 1.sw,
+ AppImages.biometricBg,
+ fit: BoxFit.cover,
+ ),
+ ),
+ Positioned.fill(
+ child: Align(
+ alignment: Alignment.center,
+ child: Image.asset(
+ biometricImage,
+ width: 133,
+ height: 155,
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/features/biometric/presentation/pages/biometric_screen.dart b/lib/features/biometric/presentation/pages/biometric_screen.dart
new file mode 100644
index 0000000..f977b6f
--- /dev/null
+++ b/lib/features/biometric/presentation/pages/biometric_screen.dart
@@ -0,0 +1,14 @@
+import 'package:flutter/material.dart';
+import 'package:tanami_app/features/biometric/presentation/pages/biometric_layout.dart';
+
+class BiometricScreen extends StatelessWidget {
+ const BiometricScreen({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return const Scaffold(
+ // resizeToAvoidBottomInset: true,
+ body: BiometricLayout(),
+ );
+ }
+}
diff --git a/lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart b/lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart
index 8712902..1df18ea 100644
--- a/lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart
+++ b/lib/features/countrySelection/presentation/bloc/choose_country_bloc.dart
@@ -6,12 +6,22 @@ import 'choose_country_state.dart';
class RadioBloc extends Bloc {
RadioBloc() : super(RadioInitial()) {
on(_onRadioSelected);
+ on(_onResetRadioSelection);
}
void _onRadioSelected(RadioSelected event, Emitter emit) {
emit(RadioSelectionChanged(event.selectedIndex));
}
+ void _onResetRadioSelection(
+ ResetRadioSelection event, Emitter emit) {
+ emit(RadioInitial());
+ }
+
+ void resetSelection() {
+ add(ResetRadioSelection());
+ }
+
int get selectedCountry {
if (state is RadioSelectionChanged) {
return (state as RadioSelectionChanged).selectedIndex;
diff --git a/lib/features/countrySelection/presentation/bloc/choose_country_event.dart b/lib/features/countrySelection/presentation/bloc/choose_country_event.dart
index 5cf9a32..9c8d94e 100644
--- a/lib/features/countrySelection/presentation/bloc/choose_country_event.dart
+++ b/lib/features/countrySelection/presentation/bloc/choose_country_event.dart
@@ -10,8 +10,10 @@ abstract class RadioEvent extends Equatable {
class RadioSelected extends RadioEvent {
final int selectedIndex;
- const RadioSelected(this.selectedIndex);
+ const RadioSelected([this.selectedIndex = 0]);
@override
List