Merge pull request #57 from WDI-Ideas/jayeshjain25

Jayeshjain25
This commit is contained in:
Jayesh jain
2024-06-18 18:42:51 +05:30
committed by GitHub
20 changed files with 425 additions and 92 deletions

View File

@@ -245,9 +245,11 @@ final goRouter = GoRouter(
),
GoRoute(
name: RouteName.investDetailScreen,
path: RouteName.investDetailScreen,
path: "${RouteName.investDetailScreen}/:type",
builder: (context, state) {
return const InvestDetailsScreen();
return InvestDetailsScreen(
type: state.pathParameters["type"]!,
);
},
),
GoRoute(

View File

@@ -257,7 +257,10 @@ class AppText {
static const String fundedText = "funded";
static const String sponsorNameText = "Sponsor name";
static const String estimatedReturnText = "Estimated return";
static const String originalEstimatedReturnText = "Original estimated return";
static const String actualEstimatedReturnText = "Actual return";
static const String holdingPeriodText = "Holding period";
static const String payoutDateText = "Payout Date";
static const String minimumInvestmentText = "Minimum investment";
static const String keyMeritsIOfnvestmentText = "Key Merits of Investment";
static const String investmentDetailsText = "Investment details";

View File

@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gap/gap.dart';
import '../../../../../core/styles/app_color.dart';
import '../widgets/academy_detail_section.dart';
import '../widgets/academy_video_section.dart';
@@ -10,7 +12,7 @@ class AcademyDetailsLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 20.0),

View File

@@ -1,13 +1,15 @@
import 'package:flutter/material.dart';
import 'package:tanami_app/features/MainScreens/Academy/presentation/widgets/academy_card.dart';
import '../../../../../core/styles/app_color.dart';
class AcademyLayout extends StatelessWidget {
const AcademyLayout({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
body: ListView.builder(
itemCount: data.length,
itemBuilder: (context, index) {

View File

@@ -10,7 +10,8 @@ import '../widgets/invest_included_documents_section.dart';
import '../widgets/key_investment_section.dart';
class InvestDetailsLayout extends StatelessWidget {
const InvestDetailsLayout({super.key});
final String type;
const InvestDetailsLayout({super.key, required this.type});
@override
Widget build(BuildContext context) {
@@ -37,7 +38,9 @@ class InvestDetailsLayout extends StatelessWidget {
child: Column(
children: [
InvestDetailCarouselView(),
const InvestDetailDetailsSection(),
InvestDetailDetailsSection(
type: type,
),
],
),
),

View File

@@ -12,24 +12,27 @@ import '../../../Portfolio/presentation/bloc/carousel/carousel_bloc.dart';
import 'invest_details_layout.dart';
class InvestDetailsScreen extends StatelessWidget {
const InvestDetailsScreen({super.key});
final String type;
const InvestDetailsScreen({super.key, required this.type});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: Container(
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 26),
width: 1.sw,
height: 105.h,
child: ButtonWidget().elevatedBtn(
text: AppText.investText,
clr: AppColor.primaryColor2,
function: () {
goRouter.pushNamed(RouteName.investPaymentScreen);
},
),
),
bottomNavigationBar: type == "closed"
? null
: Container(
padding: const EdgeInsets.symmetric(horizontal: 18, vertical: 26),
width: 1.sw,
height: 105.h,
child: ButtonWidget().elevatedBtn(
text: AppText.investText,
clr: AppColor.primaryColor2,
function: () {
goRouter.pushNamed(RouteName.investPaymentScreen);
},
),
),
appBar: const AppBarWidget(
height: 45,
titleTxt: "",
@@ -41,7 +44,9 @@ class InvestDetailsScreen extends StatelessWidget {
create: (context) => CarouselBloc(),
),
],
child: const InvestDetailsLayout(),
child: InvestDetailsLayout(
type: type,
),
),
);
}

View File

@@ -10,6 +10,7 @@ import 'package:tanami_app/features/MainScreens/Invest/presentation/widgets/kyc_
import '../bloc/tab_bloc.dart';
import '../bloc/tab_event.dart';
import '../bloc/tab_state.dart';
import '../widgets/invest_closed_details_section.dart';
import '../widgets/invest_details_section.dart';
import '../widgets/invest_image_carousel.dart';
@@ -37,7 +38,7 @@ class InvestLayout extends StatelessWidget {
fontWeight: FontWeight.normal,
fontSize: 14.0,
),
overlayColor: MaterialStateProperty.all(Colors.transparent),
overlayColor: WidgetStateProperty.all(Colors.transparent),
labelColor: AppColor.plainBlack,
unselectedLabelColor: AppColor.charcoalColor,
indicatorColor: AppColor.plainBlack,
@@ -84,7 +85,8 @@ class AvailableItemsScreen extends StatelessWidget {
child: kycCard())
: GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen);
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {"type": "available"});
},
child: Container(
margin: const EdgeInsets.symmetric(
@@ -143,7 +145,8 @@ class ClosedItemsScreen extends StatelessWidget {
child: kycCard())
: GestureDetector(
onTap: () {
goRouter.pushNamed(RouteName.investDetailScreen);
goRouter.pushNamed(RouteName.investDetailScreen,
pathParameters: {"type": "closed"});
},
child: Container(
margin: const EdgeInsets.symmetric(
@@ -166,7 +169,7 @@ class ClosedItemsScreen extends StatelessWidget {
child: Column(
children: [
InvestCarouselView(),
const InvestDetailsSection(),
const InvestClosedDetailsSection(),
],
),
),

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import '../../../../../../core/styles/app_color.dart';
import '../../widgets/payment/confirm_invest_bottom_section.dart';
import '../../widgets/payment/confirm_invest_top_section.dart';
@@ -9,7 +10,7 @@ class ConfirmInvestmentLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: ConfirmInvestBottomSection(),
body: Padding(
padding: EdgeInsets.all(16.0),

View File

@@ -0,0 +1,235 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import '../../../../../core/styles/app_images.dart';
import '../../../../../core/styles/app_text.dart';
import '../../../../../shared/components/text_widget.dart';
class InvestClosedDetailsSection extends StatelessWidget {
const InvestClosedDetailsSection({super.key});
@override
Widget build(BuildContext context) {
return Column(
children: [
Container(
color: AppColor.plainWhite,
child: Padding(
padding: const EdgeInsets.only(
left: 20.0,
right: 20,
top: 10,
bottom: 20,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
TextWidget().text17W700(
'Multi Family Residental',
clr: AppColor.plainBlack,
),
Container(
height: 28,
padding: const EdgeInsets.symmetric(
horizontal: 12, vertical: 6),
decoration: ShapeDecoration(
color: const Color(0xFFE4F5E9),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4)),
),
child: Center(
child: TextWidget().text12W700(
"Real estate",
clr: AppColor.selectedItemColor,
)),
)
],
),
Gap(10.h),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 15.0, vertical: 10.0),
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(color: const Color(0xFFE4F5E9)),
borderRadius: BorderRadius.circular(14.0),
),
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Image.asset(
AppImages.portfolioClock,
height: 15.h,
),
Gap(
5.w,
),
TextWidget().text12W700(
"${AppText.closingDateText}: ",
clr: AppColor.plainBlack,
),
TextWidget().text12W500(
'Jul 10 2025',
clr: AppColor.plainBlack,
),
],
),
),
Gap(
10.h,
),
TextWidget()
.text22W900("SAR 1,478,000", clr: AppColor.investTextColor),
const Gap(8.0),
LinearProgressIndicator(
value: 1,
borderRadius: BorderRadius.circular(2),
minHeight: 8.0,
backgroundColor: AppColor.txtBorderColor,
valueColor: const AlwaysStoppedAnimation<Color>(
AppColor.investTextColor),
),
const Gap(8.0),
TextWidget().text11W700("100% ${AppText.fundedText}",
clr: AppColor.portoflioCardTextColor),
const Gap(8.0),
TextWidget().text14W400(
'Forem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vulputate libero et velit interdum, ac aliquet odio mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur tempus urna at turpis condimentum lobortis.',
clr: Colors.grey,
txtAlign: TextAlign.start,
maxLine: 2,
)
],
),
),
),
Padding(
padding: const EdgeInsets.only(left: 12.0, right: 12, bottom: 12.0),
child: Container(
decoration: BoxDecoration(
color: const Color(0xFFE4F5E9),
borderRadius: BorderRadius.circular(22)),
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20.0, vertical: 16.0),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.sponsorNameText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'Silverlake',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
)
],
),
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 200.w,
child: TextWidget().text14W500(
"${AppText.originalEstimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'20.0%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.actualEstimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'22.5%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.holdingPeriodText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'24 Months',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget().text14W500(
"${AppText.payoutDateText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
TextWidget().text14W700(
'August 1, 2027',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
)
],
),
),
),
)
],
);
}
}

View File

@@ -7,7 +7,8 @@ import '../../../../../core/styles/app_text.dart';
import '../../../../../shared/components/text_widget.dart';
class InvestDetailDetailsSection extends StatelessWidget {
const InvestDetailDetailsSection({super.key});
final String type;
const InvestDetailDetailsSection({super.key, required this.type});
@override
Widget build(BuildContext context) {
@@ -31,7 +32,7 @@ class InvestDetailDetailsSection extends StatelessWidget {
.text22W900("SAR 1,478,000", clr: AppColor.investTextColor),
const Gap(8.0),
LinearProgressIndicator(
value: 0.6,
value: type == "closed" ? 1 : 0.6,
borderRadius: BorderRadius.circular(2),
minHeight: 8.0,
backgroundColor: AppColor.txtBorderColor,
@@ -39,7 +40,10 @@ class InvestDetailDetailsSection extends StatelessWidget {
AppColor.investTextColor),
),
const Gap(8.0),
TextWidget().text11W700("60% ${AppText.fundedText}",
TextWidget().text11W700(
type == "closed"
? "100% ${AppText.fundedText}"
: "60% ${AppText.fundedText}",
clr: AppColor.portoflioCardTextColor),
const Gap(8.0),
TextWidget().text14W400(
@@ -86,27 +90,78 @@ class InvestDetailDetailsSection extends StatelessWidget {
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.estimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
type == "closed"
? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 200.w,
child: TextWidget().text14W500(
"${AppText.originalEstimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'20.0%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
)
: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.estimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'20.0%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
),
TextWidget().text14W700(
'20.0%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
type == "closed"
? Column(
children: [
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width: 150.w,
child: TextWidget().text14W500(
"${AppText.actualEstimatedReturnText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
),
TextWidget().text14W700(
'22.5%',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
),
SizedBox(
height: 8.h,
),
],
)
: const SizedBox(),
SizedBox(
height: 8.h,
height: type == "closed" ? 0 : 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -130,22 +185,39 @@ class InvestDetailDetailsSection extends StatelessWidget {
SizedBox(
height: 8.h,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget().text14W500(
"${AppText.minimumInvestmentText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
TextWidget().text14W700(
'SAR 1,000',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
)
type == "closed"
? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget().text14W500(
"${AppText.payoutDateText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
TextWidget().text14W700(
'August 1, 2027',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
)
: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget().text14W500(
"${AppText.minimumInvestmentText}:",
clr: AppColor.portoflioCardTextColor,
txtAlign: TextAlign.start,
),
TextWidget().text14W700(
'SAR 1,000',
clr: AppColor.plainBlack,
txtAlign: TextAlign.end,
),
],
)
],
),
),

View File

@@ -16,7 +16,7 @@ class PortfolioLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
body: CustomScrollView(
slivers: [
SliverAppBar(

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/features/MainScreens/Settings/presentation/widgets/support_settings_section.dart';
import '../widgets/general_settings_section.dart';
@@ -13,7 +14,7 @@ class SettingsLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
body: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,

View File

@@ -18,7 +18,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
return Scaffold(
backgroundColor: AppColor.plainWhite,
appBar: AppBar(
// backgroundColor: Colors.white,
backgroundColor: Colors.white,
elevation: 0,
scrolledUnderElevation: 0,
automaticallyImplyLeading: false,

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import '../../../../core/styles/app_color.dart';
import '../widgets/change_password_bottom_section.dart';
import '../widgets/change_password_form.dart';
@@ -9,9 +10,8 @@ class ChangePasswordLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return const Scaffold(
backgroundColor: Colors.white,
bottomNavigationBar: RestorePasswordBottomSection(),
body: RestorePasswordForm(),
);
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: RestorePasswordBottomSection(),
body: RestorePasswordForm());
}
}

View File

@@ -13,7 +13,8 @@ class ChooseCountryLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(backgroundColor: Colors.white,
return Scaffold(
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: Container(
margin: const EdgeInsets.symmetric(
horizontal: 16,

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:gap/gap.dart';
import '../../../../core/styles/app_color.dart';
import '../widgets/restore_password_bottom_section.dart';
import '../widgets/restore_password_form.dart';
import '../widgets/restore_password_top_section.dart';
@@ -11,15 +12,14 @@ class RestorePasswordLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: ListView(
children: const [
RestorePasswordTopSection(),
RestorePasswordForm(),
Gap(150),
RestorePasswordBottomSection(),
],
),
);
backgroundColor: AppColor.plainWhite,
body: ListView(
children: const [
RestorePasswordTopSection(),
RestorePasswordForm(),
Gap(150),
RestorePasswordBottomSection(),
],
));
}
}

View File

@@ -3,6 +3,7 @@ import 'package:gap/gap.dart';
import 'package:tanami_app/features/forgotPassword/presentation/widgets/restore_password_phone_verification_bottom_section.dart';
import 'package:tanami_app/features/forgotPassword/presentation/widgets/restore_password_phone_verification_top_section.dart';
import '../../../../core/styles/app_color.dart';
import '../widgets/restore_password_phone_verification_form.dart';
class RestorePasswordPhoneVerificationLayout extends StatelessWidget {
@@ -11,15 +12,14 @@ class RestorePasswordPhoneVerificationLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: ListView(
children: const [
RestorePasswordPhoneVerificationTopSection(),
RestorePasswordPhoneVerificationForm(),
Gap(150),
RestorePasswordPhoneVerificationBottomSection(),
],
),
);
backgroundColor: AppColor.plainWhite,
body: ListView(
children: const [
RestorePasswordPhoneVerificationTopSection(),
RestorePasswordPhoneVerificationForm(),
Gap(150),
RestorePasswordPhoneVerificationBottomSection(),
],
));
}
}

View File

@@ -6,6 +6,7 @@ import 'package:tanami_app/core/styles/app_images.dart';
import 'package:tanami_app/core/styles/app_text.dart';
import 'package:tanami_app/shared/components/appbar_widget.dart';
import 'package:tanami_app/shared/components/text_widget.dart';
import '../widgets/bottom_section.dart';
import '../widgets/language_change_list.dart';
@@ -15,7 +16,7 @@ class LanguageChangeLayout extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
backgroundColor: AppColor.plainWhite,
bottomNavigationBar: bottomSection(),
appBar: const AppBarWidget(
height: 75,

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:tanami_app/core/styles/app_color.dart';
import 'package:tanami_app/features/login/presentation/widgets/login_form.dart';
import '../../../../core/styles/app_color.dart';
import '../widgets/bottom_section.dart';
import '../widgets/top_section.dart';

View File

@@ -10,6 +10,7 @@ import 'bloc/bottom_nav_bar/bottom_navigation_event.dart';
Widget bottomnavigationbar(
BuildContext context, selectedIndex, PageController pageController) {
return BottomNavigationBar(
backgroundColor: AppColor.plainWhite,
type: BottomNavigationBarType.fixed,
showUnselectedLabels: true,
selectedItemColor: AppColor.selectedItemColor,