Merge pull request #41 from WDI-Ideas/jayeshjain25

ui fix
This commit is contained in:
Jayesh jain
2024-06-12 13:29:02 +05:30
committed by GitHub
10 changed files with 192 additions and 119 deletions

View File

@@ -158,7 +158,8 @@ class AppText {
static const String withdrawAmt = 'Total Withdrawal amount:';
static const String depositAmt = 'Total Deposit amount:';
static const String info2 = 'Payment can include transfer fee from your bank';
static const String info3 = 'To accomplish payment please use payment details and Reference ID in tour Bank';
static const String info3 =
'To accomplish payment please use payment details and Reference ID in tour Bank';
static const String next = 'Next';
static const String depositNoti = 'Create deposit notification';
static const String submit = 'Submit request';
@@ -194,6 +195,7 @@ class AppText {
static const String noText = "No";
static const String yesText = "Yes";
static const String pinUpdatedSucess = "Pin updated Sucessfully !";
static const String pinVerifiedSucess = "Pin verified Sucessfully !";
static const String passwordUpdatedSucess = "Password updated Sucessfully !";
static const String changePasswordText = "Change Password";
static const String newPasswordText = "New Password";

View File

@@ -35,7 +35,7 @@ class InvestPayMethodSection extends StatelessWidget {
},
child: Container(
clipBehavior: Clip.antiAlias,
padding: const EdgeInsets.all(12),
// padding: const EdgeInsets.all(12),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
@@ -59,70 +59,81 @@ class InvestPayMethodSection extends StatelessWidget {
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Radio<int>(
activeColor: AppColor.radioActiveColor,
value: 0,
groupValue: selectedIndex,
onChanged: (int? value) {
if (value != null) {
radioBloc.add(RadioSelected(value));
}
},
),
const Gap(5),
SvgPicture.asset(AppImages.walletIcon),
const Gap(5),
TextWidget().text14W700(AppText.walletText,
clr: AppColor.textLabelColor),
],
),
Container(
decoration: const BoxDecoration(
border: Border(
bottom:
BorderSide(width: 1, color: Colors.grey))),
child: Row(
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: selectedIndex == 0
? const Color(0xFFE4F5E9)
: const Color(0xCCE2E2E2),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: '${AppText.balanceText}: ',
style: GoogleFonts.dmSans(
color: Colors.grey,
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
),
TextSpan(
text: 'SAR 178,000',
style: GoogleFonts.dmSans(
color: Colors.black,
fontSize: 14.0,
fontWeight: FontWeight.bold,
),
),
],
),
Radio<int>(
activeColor: AppColor.radioActiveColor,
value: 0,
groupValue: selectedIndex,
onChanged: (int? value) {
if (value != null) {
radioBloc.add(RadioSelected(value));
}
},
),
const Icon(
Icons.arrow_forward,
color: Colors.grey,
size: 15,
)
const Gap(5),
SvgPicture.asset(AppImages.walletIcon),
const Gap(5),
TextWidget().text14W700(AppText.walletText,
clr: AppColor.textLabelColor),
],
),
),
],
Container(
decoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
width: 1, color: Colors.grey))),
child: Row(
children: [
RichText(
text: TextSpan(
children: [
TextSpan(
text: '${AppText.balanceText}: ',
style: GoogleFonts.dmSans(
color: Colors.grey,
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
),
TextSpan(
text: 'SAR 178,000',
style: GoogleFonts.dmSans(
color: Colors.black,
fontSize: 14.0,
fontWeight: FontWeight.bold,
),
),
],
),
),
const Icon(
Icons.arrow_forward,
color: Colors.grey,
size: 15,
)
],
),
),
],
),
),
Padding(
padding: const EdgeInsets.all(12),
child: TextWidget().text14W500(
"condimentum ac, vestibulum eu nisl.torquent per conubia nostra, per inceptos himenaeos.",
clr: AppColor.textLabelColor),
),
TextWidget().text14W500(
"condimentum ac, vestibulum eu nisl.torquent per conubia nostra, per inceptos himenaeos.",
clr: AppColor.textLabelColor),
const Gap(12),
],
),
@@ -135,7 +146,7 @@ class InvestPayMethodSection extends StatelessWidget {
},
child: Container(
clipBehavior: Clip.antiAlias,
padding: const EdgeInsets.all(12),
// padding: const EdgeInsets.all(12),
decoration: ShapeDecoration(
color: Colors.white,
shape: RoundedRectangleBorder(
@@ -159,33 +170,44 @@ class InvestPayMethodSection extends StatelessWidget {
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Radio<int>(
activeColor: AppColor.radioActiveColor,
value: 1,
groupValue: selectedIndex,
onChanged: (int? value) {
if (value != null) {
radioBloc.add(RadioSelected(value));
}
},
),
const Gap(5),
SvgPicture.asset(AppImages.applePayIcon),
const Gap(5),
TextWidget().text14W700(AppText.applePayText,
clr: AppColor.textLabelColor),
],
),
],
Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: selectedIndex == 1
? const Color(0xFFE4F5E9)
: const Color(0xCCE2E2E2),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [
Radio<int>(
activeColor: AppColor.radioActiveColor,
value: 1,
groupValue: selectedIndex,
onChanged: (int? value) {
if (value != null) {
radioBloc.add(RadioSelected(value));
}
},
),
const Gap(5),
SvgPicture.asset(AppImages.applePayIcon),
const Gap(5),
TextWidget().text14W700(AppText.applePayText,
clr: AppColor.textLabelColor),
],
),
],
),
),
Padding(
padding: const EdgeInsets.all(12.0),
child: TextWidget().text14W500(
AppText.instantTransferFundsApplePayText,
clr: AppColor.textLabelColor),
),
TextWidget().text14W500(
AppText.instantTransferFundsApplePayText,
clr: AppColor.textLabelColor),
const Gap(12),
],
),

View File

@@ -8,6 +8,7 @@ import 'package:tanami_app/features/MainScreens/Wallet/presentation/pages/wallet
import 'package:tanami_app/shared/components/common_bottom_navigation.dart';
import '../../shared/components/bloc/bottom_nav_bar/bottom_navigation_bloc.dart';
import '../../shared/components/bloc/bottom_nav_bar/bottom_navigation_event.dart';
import '../../shared/components/bloc/bottom_nav_bar/bottom_navigation_state.dart';
import '../../shared/components/exit_app_dialog.dart';
@@ -26,6 +27,7 @@ class MainScreen extends StatelessWidget {
const MainScreen({super.key});
@override
Widget build(BuildContext context) {
final PageController pageController = PageController();
return BlocBuilder<BottomNavigationBloc, BottomNavigationState>(
builder: (context, state) {
int selectedIndex = (state as TabState).selectedIndex;
@@ -36,8 +38,22 @@ class MainScreen extends StatelessWidget {
},
child: Scaffold(
backgroundColor: Colors.white,
body: currentTab[selectedIndex],
bottomNavigationBar: bottomnavigationbar(context, selectedIndex),
body: PageView(
controller: pageController,
physics: const NeverScrollableScrollPhysics(), // Disable swipe
onPageChanged: (index) {
context.read<BottomNavigationBloc>().add(TabChanged(index));
},
children: const [
WalletScreen(),
PortfolioScreen(),
InvestScreen(),
AcademyScreen(),
SettingsScreen(),
],
),
bottomNavigationBar:
bottomnavigationbar(context, selectedIndex, pageController),
),
);
},

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/utils/secure/secure_storage_service.dart';
import 'package:tanami_app/shared/components/loader.dart';
import 'package:tanami_app/shared/components/toast_message.dart';
@@ -25,6 +26,7 @@ class BottomSection extends StatelessWidget {
@override
Widget build(BuildContext context) {
SecureStorageService secureStorageService = SecureStorageService();
final radioBloc = context.read<RadioBloc>();
return Column(
children: [
@@ -42,7 +44,7 @@ class BottomSection extends StatelessWidget {
),
const Gap(20),
BlocConsumer<LoginBloc, LoginState>(
listener: (context, state) {
listener: (context, state) async {
if (state is LoginLoading) {
Loader.loader(context);
} else if (state is LoginSuccess) {
@@ -50,6 +52,7 @@ class BottomSection extends StatelessWidget {
successToastMessage(context, "login successful !");
goRouter.pop();
radioBloc.resetSelection();
await secureStorageService.write('isLoginedIn', "true");
goRouter.pushNamed(RouteName.pinScreen, pathParameters: {
"fromScreen":
fromScreen == "forgot-pin" ? "forgot-pin" : "login",

View File

@@ -5,6 +5,7 @@ import '../../../../core/styles/app_color.dart';
import '../../../../core/styles/app_text.dart';
import '../../../../core/utils/secure/secure_storage_service.dart';
import '../../../../shared/components/appbar_widget.dart';
import '../../../../shared/components/exit_app_dialog.dart';
import '../bloc/pin_bloc.dart';
import 'pin_layout.dart';
@@ -15,28 +16,38 @@ class PinScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final secureStorageService = SecureStorageService();
return Scaffold(
backgroundColor: AppColor.plainWhite,
appBar: fromScreen == "register" || fromScreen == "reset-pin"
? AppBarWidget(
height: 75,
titleTxt: fromScreen == "reset-pin"
? AppText.changePinCode
: AppText.createPinCode,
showLeading: fromScreen == "reset-pin" ? true : false,
)
: null,
resizeToAvoidBottomInset: true,
body: MultiBlocProvider(
providers: [
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) =>
PinBloc(secureStorageService: secureStorageService),
return WillPopScope(
onWillPop: () async {
if (fromScreen == "LoginedInUser") {
exitAppDialog(context);
return false;
} else {
return true;
}
},
child: Scaffold(
backgroundColor: AppColor.plainWhite,
appBar: fromScreen == "register" || fromScreen == "reset-pin"
? AppBarWidget(
height: 75,
titleTxt: fromScreen == "reset-pin"
? AppText.changePinCode
: AppText.createPinCode,
showLeading: fromScreen == "reset-pin" ? true : false,
)
: null,
resizeToAvoidBottomInset: true,
body: MultiBlocProvider(
providers: [
BlocProvider(
// Create an instance of the OnboardingBloc
create: (context) =>
PinBloc(secureStorageService: secureStorageService),
),
],
child: PinLayout(
fromScreen: fromScreen,
),
],
child: PinLayout(
fromScreen: fromScreen,
),
),
);

View File

@@ -31,7 +31,8 @@ class PinKey extends StatelessWidget {
if (state.pinComplete &&
state.error.isEmpty &&
!state.verifiedOnce) {
if (fromScreen == "login") {
if (fromScreen == "login" || fromScreen == "LoginedInUser") {
successToastMessage(context, AppText.pinVerifiedSucess);
goRouter.pushNamed(RouteName.mainScreen);
} else if (fromScreen == "reset-pin") {
log("Running this");

View File

@@ -25,7 +25,7 @@ class PinTopSection extends StatelessWidget {
),
),
const Gap(40),
fromScreen == "login"
(fromScreen == "login" || fromScreen == "LoginedInUser")
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [

View File

@@ -4,6 +4,7 @@ import 'package:tanami_app/core/routes/route_name.dart';
import 'package:tanami_app/core/routes/routes.dart';
import '../../../../core/styles/app_color.dart';
import '../../../../core/utils/secure/secure_storage_service.dart';
import '../bloc/app_version/app_version_bloc.dart';
import '../bloc/app_version/app_version_event.dart';
import '../bloc/splash/splash_bloc.dart';
@@ -16,6 +17,7 @@ class SplashScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
SecureStorageService secureStorageService = SecureStorageService();
return Scaffold(
backgroundColor: AppColor.plainWhite,
body: MultiBlocProvider(
@@ -32,11 +34,21 @@ class SplashScreen extends StatelessWidget {
// Set the child of the MultiBlocProvider to a BlocListener widget
child: BlocListener<SplashBloc, SplashState>(
// Define the listener function for the BlocListener widget
listener: (context, state) {
listener: (context, state) async {
// Check if the current state is SplashCompleted
if (state is SplashCompleted) {
// Navigate to the WelcomeScreen using the goRouter
goRouter.goNamed(RouteName.welcomeScreen);
if (await secureStorageService.read('isLoginedIn') == null) {
goRouter.goNamed(RouteName.welcomeScreen);
} else {
if (await secureStorageService.read('isLoginedIn') == "false") {
// Navigate to the WelcomeScreen using the goRouter
goRouter.goNamed(RouteName.welcomeScreen);
} else {
goRouter.goNamed(RouteName.pinScreen, pathParameters: {
"fromScreen": "LoginedInUser",
});
}
}
}
},
child: const SplashLayout(),

View File

@@ -7,7 +7,8 @@ import 'package:tanami_app/core/styles/app_color.dart';
import 'bloc/bottom_nav_bar/bottom_navigation_bloc.dart';
import 'bloc/bottom_nav_bar/bottom_navigation_event.dart';
Widget bottomnavigationbar(BuildContext context, selectedIndex) {
Widget bottomnavigationbar(
BuildContext context, selectedIndex, PageController pageController) {
return BottomNavigationBar(
type: BottomNavigationBarType.fixed,
showUnselectedLabels: true,
@@ -25,6 +26,8 @@ Widget bottomnavigationbar(BuildContext context, selectedIndex) {
),
currentIndex: selectedIndex,
onTap: (index) {
pageController.jumpToPage(index);
context.read<BottomNavigationBloc>().add(TabChanged(index));
},
items: [

View File

@@ -6,9 +6,11 @@ import '../../core/routes/route_name.dart';
import '../../core/routes/routes.dart';
import '../../core/styles/app_color.dart';
import '../../core/styles/app_text.dart';
import '../../core/utils/secure/secure_storage_service.dart';
import 'text_widget.dart';
buildprofilelogoutdialog(context) {
SecureStorageService secureStorageService = SecureStorageService();
return showDialog(
context: context,
builder: (context) => Column(
@@ -79,7 +81,8 @@ buildprofilelogoutdialog(context) {
),
Gap(28.w),
InkWell(
onTap: () {
onTap: () async {
await secureStorageService.write('isLoginedIn', "false");
goRouter.goNamed(RouteName.loginScreen, pathParameters: {
"fromScreen": "registerStep",
});