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 5a286bd..89a8b68 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';
@@ -23,4 +27,11 @@ class RouteName {
//Portfolio details
static const String porfolioDetails = 'porfolioDetails';
+
+ //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 4bb1c0a..2272075 100644
--- a/lib/core/routes/routes.dart
+++ b/lib/core/routes/routes.dart
@@ -3,8 +3,15 @@
import 'package:go_router/go_router.dart';
import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/features/MainScreens/MainScreen.dart';
+
import 'package:tanami_app/features/MainScreens/Portfolio/presentation/pages/detailsScreen.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';
@@ -20,55 +27,80 @@ final goRouter = GoRouter(
//errorBuilder: (context, state) => ErrorScreen(state.error),
routes: [
GoRoute(
- name: "splash",
- path: RouteName.splashScreen,
- builder: (context, state) {
- return const SplashScreen();
- },
- // redirect: (context, state) {
- // if (true) {
- // return "/login";
- // }
- // return "/";
- // },
- routes: [
- GoRoute(
- name: RouteName.loginScreen,
- path: RouteName.loginScreen,
- builder: (context, state) {
- return const LoginScreen();
- },
- ),
- GoRoute(
- name: RouteName.welcomeScreen,
- path: RouteName.welcomeScreen,
- builder: (context, state) {
- return const WelcomeScreen();
- },
- ),
- GoRoute(
- name: RouteName.chooseCountryScreen,
- path: RouteName.chooseCountryScreen,
- builder: (context, state) {
- return const ChooseCountryScreen();
- },
- ),
- GoRoute(
- name: RouteName.mainScreen,
- path: RouteName.mainScreen,
- builder: (context, state) {
- return const MainScreen();
- },
- ),
- GoRoute(
+ name: "splash",
+ path: RouteName.splashScreen,
+ builder: (context, state) {
+ return const SplashScreen();
+ },
+ routes: [
+ GoRoute(
+ name: RouteName.loginScreen,
+ path: "${RouteName.loginScreen}/:fromScreen",
+ builder: (context, state) {
+ return LoginScreen(
+ fromScreen: state.pathParameters["fromScreen"]!,
+ );
+ },
+ ),
+ GoRoute(
+ name: RouteName.registerStepScreen,
+ path: "${RouteName.registerStepScreen}/:fromScreentype",
+ builder: (context, state) {
+ return RegisterStepScreen(
+ fromScreen: state.pathParameters["fromScreentype"]!,
+ );
+ },
+ ),
+ GoRoute(
+ name: RouteName.welcomeScreen,
+ path: RouteName.welcomeScreen,
+ builder: (context, state) {
+ return const WelcomeScreen();
+ },
+ ),
+ GoRoute(
+ name: RouteName.chooseCountryScreen,
+ path: RouteName.chooseCountryScreen,
+ builder: (context, state) {
+ return const ChooseCountryScreen();
+ },
+ ),
+ GoRoute(
+ name: RouteName.mainScreen,
+ path: RouteName.mainScreen,
+ builder: (context, state) {
+ return const MainScreen();
+ },
+ ),
+ 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(
name: RouteName.porfolioDetails,
path: RouteName.porfolioDetails,
builder: (context, state) {
return const DetailsScreen();
},
),
- ],
- ),
+ ]),
// GoRoute(
// path: '/profile/:userId',
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 3088294..1b154bc 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";
@@ -44,4 +64,17 @@ class AppText {
static const String currentval = "Current valuation";
static const String totalreturn = "Total return";
static const String disttodate = "Distributions to date";
+
+ //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