BIN
assets/images/png/sidemenu/past perfomance icon.png
Normal file
BIN
assets/images/png/sidemenu/past perfomance icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 282 B |
@@ -1,101 +1,112 @@
|
||||
// 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';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
class CommonAppbar extends StatelessWidget implements PreferredSizeWidget {
|
||||
@override
|
||||
Size get preferredSize => const Size.fromHeight(70);
|
||||
|
||||
const CommonAppbar({
|
||||
Key? key,
|
||||
required this.titleTxt,
|
||||
this.showLeading = true,
|
||||
this.customActionWidget,
|
||||
this.onCustomActionPressed,
|
||||
// this.calendarWidget = true,
|
||||
required Size preferredSize,
|
||||
this.showEdit = false,
|
||||
this.customBack,
|
||||
this.editPageName,
|
||||
this.customleading,
|
||||
}) : super(key: key);
|
||||
Size get preferredSize => Size.fromHeight(height!);
|
||||
const CommonAppbar(
|
||||
{Key? key,
|
||||
required this.titleTxt,
|
||||
this.suffixIcon,
|
||||
this.showLeading = true,
|
||||
this.customBack,
|
||||
this.backPageName = '',
|
||||
this.customActionWidget,
|
||||
this.onCustomActionPressed,
|
||||
this.height = 105})
|
||||
: super(key: key);
|
||||
|
||||
final String titleTxt;
|
||||
final String? suffixIcon;
|
||||
final bool? showLeading;
|
||||
final Widget? customActionWidget;
|
||||
final Widget? customleading;
|
||||
// final bool? calendarWidget;
|
||||
final VoidCallback? onCustomActionPressed;
|
||||
final bool? showEdit;
|
||||
final bool? customBack;
|
||||
final String? editPageName;
|
||||
|
||||
final String? backPageName;
|
||||
final Widget? customActionWidget;
|
||||
final VoidCallback? onCustomActionPressed;
|
||||
final double? height;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
title: SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Text(
|
||||
titleTxt,
|
||||
softWrap: true,
|
||||
overflow: TextOverflow.visible,
|
||||
textAlign: TextAlign.start,
|
||||
style: TextStyle(
|
||||
fontFamily: 'DM Sans',
|
||||
fontSize: 18.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Color(0xFF090909),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
leading: showLeading!
|
||||
? InkWell(
|
||||
onTap: () {
|
||||
Get.back();
|
||||
},
|
||||
child: Icon(
|
||||
Icons.arrow_back,
|
||||
color: Color(0xFFFFFFFF),
|
||||
size: 27,
|
||||
),
|
||||
)
|
||||
: customleading,
|
||||
actions: [
|
||||
// if (calendarWidget == true)
|
||||
// InkWell(
|
||||
// onTap: onCustomActionPressed,
|
||||
// child: Padding(
|
||||
// padding: EdgeInsets.only(right: 14.w),
|
||||
// child: Icon(
|
||||
// Icons.calendar_month_outlined,
|
||||
// color: Color(0xFF3192D8),
|
||||
// size: 28,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
if (customActionWidget != null)
|
||||
InkWell(
|
||||
onTap: onCustomActionPressed,
|
||||
return PreferredSize(
|
||||
preferredSize: Size.fromHeight(height ?? 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(right: 14.w),
|
||||
child: customActionWidget,
|
||||
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, right: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
titleTxt,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'hiragino'),
|
||||
maxLines: 2,
|
||||
softWrap: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// newTextfield(
|
||||
// FontWeight.w400, 0)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
// if (calendarWidget == true)
|
||||
// InkWell(
|
||||
// onTap: onCustomActionPressed,
|
||||
// child: Padding(
|
||||
// padding: EdgeInsets.only(right: 14.w),
|
||||
// child: Icon(
|
||||
// Icons.calendar_month_outlined,
|
||||
// color: Color(0xFF3192D8),
|
||||
// size: 28,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
if (customActionWidget != null)
|
||||
InkWell(
|
||||
onTap: onCustomActionPressed,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(right: 14.w),
|
||||
child: customActionWidget,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
// 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';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
|
||||
class CommonAppbar extends StatelessWidget implements PreferredSizeWidget {
|
||||
@override
|
||||
Size get preferredSize => Size.fromHeight(height!);
|
||||
const CommonAppbar(
|
||||
{Key? key,
|
||||
required this.titleTxt,
|
||||
this.suffixIcon,
|
||||
this.showLeading = true,
|
||||
this.customBack,
|
||||
this.backPageName = '',
|
||||
this.customActionWidget,
|
||||
this.onCustomActionPressed,
|
||||
this.height = 105})
|
||||
: super(key: key);
|
||||
|
||||
final String titleTxt;
|
||||
final String? suffixIcon;
|
||||
final bool? showLeading;
|
||||
final bool? customBack;
|
||||
final String? backPageName;
|
||||
final Widget? customActionWidget;
|
||||
final VoidCallback? onCustomActionPressed;
|
||||
final double? height;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return PreferredSize(
|
||||
preferredSize: Size.fromHeight(height ?? 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, right: 16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
titleTxt,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
fontFamily: 'hiragino'),
|
||||
maxLines: 2,
|
||||
softWrap: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
// newTextfield(
|
||||
// FontWeight.w400, 0)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
// if (calendarWidget == true)
|
||||
// InkWell(
|
||||
// onTap: onCustomActionPressed,
|
||||
// child: Padding(
|
||||
// padding: EdgeInsets.only(right: 14.w),
|
||||
// child: Icon(
|
||||
// Icons.calendar_month_outlined,
|
||||
// color: Color(0xFF3192D8),
|
||||
// size: 28,
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
if (customActionWidget != null)
|
||||
InkWell(
|
||||
onTap: onCustomActionPressed,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(right: 14.w),
|
||||
child: customActionWidget,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -146,7 +146,7 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Image.asset(
|
||||
'assets/images/png/sidemenu/inactiveprotfolio.png',
|
||||
'assets/images/png/sidemenu/past perfomance icon.png',
|
||||
height: 26.h,
|
||||
width: 26.w,
|
||||
),
|
||||
@@ -168,6 +168,48 @@ GlassmorphicContainer bottomnavigationbar(MainController _mainController) {
|
||||
],
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
bottom: 0,
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/sidemenu/activetrade.png',
|
||||
height: 30.h,
|
||||
width: 30.w,
|
||||
),
|
||||
))
|
||||
],
|
||||
),
|
||||
|
||||
// SvgPicture.asset('assets/image/svg/active_shortTrade.svg'),
|
||||
label: 'Past Performance',
|
||||
),
|
||||
BottomNavigationBarItem(
|
||||
icon: Image.asset(
|
||||
'assets/images/png/sidemenu/inactiveprotfolio.png',
|
||||
height: 26.h,
|
||||
width: 26.w,
|
||||
),
|
||||
activeIcon: Stack(
|
||||
children: [
|
||||
if (_mainController.selectedIndex.value == 3)
|
||||
Container(
|
||||
height: 40.h,
|
||||
width: 40.w,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: Colors.grey.withOpacity(0.4),
|
||||
spreadRadius: 15,
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/HomeScreen.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/PastPerformance.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/Portfolio/Holdings.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/Portfolio/PortfolioEmpty.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/ShortTrade.dart';
|
||||
@@ -10,6 +11,7 @@ class MainController extends GetxController {
|
||||
var currentTab = [
|
||||
const HomeScreen(),
|
||||
const ShortTrade(),
|
||||
const PastPerformance(),
|
||||
const Portfolio(),
|
||||
].obs;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ class ApiUrls {
|
||||
static const String pieBase = "https://app.piadvisors.in/";
|
||||
|
||||
//Base URL
|
||||
static const base = "http://192.168.50.112/Trader_circuit/api/";
|
||||
static const base = "https://tradercircuit.betadelivery.com/api/";
|
||||
|
||||
//send otp
|
||||
static String sendOtp = "${base}sendOTP";
|
||||
|
||||
@@ -27,6 +27,11 @@ class ContentBytesController extends GetxController {
|
||||
final buttonNotifier = ValueNotifier<ButtonState>(ButtonState.paused);
|
||||
|
||||
late AudioPlayer _audioPlayer;
|
||||
@override
|
||||
void dispose() {
|
||||
_audioPlayer.stop();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void getAudio() => _audioPlayer;
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// import 'package:flutter/material.dart';
|
||||
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';
|
||||
@@ -27,172 +28,217 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
GlobalKey<ScaffoldState> _scaffoldKey1 = GlobalKey<ScaffoldState>();
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
drawerEnableOpenDragGesture: false,
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
drawerEnableOpenDragGesture: false,
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.notification);
|
||||
},
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(right: 14.w),
|
||||
child: SvgPicture.asset('assets/images/svg/Group 1897.svg')),
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.notification);
|
||||
},
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(right: 14.w),
|
||||
child: SvgPicture.asset('assets/images/svg/Group 1897.svg')),
|
||||
),
|
||||
],
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(
|
||||
physics: BouncingScrollPhysics(),
|
||||
children: [
|
||||
sizedBoxHeight(20.h),
|
||||
Text(
|
||||
"Welcome Afrid",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Row(
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(
|
||||
physics: BouncingScrollPhysics(),
|
||||
children: [
|
||||
sizedBoxHeight(20.h),
|
||||
Text(
|
||||
"Welcome Afrid",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.sp,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Row(
|
||||
children: [
|
||||
commoncontainer(
|
||||
width: 180.w,
|
||||
text: 'NIFTY',
|
||||
amount: '22,286.95',
|
||||
rate: '+304.15 (+1.38%)'),
|
||||
sizedBoxWidth(10.w),
|
||||
commoncontainer(
|
||||
width: 220.w,
|
||||
text: 'BANKNIFTY',
|
||||
amount: '22,286.95',
|
||||
rate: '+896.10 (+1.94%)'),
|
||||
],
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(30.h),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 1.h,
|
||||
color: Color(0xFF3A3A3A),
|
||||
),
|
||||
sizedBoxHeight(30.h),
|
||||
text22W500('View our products'),
|
||||
sizedBoxHeight(30.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
commoncontainer(
|
||||
width: 180.w,
|
||||
text: 'NIFTY',
|
||||
amount: '22,286.95',
|
||||
rate: '+304.15 (+1.38%)'),
|
||||
sizedBoxWidth(10.w),
|
||||
commoncontainer(
|
||||
width: 220.w,
|
||||
text: 'BANKNIFTY',
|
||||
amount: '22,286.95',
|
||||
rate: '+896.10 (+1.94%)'),
|
||||
ProductWidget(
|
||||
text: 'Options', subtext: 'Recommendation'),
|
||||
ProductWidget(
|
||||
text: 'Multibagger', subtext: 'Recommendation')
|
||||
],
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(30.h),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 1.h,
|
||||
color: Color(0xFF3A3A3A),
|
||||
),
|
||||
sizedBoxHeight(30.h),
|
||||
text22W500('View our products'),
|
||||
sizedBoxHeight(30.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
ProductWidget(text: 'Options', subtext: 'Recommendation'),
|
||||
ProductWidget(
|
||||
text: 'Multibagger', subtext: 'Recommendation')
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(15.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
ProductWidget(
|
||||
text: 'Swing Trade', subtext: 'Recommendation'),
|
||||
ProductWidget(
|
||||
text: 'OP + MB + ST', subtext: 'Recommendation'),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset('assets/images/svg/Vector (2).svg'),
|
||||
sizedBoxWidth(10.w),
|
||||
text18W500('UNLOCK NOW!'),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 1.h,
|
||||
color: Color(0xFF3A3A3A),
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
text22W600('Explore The Unseen'),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.exploreUnseen);
|
||||
},
|
||||
child: Container(
|
||||
height: 35.h,
|
||||
width: 105.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
borderRadius: BorderRadius.circular(5.r),
|
||||
border: Border.all(
|
||||
color: Color(0xFF3A3A3A),
|
||||
)),
|
||||
child: Center(child: text16W500('View More')),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(35.h),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
child: Column(
|
||||
sizedBoxHeight(15.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
MyTabBar(),
|
||||
SizedBox(
|
||||
height: 700.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
ActiveCallsTab(),
|
||||
ExitedCallsTab(),
|
||||
],
|
||||
ProductWidget(
|
||||
text: 'Swing Trade', subtext: 'Recommendation'),
|
||||
ProductWidget(
|
||||
text: 'OP + MB + ST', subtext: 'Recommendation'),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
SvgPicture.asset('assets/images/svg/Vector (2).svg'),
|
||||
sizedBoxWidth(10.w),
|
||||
text18W500('UNLOCK NOW!'),
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 1.h,
|
||||
color: Color(0xFF3A3A3A),
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
text22W600('Explore The Unseen'),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.exploreUnseen);
|
||||
},
|
||||
child: Container(
|
||||
height: 35.h,
|
||||
width: 105.w,
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
borderRadius: BorderRadius.circular(5.r),
|
||||
border: Border.all(
|
||||
color: Color(0xFF3A3A3A),
|
||||
)),
|
||||
child: Center(child: text16W500('View More')),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
])
|
||||
],
|
||||
sizedBoxHeight(35.h),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
child: Column(
|
||||
children: [
|
||||
MyTabBar(),
|
||||
SizedBox(
|
||||
height: 700.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
ActiveCallsTab(),
|
||||
ExitedCallsTab(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
])
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
Widget ActiveCallsTab() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/MainController.dart';
|
||||
|
||||
@@ -14,4 +15,5 @@ class MainScreen extends StatelessWidget {
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,6 +17,24 @@ class NotificationScreen extends StatefulWidget {
|
||||
|
||||
class _NotificationScreenState extends State<NotificationScreen> {
|
||||
StreamController<GetNotification> NotificationController = StreamController();
|
||||
late Timer timer;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
// timer = Timer.periodic(Duration(seconds: 2), (timer) {
|
||||
NotificationsAPI().notificationList(streamControl: NotificationController);
|
||||
// });
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
// TODO: implement dispose
|
||||
NotificationController.close();
|
||||
timer.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
@@ -26,7 +44,9 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
||||
stream: NotificationController.stream,
|
||||
builder: (ctx, snapshot) {
|
||||
if (snapshot.data == null) {
|
||||
return Text("data");
|
||||
return Center(
|
||||
child: text25W600("No Notification!"),
|
||||
);
|
||||
}
|
||||
if (snapshot.connectionState == ConnectionState.done) {
|
||||
if (snapshot.hasError) {
|
||||
@@ -78,7 +98,7 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
||||
Row(
|
||||
children: [
|
||||
CircleAvatar(
|
||||
backgroundImage: AssetImage(profileimg),
|
||||
backgroundImage: NetworkImage(profileimg),
|
||||
radius: 26.5.r,
|
||||
),
|
||||
sizedBoxWidth(12.w),
|
||||
@@ -107,51 +127,28 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
||||
child: text25W600('Notifications'),
|
||||
),
|
||||
sizedBoxHeight(40.h),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 16.w),
|
||||
child: text16W400('Today'),
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
notificationCard(
|
||||
profileimg: 'assets/images/png/Ellipse 591.png',
|
||||
title: 'Mokshada Kesarkar',
|
||||
subtitle: 'Lorem ipsum dolor sit amet cons......',
|
||||
time: '30 mins ago'),
|
||||
Container(
|
||||
height: 1,
|
||||
margin: EdgeInsets.symmetric(vertical: 20.h),
|
||||
decoration: BoxDecoration(
|
||||
border: Border(
|
||||
bottom: BorderSide(
|
||||
color: Color.fromRGBO(176, 176, 176, 0.5),
|
||||
width: 1,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
notificationCard(
|
||||
profileimg: 'assets/images/png/Ellipse 588.png',
|
||||
title: 'Mokshada Kesarkar',
|
||||
subtitle: 'Lorem ipsum dolor sit amet cons......',
|
||||
time: '1 Hour ago'),
|
||||
sizedBoxHeight(30.h),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(left: 16.w),
|
||||
child: text16W400('Yesterday'),
|
||||
),
|
||||
sizedBoxHeight(30.h),
|
||||
ListView.builder(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
shrinkWrap: true,
|
||||
itemCount: CardList.length,
|
||||
itemCount: notificationobj!.data!.list!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Column(
|
||||
children: [
|
||||
notificationCard(
|
||||
profileimg: CardList[index]['profileimg']!,
|
||||
title: CardList[index]['title']!,
|
||||
subtitle: CardList[index]['subtitle']!,
|
||||
time: CardList[index]['time']!),
|
||||
profileimg: notificationobj!.data!.list!
|
||||
.elementAt(index)
|
||||
.notificationImage!,
|
||||
title: notificationobj!.data!.list!
|
||||
.elementAt(index)
|
||||
.notificationMessage!,
|
||||
subtitle: notificationobj!.data!.list!
|
||||
.elementAt(index)
|
||||
.messageName ??
|
||||
"",
|
||||
time: notificationobj!.data!.list!
|
||||
.elementAt(index)
|
||||
.deliverySchedule ??
|
||||
""),
|
||||
if (index != CardList.length - 1)
|
||||
Container(
|
||||
height: 1,
|
||||
|
||||
220
lib/view/MainScreen/PastPerformance.dart
Normal file
220
lib/view/MainScreen/PastPerformance.dart
Normal file
@@ -0,0 +1,220 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:async/async.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
import 'package:scgateway_flutter_plugin/scgateway_flutter_plugin.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonBottomNavigation.dart';
|
||||
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
|
||||
import 'package:traderscircuit/view/MainScreen/Portfolio/Holdings.dart';
|
||||
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
|
||||
import '../../../model/SmallCaseModel/broker_account_model.dart';
|
||||
import '../../../view_model/SmallCaseApi/smallcase_api_methods.dart';
|
||||
|
||||
class PastPerformance extends StatefulWidget {
|
||||
const PastPerformance({super.key});
|
||||
|
||||
@override
|
||||
State<PastPerformance> createState() => _PastPerformanceState();
|
||||
}
|
||||
|
||||
class _PastPerformanceState extends State<PastPerformance> {
|
||||
GlobalKey<ScaffoldState> _scaffoldKey1 = GlobalKey<ScaffoldState>();
|
||||
List<String> containerTexts = ["Swing Trade", "Multibagger", "Options"];
|
||||
final selectedIndex = 0.obs;
|
||||
|
||||
FutureGroup fetchUserIdAndBrokerAccounts = FutureGroup();
|
||||
List<BrokerAccountModel> myBrokerAccounts = [];
|
||||
@override
|
||||
void initState() {
|
||||
// fetchUserIdAndBrokerAccounts.add(getUserId()); // TODO Need to add userid here
|
||||
fetchUserIdAndBrokerAccounts.add(fetchBrokerAccounts());
|
||||
fetchUserIdAndBrokerAccounts.close();
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: const SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text25W600("Past Performances"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
'How we proved possibles!',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 16.sp,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Add",
|
||||
onTap: () {
|
||||
// replaceAddAccountBtnWithLoader();
|
||||
// Timer.periodic(Duration(seconds: 8), (timer) {
|
||||
// // replaceLoaderWithAddAccountBtn();
|
||||
// timer.cancel();
|
||||
// });
|
||||
fetchAuthToken().then((fetchedAuthToken) {
|
||||
debugPrint("fetchedAuthToken $fetchedAuthToken");
|
||||
fetchBrokerConnectTxnId(
|
||||
authToken: fetchedAuthToken)
|
||||
.then(
|
||||
(txnId) => ScgatewayFlutterPlugin.initGateway(
|
||||
fetchedAuthToken)
|
||||
.then(
|
||||
(value) => ScgatewayFlutterPlugin
|
||||
.triggerGatewayTransaction(
|
||||
txnId,
|
||||
).then(
|
||||
(loginRes) {
|
||||
if (loginRes != null) {
|
||||
var data = jsonDecode(loginRes)['data'];
|
||||
if (data != null) {
|
||||
String authToken = jsonDecode(
|
||||
data)['smallcaseAuthToken'];
|
||||
String brokerName =
|
||||
jsonDecode(data)['broker'];
|
||||
String txnId =
|
||||
jsonDecode(data)['transactionId'];
|
||||
// getUserId().then((userId) {
|
||||
postBrokerAccount(
|
||||
userId: "12",
|
||||
brokerName: brokerName,
|
||||
authToken: authToken,
|
||||
txnId: txnId)
|
||||
.then((isPosted) {
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
// Navigator.pushReplacement(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) =>
|
||||
// Broker()));
|
||||
ScaffoldMessenger.of(context)
|
||||
.clearSnackBars();
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
'New broker account is added')));
|
||||
});
|
||||
// });
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
}
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}),
|
||||
const Spacer(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
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';
|
||||
@@ -31,160 +32,204 @@ class _HoldingsState extends State<Holdings> {
|
||||
final selectedIndex = 0.obs;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
children: [
|
||||
text25W600("My Portfolio"),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 5,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
PortfolioTabBar(),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
SizedBox(
|
||||
height: 570.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
children: [
|
||||
text25W600("My Portfolio"),
|
||||
SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(40.h),
|
||||
],
|
||||
DefaultTabController(
|
||||
length: 5,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
PortfolioTabBar(),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
SizedBox(
|
||||
height: 570.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
HoldingsTabBar(),
|
||||
Expanded(
|
||||
child: TabBarView(
|
||||
children: [
|
||||
Holdings(),
|
||||
PortfolioReview(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(40.h),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
);
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
|
||||
Widget Holdings() {
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:convert';
|
||||
|
||||
import 'package:async/async.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:lottie/lottie.dart';
|
||||
@@ -256,135 +257,180 @@ class _PortfolioState extends State<Portfolio> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: const SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: const SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text25W600("My Portfolio"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Text(
|
||||
'Please click the "Add" button below to add a portfolio.',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 16.sp,
|
||||
fontWeight: FontWeight.w400,
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text25W600("My Portfolio"),
|
||||
],
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
LottieBuilder.asset(
|
||||
"assets/images/empty.json",
|
||||
width: 200.w,
|
||||
height: 200.h,
|
||||
),
|
||||
const Spacer(),
|
||||
CommonBtn(
|
||||
text: "Add",
|
||||
onTap: () {
|
||||
// replaceAddAccountBtnWithLoader();
|
||||
// Timer.periodic(Duration(seconds: 8), (timer) {
|
||||
// // replaceLoaderWithAddAccountBtn();
|
||||
// timer.cancel();
|
||||
// });
|
||||
fetchAuthToken().then((fetchedAuthToken) {
|
||||
debugPrint("fetchedAuthToken $fetchedAuthToken");
|
||||
fetchBrokerConnectTxnId(authToken: fetchedAuthToken)
|
||||
.then(
|
||||
(txnId) => ScgatewayFlutterPlugin.initGateway(
|
||||
fetchedAuthToken)
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Text(
|
||||
'Please click the "Add" button below to add a portfolio.',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 16.sp,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
LottieBuilder.asset(
|
||||
"assets/images/empty.json",
|
||||
width: 200.w,
|
||||
height: 200.h,
|
||||
),
|
||||
const Spacer(),
|
||||
CommonBtn(
|
||||
text: "Add",
|
||||
onTap: () {
|
||||
// replaceAddAccountBtnWithLoader();
|
||||
// Timer.periodic(Duration(seconds: 8), (timer) {
|
||||
// // replaceLoaderWithAddAccountBtn();
|
||||
// timer.cancel();
|
||||
// });
|
||||
fetchAuthToken().then((fetchedAuthToken) {
|
||||
debugPrint("fetchedAuthToken $fetchedAuthToken");
|
||||
fetchBrokerConnectTxnId(
|
||||
authToken: fetchedAuthToken)
|
||||
.then(
|
||||
(value) => ScgatewayFlutterPlugin
|
||||
.triggerGatewayTransaction(
|
||||
txnId,
|
||||
).then(
|
||||
(loginRes) {
|
||||
if (loginRes != null) {
|
||||
var data = jsonDecode(loginRes)['data'];
|
||||
if (data != null) {
|
||||
String authToken = jsonDecode(
|
||||
data)['smallcaseAuthToken'];
|
||||
String brokerName =
|
||||
jsonDecode(data)['broker'];
|
||||
String txnId =
|
||||
jsonDecode(data)['transactionId'];
|
||||
// getUserId().then((userId) {
|
||||
postBrokerAccount(
|
||||
userId: "12",
|
||||
brokerName: brokerName,
|
||||
authToken: authToken,
|
||||
txnId: txnId)
|
||||
.then((isPosted) {
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
// Navigator.pushReplacement(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) =>
|
||||
// Broker()));
|
||||
ScaffoldMessenger.of(context)
|
||||
.clearSnackBars();
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
'New broker account is added')));
|
||||
});
|
||||
// });
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
(txnId) => ScgatewayFlutterPlugin.initGateway(
|
||||
fetchedAuthToken)
|
||||
.then(
|
||||
(value) => ScgatewayFlutterPlugin
|
||||
.triggerGatewayTransaction(
|
||||
txnId,
|
||||
).then(
|
||||
(loginRes) {
|
||||
if (loginRes != null) {
|
||||
var data = jsonDecode(loginRes)['data'];
|
||||
if (data != null) {
|
||||
String authToken = jsonDecode(
|
||||
data)['smallcaseAuthToken'];
|
||||
String brokerName =
|
||||
jsonDecode(data)['broker'];
|
||||
String txnId =
|
||||
jsonDecode(data)['transactionId'];
|
||||
// getUserId().then((userId) {
|
||||
postBrokerAccount(
|
||||
userId: "12",
|
||||
brokerName: brokerName,
|
||||
authToken: authToken,
|
||||
txnId: txnId)
|
||||
.then((isPosted) {
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
// Navigator.pushReplacement(
|
||||
// context,
|
||||
// MaterialPageRoute(
|
||||
// builder: (context) =>
|
||||
// Broker()));
|
||||
ScaffoldMessenger.of(context)
|
||||
.clearSnackBars();
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(SnackBar(
|
||||
content: Text(
|
||||
'New broker account is added')));
|
||||
});
|
||||
// });
|
||||
// replaceLoaderWithAddAccountBtn();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}),
|
||||
const Spacer(),
|
||||
],
|
||||
);
|
||||
});
|
||||
}),
|
||||
const Spacer(),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
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';
|
||||
@@ -29,113 +30,157 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
final selectedIndex = 0.obs;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black, drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black, drawerEnableOpenDragGesture: false,
|
||||
drawer: Container(child: SideMenu()),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
scrolledUnderElevation: 0.0,
|
||||
backgroundColor: Colors.black,
|
||||
elevation: 0,
|
||||
automaticallyImplyLeading: false,
|
||||
titleSpacing: 0,
|
||||
leading: InkWell(
|
||||
onTap: () {
|
||||
_scaffoldKey1.currentState?.openDrawer();
|
||||
},
|
||||
child: Center(
|
||||
child: Image.asset(
|
||||
'assets/images/png/menu.png',
|
||||
height: 15.h,
|
||||
width: 20.w,
|
||||
),
|
||||
),
|
||||
),
|
||||
// title: text22W600('Short'),
|
||||
),
|
||||
// title: text22W600('Short'),
|
||||
),
|
||||
|
||||
// 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(),
|
||||
Stack(children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(physics: BouncingScrollPhysics(), children: [
|
||||
sizedBoxHeight(15.h),
|
||||
SizedBox(
|
||||
height: 60,
|
||||
width: double.infinity,
|
||||
// color: Colors.amber,
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: containerTexts.length,
|
||||
itemBuilder: (context, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
selectedIndex.value = index;
|
||||
},
|
||||
child: Row(
|
||||
// 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(),
|
||||
Stack(children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: ListView(physics: BouncingScrollPhysics(), children: [
|
||||
sizedBoxHeight(15.h),
|
||||
SizedBox(
|
||||
height: 60,
|
||||
width: double.infinity,
|
||||
// color: Colors.amber,
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
scrollDirection: Axis.horizontal,
|
||||
itemCount: containerTexts.length,
|
||||
itemBuilder: (context, index) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
selectedIndex.value = index;
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
topContainer(containerTexts[index], index),
|
||||
sizedBoxWidth(10.w)
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
MyTabBar(),
|
||||
SizedBox(
|
||||
height: 700.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
topContainer(containerTexts[index], index),
|
||||
sizedBoxWidth(10.w)
|
||||
ActiveCallsTab(),
|
||||
ExitedCallsTab(),
|
||||
],
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
DefaultTabController(
|
||||
length: 2,
|
||||
// initialIndex: selectedIndex.value,
|
||||
child: Column(
|
||||
children: [
|
||||
MyTabBar(),
|
||||
SizedBox(
|
||||
height: 700.h,
|
||||
child: TabBarView(
|
||||
children: [
|
||||
ActiveCallsTab(),
|
||||
ExitedCallsTab(),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
sizedBoxHeight(20.h),
|
||||
]))
|
||||
])
|
||||
],
|
||||
sizedBoxHeight(20.h),
|
||||
]))
|
||||
])
|
||||
],
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
),
|
||||
bottomNavigationBar: bottomnavigationbar(mainController),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
|
||||
Widget ActiveCallsTab() {
|
||||
return Obx(() {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
|
||||
@@ -71,6 +71,12 @@ class _ContentBytesState extends State<ContentBytes> {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
contentBytesController.stop();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return WillPopScope(
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_html/flutter_html.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
|
||||
@@ -61,6 +62,7 @@ class _TermsAndConditionsState extends State<TermsAndConditions> {
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
|
||||
text16W400(
|
||||
termsAndConditionModel.data!.content!,
|
||||
),
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
@@ -112,158 +113,202 @@ class _AddDetailsState extends State<AddDetails> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: CommonAppbar(titleTxt: "Add Details"),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _adddetailsform,
|
||||
child: ListView(
|
||||
physics: BouncingScrollPhysics(),
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: CommonAppbar(titleTxt: "Add Details"),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
CommonBlurLeft(),
|
||||
CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _adddetailsform,
|
||||
child: ListView(
|
||||
physics: BouncingScrollPhysics(),
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Full Name"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: fullName,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Email Address"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: email,
|
||||
texttype: TextInputType.emailAddress,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Phone Number"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: phone,
|
||||
texttype: TextInputType.phone,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Date Of Birth"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: dobcontroller,
|
||||
suffixIcon: Icon(
|
||||
Icons.calendar_month_outlined,
|
||||
color: Colors.white,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Full Name"),
|
||||
],
|
||||
),
|
||||
readonly: true,
|
||||
onTap: () {
|
||||
_selectDate(context);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("City"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: city,
|
||||
),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/whatsapp.png",
|
||||
height: 34.h,
|
||||
width: 34.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
text18W600("Get Updates on WhatsApp"),
|
||||
],
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: fullName,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Email Address"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: email,
|
||||
texttype: TextInputType.emailAddress,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Phone Number"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: phone,
|
||||
texttype: TextInputType.phone,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Date Of Birth"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: dobcontroller,
|
||||
suffixIcon: Icon(
|
||||
Icons.calendar_month_outlined,
|
||||
color: Colors.white,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Switch(
|
||||
value: isSwitched,
|
||||
onChanged: _toggleSwitch,
|
||||
activeTrackColor: Colors.green,
|
||||
activeColor: Colors.white,
|
||||
inactiveTrackColor: Colors.white,
|
||||
inactiveThumbColor: Colors.black,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 70.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addDetails();
|
||||
// Get.toNamed(RouteName.kyc);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
],
|
||||
readonly: true,
|
||||
onTap: () {
|
||||
_selectDate(context);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("City"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: city,
|
||||
),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/whatsapp.png",
|
||||
height: 34.h,
|
||||
width: 34.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
text18W600("Get Updates on WhatsApp"),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Switch(
|
||||
value: isSwitched,
|
||||
onChanged: _toggleSwitch,
|
||||
activeTrackColor: Colors.green,
|
||||
activeColor: Colors.white,
|
||||
inactiveTrackColor: Colors.white,
|
||||
inactiveThumbColor: Colors.black,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 70.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addDetails();
|
||||
// Get.toNamed(RouteName.kyc);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import 'dart:ui';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart' hide MultipartFile, FormData;
|
||||
@@ -95,465 +96,526 @@ class _KycState extends State<Kyc> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(
|
||||
() => Scaffold(
|
||||
appBar: CommonAppbar(
|
||||
titleTxt: "KYC",
|
||||
customActionWidget: text16W400(""),
|
||||
),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _addkycform,
|
||||
child: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text18W500("Step 1 : Personal Information"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload pan card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.panFrontImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "pan front",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
() => WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: CommonAppbar(
|
||||
titleTxt: "KYC",
|
||||
customActionWidget: text16W400(""),
|
||||
),
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _addkycform,
|
||||
child: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
text18W500("Step 1 : Personal Information"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload pan card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.panFrontImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "pan front",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff)
|
||||
.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
),
|
||||
child: (kycController.panFrontImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 20, horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
),
|
||||
child: (kycController
|
||||
.panFrontImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.panFrontImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panFrontImage.value,
|
||||
.panFrontImage.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panFrontImage.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Front Side")
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Front Side")
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.panBackImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "pan back",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.panBackImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "pan back",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff)
|
||||
.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
),
|
||||
child: (kycController.panBackImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 20, horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
),
|
||||
child: (kycController.panBackImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.panBackImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panBackImage.value,
|
||||
.panBackImage.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panBackImage.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Back Side")
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Back Side")
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Pan Card"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: pannumber,
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Aadhar Number"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: aadhaarnumber,
|
||||
texttype: TextInputType.phone,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload Aadhar card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.aadharFrontImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "aadhar front",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Pan Card"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: pannumber,
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Aadhar Number"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
textEditingController: aadhaarnumber,
|
||||
texttype: TextInputType.phone,
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload Aadhar card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.aadharFrontImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "aadhar front",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff)
|
||||
.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
),
|
||||
child: (kycController
|
||||
.aadharFrontImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 20, horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharFrontImage.value,
|
||||
),
|
||||
child: (kycController
|
||||
.aadharFrontImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharFrontImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController.aadharFrontImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController.aadharFrontImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Front Side")
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Front Side")
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.aadharBackImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "aadhar back",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (kycController.aadharBackImage.isEmpty) {
|
||||
Get.toNamed(RouteName.kycImage, arguments: {
|
||||
"type": "aadhar back",
|
||||
});
|
||||
}
|
||||
},
|
||||
child: GlassmorphicContainer(
|
||||
width: 170.w,
|
||||
height: 105.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff)
|
||||
.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF)
|
||||
.withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.8,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
),
|
||||
child: (kycController
|
||||
.aadharBackImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 20, horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharBackImage.value,
|
||||
),
|
||||
child: (kycController
|
||||
.aadharBackImage.isNotEmpty)
|
||||
? Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharBackImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController.aadharBackImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.aadharBackImage.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Back Side")
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
child: Column(
|
||||
mainAxisAlignment:
|
||||
MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(
|
||||
Icons.file_upload_outlined,
|
||||
size: 42,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W400("Back Side")
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 70.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addKyc();
|
||||
// Get.toNamed(RouteName.updateriskprofile);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 70.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addKyc();
|
||||
// Get.toNamed(RouteName.updateriskprofile);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,347 +33,390 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _sendotpform,
|
||||
child: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
"Traders Circuit",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 25,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 42.h,
|
||||
),
|
||||
const Text(
|
||||
"Lets get started ",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text18W800("Enter your mobile number to get otp"),
|
||||
SizedBox(
|
||||
height: 35.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: GlassmorphicContainer(
|
||||
width: 60,
|
||||
height: 50,
|
||||
borderRadius: 8,
|
||||
blur: 10,
|
||||
alignment: Alignment.center,
|
||||
border: 0.8,
|
||||
linearGradient: LinearGradient(
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
_onBackButtonPressed(context);
|
||||
return true; // Return true to allow the pop action
|
||||
},
|
||||
child: Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
extendBody: true,
|
||||
body: Stack(
|
||||
children: [
|
||||
const CommonBlurLeft(),
|
||||
const CommonBlurRight(),
|
||||
Stack(
|
||||
children: [
|
||||
Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
|
||||
child: Form(
|
||||
key: _sendotpform,
|
||||
child: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
// mainAxisAlignment: MainAxisAlignment.start,
|
||||
// crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
"Traders Circuit",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 25,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 42.h,
|
||||
),
|
||||
const Text(
|
||||
"Lets get started ",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
color: Colors.white,
|
||||
fontSize: 24,
|
||||
fontWeight: FontWeight.w700),
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text18W800("Enter your mobile number to get otp"),
|
||||
SizedBox(
|
||||
height: 35.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: GlassmorphicContainer(
|
||||
width: 60,
|
||||
height: 50,
|
||||
borderRadius: 8,
|
||||
blur: 10,
|
||||
alignment: Alignment.center,
|
||||
border: 0.8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Colors.white.withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xff9A0000).withOpacity(0.5),
|
||||
const Color(0xFFffffff).withOpacity(0.5),
|
||||
],
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
// SvgPicture.asset("assets/images/svg/india.svg"),
|
||||
Image.asset(
|
||||
"assets/images/png/india.png",
|
||||
height: 25.h,
|
||||
width: 25.h,
|
||||
),
|
||||
const SizedBox(
|
||||
width: 2,
|
||||
),
|
||||
const Text(
|
||||
"+91",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
fontSize: 15,
|
||||
color: Colors.white,
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
// SvgPicture.asset("assets/images/svg/india.svg"),
|
||||
Image.asset(
|
||||
"assets/images/png/india.png",
|
||||
height: 25.h,
|
||||
width: 25.h,
|
||||
),
|
||||
)
|
||||
],
|
||||
const SizedBox(
|
||||
width: 2,
|
||||
),
|
||||
const Text(
|
||||
"+91",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
fontSize: 15,
|
||||
color: Colors.white,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
SizedBox(
|
||||
width: 285.w,
|
||||
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]')),
|
||||
const SizedBox(
|
||||
width: 10,
|
||||
),
|
||||
SizedBox(
|
||||
width: 285.w,
|
||||
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]')),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
text14W300(
|
||||
"We’ll send six digit code to the registered number. Standard data rates may apply"),
|
||||
SizedBox(
|
||||
height: 65.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Login/Signup",
|
||||
onTap: () async {
|
||||
final isValid =
|
||||
_sendotpform.currentState?.validate();
|
||||
if (isValid!) {
|
||||
utils.loader();
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
|
||||
Map<String, String> myLoginData = {
|
||||
"mobile_number": phonecontroller.text,
|
||||
};
|
||||
|
||||
var resp =
|
||||
await SendOtpAPI(myLoginData).sendOtpApi();
|
||||
print(resp.status);
|
||||
print('Api msg : ${resp.message}');
|
||||
|
||||
if (resp.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
print("api response is ${resp.data}");
|
||||
Utils.showToast("OTP sent successfully");
|
||||
|
||||
Map<String, dynamic> res = resp.data;
|
||||
print(res);
|
||||
|
||||
Get.toNamed(RouteName.verifyotp, arguments: {
|
||||
"phonenumber": phonecontroller.text
|
||||
});
|
||||
} else {
|
||||
Get.back();
|
||||
Utils.showToast(resp.message);
|
||||
print('Api msg : ${resp.message}');
|
||||
}
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error", "Please Enter Login Credentials",
|
||||
margin: EdgeInsets.all(8),
|
||||
snackStyle: SnackStyle.FLOATING,
|
||||
snackPosition: SnackPosition.BOTTOM);
|
||||
}
|
||||
}),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W300(
|
||||
"By continuing, you agree to our Terms & Conditions"),
|
||||
SizedBox(
|
||||
height: 45.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
height: 0.2.h,
|
||||
width: 108.w,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
width: 22.w,
|
||||
),
|
||||
text18W600("OR"),
|
||||
SizedBox(
|
||||
width: 22.w,
|
||||
),
|
||||
Container(
|
||||
height: 0.2.h,
|
||||
width: 108.w,
|
||||
color: Colors.white,
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
),
|
||||
GlassmorphicContainer(
|
||||
width: double.infinity,
|
||||
height: 55.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.3,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFAF2E89).withOpacity(0.2),
|
||||
const Color(0xFFA23E31).withOpacity(0.2),
|
||||
const Color(0xFF0000).withOpacity(0.2),
|
||||
],
|
||||
stops: const [
|
||||
0.3,
|
||||
0.6,
|
||||
1,
|
||||
]),
|
||||
child: Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/apple.png",
|
||||
height: 30.h,
|
||||
width: 30.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 7.h,
|
||||
),
|
||||
text16W400("Continue with apple"),
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
const SizedBox(
|
||||
height: 10,
|
||||
),
|
||||
text14W300(
|
||||
"We’ll send six digit code to the registered number. Standard data rates may apply"),
|
||||
SizedBox(
|
||||
height: 65.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Login/Signup",
|
||||
onTap: () async {
|
||||
final isValid =
|
||||
_sendotpform.currentState?.validate();
|
||||
if (isValid!) {
|
||||
utils.loader();
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
|
||||
Map<String, String> myLoginData = {
|
||||
"mobile_number": phonecontroller.text,
|
||||
};
|
||||
|
||||
var resp =
|
||||
await SendOtpAPI(myLoginData).sendOtpApi();
|
||||
print(resp.status);
|
||||
print('Api msg : ${resp.message}');
|
||||
|
||||
if (resp.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
print("api response is ${resp.data}");
|
||||
Utils.showToast("OTP sent successfully");
|
||||
|
||||
Map<String, dynamic> res = resp.data;
|
||||
print(res);
|
||||
|
||||
Get.toNamed(RouteName.verifyotp, arguments: {
|
||||
"phonenumber": phonecontroller.text
|
||||
});
|
||||
} else {
|
||||
Get.back();
|
||||
Utils.showToast(resp.message);
|
||||
print('Api msg : ${resp.message}');
|
||||
}
|
||||
} else {
|
||||
Get.snackbar(
|
||||
"Error", "Please Enter Login Credentials",
|
||||
margin: EdgeInsets.all(8),
|
||||
snackStyle: SnackStyle.FLOATING,
|
||||
snackPosition: SnackPosition.BOTTOM);
|
||||
}
|
||||
}),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
text14W300(
|
||||
"By continuing, you agree to our Terms & Conditions"),
|
||||
SizedBox(
|
||||
height: 45.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Container(
|
||||
height: 0.2.h,
|
||||
width: 108.w,
|
||||
color: Colors.white,
|
||||
),
|
||||
SizedBox(
|
||||
width: 22.w,
|
||||
),
|
||||
text18W600("OR"),
|
||||
SizedBox(
|
||||
width: 22.w,
|
||||
),
|
||||
Container(
|
||||
height: 0.2.h,
|
||||
width: 108.w,
|
||||
color: Colors.white,
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
),
|
||||
GlassmorphicContainer(
|
||||
width: double.infinity,
|
||||
height: 55.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.3,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFAF2E89).withOpacity(0.2),
|
||||
const Color(0xFFA23E31).withOpacity(0.2),
|
||||
const Color(0xFF0000).withOpacity(0.2),
|
||||
],
|
||||
stops: const [
|
||||
0.3,
|
||||
0.6,
|
||||
1,
|
||||
]),
|
||||
child: Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/apple.png",
|
||||
height: 30.h,
|
||||
width: 30.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 7.h,
|
||||
),
|
||||
text16W400("Continue with apple"),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
GlassmorphicContainer(
|
||||
width: double.infinity,
|
||||
height: 55.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.5,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFAF2E89).withOpacity(0.2),
|
||||
const Color(0xFFA23E31).withOpacity(0.2),
|
||||
const Color(0xFF0000).withOpacity(0.2),
|
||||
],
|
||||
stops: const [
|
||||
0.3,
|
||||
0.6,
|
||||
1,
|
||||
]),
|
||||
child: Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/google.png",
|
||||
height: 30.h,
|
||||
width: 30.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 7.h,
|
||||
),
|
||||
text16W400(
|
||||
"Continue with google",
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 45.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.mainscreen);
|
||||
},
|
||||
child: text16W700(
|
||||
"Continue as guest",
|
||||
GlassmorphicContainer(
|
||||
width: double.infinity,
|
||||
height: 55.h,
|
||||
borderRadius: 8,
|
||||
linearGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFffffff).withOpacity(0.1),
|
||||
const Color(0xFFFFFFFF).withOpacity(0.05),
|
||||
],
|
||||
stops: const [
|
||||
0.1,
|
||||
1,
|
||||
]),
|
||||
border: 0.5,
|
||||
blur: 10,
|
||||
borderGradient: LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
const Color(0xFFAF2E89).withOpacity(0.2),
|
||||
const Color(0xFFA23E31).withOpacity(0.2),
|
||||
const Color(0xFF0000).withOpacity(0.2),
|
||||
],
|
||||
stops: const [
|
||||
0.3,
|
||||
0.6,
|
||||
1,
|
||||
]),
|
||||
child: Center(
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
"assets/images/png/google.png",
|
||||
height: 30.h,
|
||||
width: 30.w,
|
||||
),
|
||||
SizedBox(
|
||||
width: 7.h,
|
||||
),
|
||||
text16W400(
|
||||
"Continue with google",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 45.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
InkWell(
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.mainscreen);
|
||||
},
|
||||
child: text16W700(
|
||||
"Continue as guest",
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _onBackButtonPressed(BuildContext context) async {
|
||||
bool? exitApp = await showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
backgroundColor: const Color(0xFFFFF3E4),
|
||||
title: const Text('Exit App'),
|
||||
content: const Text('Do you really want to close the app?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop(false);
|
||||
},
|
||||
child: const Text(
|
||||
'No',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
SystemNavigator.pop();
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Yes',
|
||||
style: TextStyle(
|
||||
color: Color(0xff1B243D),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
return exitApp ?? false;
|
||||
}}
|
||||
|
||||
@@ -138,7 +138,7 @@ class _SplashScreenState extends State<SplashScreen>
|
||||
"Traders Circuit",
|
||||
style: TextStyle(
|
||||
fontFamily: 'hiragino',
|
||||
fontSize: 50,
|
||||
fontSize: 48.sp,
|
||||
fontWeight: FontWeight.w600,
|
||||
color: Colors.white),
|
||||
),
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/data/network/network_api_services.dart';
|
||||
import 'package:traderscircuit/model/Notification/notification_model.dart';
|
||||
|
||||
GetNotification? notificationobj;
|
||||
GetNotification?notificationobj;
|
||||
|
||||
class NotificationsAPI {
|
||||
Future<ResponseData<dynamic>> notificationList(
|
||||
|
||||
26
pubspec.lock
26
pubspec.lock
@@ -157,10 +157,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: csslib
|
||||
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
|
||||
sha256: "831883fb353c8bdc1d71979e5b342c7d88acfbc643113c14ae51e2442ea0f20f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
version: "0.17.3"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -334,6 +334,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.3.1"
|
||||
flutter_html:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_html
|
||||
sha256: "02ad69e813ecfc0728a455e4bf892b9379983e050722b1dce00192ee2e41d1ee"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0-beta.2"
|
||||
flutter_isolate:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -592,6 +600,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
list_counter:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: list_counter
|
||||
sha256: c447ae3dfcd1c55f0152867090e67e219d42fe6d4f2807db4bbe8b8d69912237
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
local_auth:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -1279,7 +1295,5 @@ packages:
|
||||
source: hosted
|
||||
version: "6.3.0"
|
||||
sdks:
|
||||
|
||||
dart: ">=3.2.3 <4.0.0"
|
||||
flutter: ">=3.16.6"
|
||||
|
||||
dart: ">=3.2.0-194.0.dev <4.0.0"
|
||||
flutter: ">=3.13.0"
|
||||
|
||||
@@ -47,6 +47,8 @@ dependencies:
|
||||
just_audio: ^0.9.37
|
||||
audio_video_progress_bar: ^2.0.2
|
||||
syncfusion_flutter_pdfviewer:
|
||||
flutter_html: ^3.0.0-beta.2
|
||||
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user