Merge branch 'main' into hp

This commit is contained in:
Raj
2024-06-18 12:35:35 +05:30
committed by GitHub
10 changed files with 1234 additions and 1287 deletions

View File

@@ -1,8 +1,6 @@
class ApiUrls {
// PIE BASE URL FOR SMALL CASE --> NEED TO BE UPDATED
static const String pieBase = "https://app.piadvisors.in/";
//Base URL
static const base = "https://tradercircuit.betadelivery.com/api/";

View File

@@ -3,6 +3,7 @@ import 'dart:developer';
import 'dart:ui';
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -10,14 +11,13 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_branch_sdk/flutter_branch_sdk.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'package:scgateway_flutter_plugin/scgateway_flutter_plugin.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:traderscircuit/Utils/utils.dart';
import 'package:traderscircuit/firebase_options.dart';
import 'package:scgateway_flutter_plugin/scgateway_flutter_plugin.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:traderscircuit/resources/routes/routes.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'view_model/LoginPage/Loginbloc.dart';
import 'view_model/SendOtp/sendOtpbloc.dart';
@@ -53,7 +53,7 @@ Future<void> main() async {
//smallcase
ScgatewayFlutterPlugin.setConfigEnvironment(
GatewayEnvironment.PRODUCTION,
'pi-advisors',
'traderscircuit',
false,
[],
);

View File

@@ -399,8 +399,8 @@ class NSEINDEXNiftyBank {
double? lastPrice;
String? volume;
String? averagePrice;
Null? oi;
dynamic? netChange;
void oi;
dynamic netChange;
String? totalBuyQuantity;
String? totalSellQuantity;
String? lowerCircuitLimit;
@@ -433,7 +433,7 @@ class NSEINDEXNiftyBank {
timestamp = json['timestamp'];
instrumentToken = json['instrument_token'];
symbol = json['symbol'];
lastPrice = json['last_price'];
lastPrice = _parseJsonToDouble(json['last_price']);
volume = json['volume'];
averagePrice = json['average_price'];
oi = json['oi'];
@@ -459,7 +459,6 @@ class NSEINDEXNiftyBank {
data['last_price'] = lastPrice;
data['volume'] = volume;
data['average_price'] = averagePrice;
data['oi'] = oi;
data['net_change'] = netChange;
data['total_buy_quantity'] = totalBuyQuantity;
data['total_sell_quantity'] = totalSellQuantity;
@@ -495,16 +494,6 @@ class Ohlc {
data['close'] = close;
return data;
}
double? _parseJsonToDouble(dynamic value) {
if (value is int) {
return value.toDouble();
} else if (value is double) {
return value;
} else {
return null; // Or handle it in another appropriate way
}
}
}
class NSEINDEXNifty50 {
@@ -514,9 +503,8 @@ class NSEINDEXNifty50 {
String? instrumentToken;
String? symbol;
double? lastPrice;
Null? volume;
Null? averagePrice;
Null? oi;
double? volume;
double? averagePrice;
double? netChange;
String? totalBuyQuantity;
String? totalSellQuantity;
@@ -534,7 +522,6 @@ class NSEINDEXNifty50 {
this.lastPrice,
this.volume,
this.averagePrice,
this.oi,
this.netChange,
this.totalBuyQuantity,
this.totalSellQuantity,
@@ -550,10 +537,9 @@ class NSEINDEXNifty50 {
timestamp = json['timestamp'];
instrumentToken = json['instrument_token'];
symbol = json['symbol'];
lastPrice = json['last_price'];
lastPrice = json['last_price'].toDouble();
volume = json['volume'];
averagePrice = json['average_price'];
oi = json['oi'];
netChange = json['net_change'];
totalBuyQuantity = json['total_buy_quantity'];
totalSellQuantity = json['total_sell_quantity'];
@@ -576,7 +562,7 @@ class NSEINDEXNifty50 {
data['last_price'] = lastPrice;
data['volume'] = volume;
data['average_price'] = averagePrice;
data['oi'] = oi;
data['net_change'] = netChange;
data['total_buy_quantity'] = totalBuyQuantity;
data['total_sell_quantity'] = totalSellQuantity;
@@ -708,3 +694,13 @@ class ContentByteVideo {
return data;
}
}
double? _parseJsonToDouble(dynamic value) {
if (value is int) {
return value.toDouble();
} else if (value is double) {
return value;
} else {
return null; // Or handle it in another appropriate way
}
}

View File

@@ -1,34 +1,76 @@
class BrokerAccountModel {
final String? id;
final String? userId;
final String? brokerName;
final String? authToken;
final String? txnId;
String? status;
int? statusCode;
String? message;
List<Data>? data;
const BrokerAccountModel({
required this.id,
required this.userId,
required this.brokerName,
required this.authToken,
required this.txnId,
});
BrokerAccountModel({this.status, this.statusCode, this.message, this.data});
factory BrokerAccountModel.fromJson(Map<String, dynamic> json) {
return BrokerAccountModel(
id: json['id'].toString(),
userId: json['user_id'].toString(),
brokerName: json['broker_name'] as String?,
authToken: json['auth_token'] as String?,
txnId: json['transaction_id'] as String?,
);
BrokerAccountModel.fromJson(Map<String, dynamic> json) {
status = json['status'];
statusCode = json['status_code'];
message = json['message'];
if (json['data'] != null) {
data = <Data>[];
json['data'].forEach((v) {
data!.add(Data.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['user_id'] = userId;
data['broker_name'] = brokerName;
data['auth_token'] = authToken;
data['transaction_id'] = txnId;
data['status'] = status;
data['status_code'] = statusCode;
data['message'] = message;
if (this.data != null) {
data['data'] = this.data!.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
int? id;
int? iamPrincipalXid;
String? brokerName;
String? authToken;
String? transactionId;
int? isActive;
String? createdAt;
String? updatedAt;
Data(
{this.id,
this.iamPrincipalXid,
this.brokerName,
this.authToken,
this.transactionId,
this.isActive,
this.createdAt,
this.updatedAt});
Data.fromJson(Map<String, dynamic> json) {
id = json['id'];
iamPrincipalXid = json['iam_principal_xid'];
brokerName = json['broker_name'];
authToken = json['auth_token'];
transactionId = json['transaction_id'];
isActive = json['is_active'];
createdAt = json['created_at'];
updatedAt = json['updated_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['iam_principal_xid'] = iamPrincipalXid;
data['broker_name'] = brokerName;
data['auth_token'] = authToken;
data['transaction_id'] = transactionId;
data['is_active'] = isActive;
data['created_at'] = createdAt;
data['updated_at'] = updatedAt;
return data;
}
}

View File

@@ -1,32 +1,28 @@
import 'package:get/get.dart';
import 'package:traderscircuit/Utils/Common/noInternet.dart';
import 'package:traderscircuit/model/StockDetailsModel/stock_details_model.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/MainScreen/ExploreUnseen.dart';
import 'package:traderscircuit/view/MainScreen/HomeScreen.dart';
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
import 'package:traderscircuit/view/MainScreen/Notification.dart';
import 'package:traderscircuit/view/MainScreen/ShortTrade.dart';
import 'package:traderscircuit/view/MainScreen/stockDetails/Search.dart';
import 'package:traderscircuit/view/MainScreen/stockDetails/option_chain_screen.dart';
import 'package:traderscircuit/view/MainScreen/stockDetails/stock_details_screen.dart';
import 'package:traderscircuit/view/Sidemenu/AboutUs.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/ContentBytes.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/AudioMore.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/ContentBytes.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/ReadMore.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/VideosMore.dart';
import 'package:traderscircuit/view/Sidemenu/FaqScreen.dart';
import 'package:traderscircuit/view/Sidemenu/PrivacyPolicy.dart';
import 'package:traderscircuit/view/Sidemenu/Settings.dart';
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
import 'package:traderscircuit/view/Sidemenu/TermsAndCondition.dart';
import 'package:traderscircuit/view/Sidemenu/contactUs/contact_us_main.dart';
import 'package:traderscircuit/view/Sidemenu/myProfile/my_profile_screen.dart';
import 'package:traderscircuit/view/login/AddDetails.dart';
import 'package:traderscircuit/view/login/Kyc.dart';
import 'package:traderscircuit/view/MainScreen/HomeScreen.dart';
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
import 'package:traderscircuit/view/MainScreen/Notification.dart';
import 'package:traderscircuit/view/MainScreen/ShortTrade.dart';
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
import 'package:traderscircuit/view/login/LoginScreen.dart';
import 'package:traderscircuit/view/login/UpdateRiskProfile.dart';
import 'package:traderscircuit/view/login/VerifyOtp.dart';
@@ -207,7 +203,7 @@ class AppRoutes {
),
//search
GetPage(
GetPage(
name: RouteName.search,
page: () => const Search(),
),

View File

@@ -1,711 +0,0 @@
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';
import 'package:glassmorphism/glassmorphism.dart';
import 'package:traderscircuit/Utils/Common/CommonBottomNavigation.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/Common/comonGlassmorphicContainer.dart';
import 'package:traderscircuit/Utils/Common/sized_box.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
class Holdings extends StatefulWidget {
const Holdings({super.key});
@override
State<Holdings> createState() => _HoldingsState();
}
class _HoldingsState extends State<Holdings> {
GlobalKey<ScaffoldState> _scaffoldKey1 = GlobalKey<ScaffoldState>();
List<String> containerTexts = [
"Portfolio 1",
"Portfolio 1",
"Portfolio 1",
"Portfolio 1",
"Portfolio 1"
];
final selectedIndex = 0.obs;
@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: 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(),
],
),
),
],
),
),
],
),
),
],
),
),
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),
),
),
)
],
);
});
return exitApp ?? false;
}
Widget Holdings() {
return Obx(() {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (selectedIndex == 1) _unlockbottomsheet();
});
return selectedIndex == 0
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
sizedBoxHeight(20.h),
HoldingCard(
text: 'TATA MOTORS',
content: 'Text',
),
sizedBoxHeight(25.h),
Table(
children: [
TableRow(
children: [
TableCell(
child: Text(
"Stock Name",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"AVG Price",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"Quantity",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"Exchange",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
],
),
],
),
Divider(
color: Color(0xFF3A3A3A),
),
Expanded(
child: ListView.separated(
physics: BouncingScrollPhysics(),
shrinkWrap: true,
itemCount: 16,
itemBuilder: ((context, index) {
return Table(
children: [
TableRow(
children: [
TableCell(
child: Text(
"TATA MOTORS",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"416.66",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"3",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
TableCell(
child: Text(
"BSE",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
),
),
],
),
],
);
}),
separatorBuilder: (BuildContext context, int index) {
return Divider();
},
),
),
SizedBox(
height: 30.h,
)
],
)
: selectedIndex == 1
? Column(
children: [],
)
: Column(
children: [],
);
});
}
void _unlockbottomsheet() {
Get.bottomSheet(
SizedBox(
height: 200,
child: commonGlassContainer(
width: double.infinity,
height: 200,
borderradius: 2,
customWidget: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Image.asset(
// 'assets/images/png/Group 1000003722.png',
// height: 100.h,
// ),
// sizedBoxHeight(25.h),
text20W400('Please subscribed to unlock'),
sizedBoxHeight(30.h),
CommonBtn(text: 'Subscribe Now'),
],
),
),
),
backgroundColor: Colors.black.withOpacity(0.3),
);
}
Widget PortfolioReview() {
List<Map<String, String>> cardSwing = [
{
'text': 'Performance Overview:',
'content':
'Your portfolio has generated a total return of 15% over the past six months, outperforming the S&P 500 index by 5%.',
},
{
'text': 'Asset Allocation:',
'content':
'Your portfolio is well-diversified, with 60% allocated to equities, 30% to bonds, and 10% to cash equivalents.',
},
{
'text': 'Individual Holdings Analysis:',
'content':
'Your investment in Company XYZ has performed exceptionally well, with a 25% increase in share price since purchase, driven by strong quarterly earnings.',
},
];
return SingleChildScrollView(
child: Column(
children: [
sizedBoxHeight(20.h),
Obx(() {
return selectedIndex == 0
? Column(
children: List.generate(cardSwing.length, (index) {
return Column(
children: [
PortfolioCard(
text: cardSwing[index]['text']!,
content: cardSwing[index]['content']!,
),
sizedBoxHeight(20.h)
],
);
}),
)
: selectedIndex == 1
? Column(
children: List.generate(cardSwing.length, (index) {
return Column(
children: [
PortfolioCard(
text: cardSwing[index]['text']!,
content: cardSwing[index]['content']!,
),
sizedBoxHeight(20.h)
],
);
}),
)
: Column(
children: List.generate(cardSwing.length, (index) {
return Column(
children: [
PortfolioCard(
text: cardSwing[index]['text']!,
content: cardSwing[index]['content']!,
),
sizedBoxHeight(20.h)
],
);
}),
);
}),
sizedBoxHeight(200.h)
],
),
);
}
Widget PortfolioCard({
required String text,
required String content,
}) {
return commonGlassContainer(
width: double.infinity,
height: 166.h,
borderradius: 8,
customWidget: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w),
child: Row(
children: [
Container(
decoration: BoxDecoration(
color: Color(0xFF6C0000),
borderRadius: BorderRadius.circular(2),
),
height: 25.h,
width: 4.w,
),
sizedBoxWidth(15.w),
text18W600(text),
Spacer(),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 18),
child: text16W400(content),
)
],
),
);
}
Widget HoldingCard({
required String text,
required String content,
}) {
return commonGlassContainer(
width: double.infinity,
height: 166.h,
borderradius: 8,
customWidget: Column(
children: [
Padding(
padding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 16.w),
child: Row(
children: [
GlassmorphicContainer(
width: 47.w,
height: 47.h,
borderRadius: 100,
blur: 10,
alignment: Alignment.center,
border: 0.9,
linearGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff3A3A3A),
Color(0xFF3A3A3A),
],
),
borderGradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color.fromRGBO(70, 5, 1, 0.8),
Color.fromRGBO(102, 102, 102, 0.8),
],
),
child: Center(
child: Image.asset(
'assets/images/png/TATAMOTORS.NS_BIG 1.png',
width: 26.w,
height: 23.h,
),
),
),
sizedBoxWidth(15.w),
text18W600(text),
Spacer(),
],
),
),
Container(
width: double.infinity,
height: 1.h,
color: Color(0xFF3A3A3A),
),
Padding(
padding: const EdgeInsets.all(18),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
text14W400_979797('Portfolio Value'),
sizedBoxHeight(5.h),
SizedBox(width: 150.w, child: text15W600("₹ 40,000"))
],
),
sizedBoxWidth(30.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
text14W400_979797('%P/L'),
sizedBoxHeight(5.h),
text14W400_00FF19("-36.006%")
],
)
],
),
],
),
)
],
),
);
}
Widget topContainer(String text, int index) {
return Obx(() {
return selectedIndex.value == index
? Container(
height: 40.h,
width: 126.w,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
color: Color(0Xff6C0000),
),
child: Center(child: text16W500(text)),
)
: commonGlassContainer(
width: 126.w,
height: 40.h,
borderradius: 5,
customWidget: Center(child: text16W400(text)),
);
});
}
}
class HoldingsTabBar extends StatelessWidget {
// Set the desired height
@override
Widget build(BuildContext context) {
return Container(
decoration: BoxDecoration(
border: Border.all(color: Color(0Xff3A3A3A)),
borderRadius: BorderRadius.circular(8.r),
),
padding: const EdgeInsets.all(8.0), // Set the desired padding
child: TabBar(
indicator: BoxDecoration(
color: const Color(0xff6C0000),
borderRadius: BorderRadius.circular(5),
),
dividerColor: Colors.transparent,
labelStyle: TextStyle(
fontSize: 16.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
indicatorSize: TabBarIndicatorSize.tab,
indicatorColor: const Color(0xFFFFFFFF),
labelColor: Colors.white,
unselectedLabelColor: const Color(0xffFFFFFF),
overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)),
tabs: const [
Tab(
text: 'Holdings',
),
Tab(
text: 'Portfolio Reviews',
),
]),
);
}
}
class PortfolioTabBar extends StatelessWidget {
// Set the desired height
@override
Widget build(BuildContext context) {
return TabBar(
tabAlignment: TabAlignment.start,
isScrollable: true,
dividerColor: Colors.transparent,
labelStyle: TextStyle(
fontSize: 18.sp,
color: Colors.white,
fontWeight: FontWeight.w500,
fontFamily: 'hiragino'),
indicatorSize: TabBarIndicatorSize.tab,
indicatorWeight: 2,
indicatorColor: const Color(0xff6C0000),
labelColor: Colors.white,
unselectedLabelColor: const Color(0xFF464646),
overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)),
tabs: const [
Tab(
text: 'Portfolio 1',
),
Tab(
text: 'Portfolio 2',
),
Tab(
text: 'Portfolio 3',
),
Tab(
text: 'Portfolio 4',
),
Tab(
text: 'Portfolio 5',
),
]);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,14 @@
import 'dart:convert';
import 'dart:developer';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:scgateway_flutter_plugin/scgateway_flutter_plugin.dart';
import '../../Utils/api_urls.dart';
import '../../Utils/base_manager.dart';
import '../../data/network/network_api_services.dart';
import '../../model/SmallCaseModel/broker_account_model.dart';
// void openDashboardPage(BuildContext context) {
@@ -19,83 +24,142 @@ import '../../model/SmallCaseModel/broker_account_model.dart';
// }
//broker account table
//fetch broker accounts
Future<List<BrokerAccountModel>> fetchBrokerAccounts() async {
final response = await http.Client()
.get(Uri.parse('${ApiUrls.pieBase}api/get_broker_account_data'));
final parsed = jsonDecode(response.body);
return parsed
.map<BrokerAccountModel>((json) => BrokerAccountModel.fromJson(json))
.toList();
}
//delete broker account
Future<bool> deleteBrokerAccount(int id) async {
final response = await http.Client()
.get(Uri.parse('${ApiUrls.pieBase}api/delete_brokerage_account/$id'));
.get(Uri.parse('${ApiUrls.base}api/delete_brokerage_account/$id'));
if (response.statusCode == 200) return true;
return false;
}
//post broker account
Future<bool> postBrokerAccount({
required String userId,
required String brokerName,
required String authToken,
required String txnId,
}) async {
var response = await http.post(
Uri.parse('${ApiUrls.pieBase}api/add_broker_account'),
body: <String, String>{
"user_id": userId,
final response = await NetworkApiServices().postApi(
FormData.fromMap({
"broker_name": brokerName,
"auth_token": authToken,
"transaction_id": txnId,
},
}),
'${ApiUrls.base}add-broker-account',
);
if (response.statusCode == 200) return true;
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success") {
return true;
} else {
return false;
}
}
return false;
}
Future<String> fetchAuthToken() async {
var response = await http.get(
Uri.parse(
'${ApiUrls.pieBase}api/get_small_case_auth_token/',
),
//fetch broker accounts
Future<List<Data>> fetchBrokerAccounts() async {
final response = await NetworkApiServices().getApi(
'${ApiUrls.base}get-broker-account-data',
);
return jsonDecode(response.body)['data'];
// log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success") {
BrokerAccountModel brokerAccountModel =
BrokerAccountModel.fromJson(responseData);
return brokerAccountModel.data!;
} else {
return [];
}
}
return [];
}
Future<String> fetchAuthToken() async {
final response = await NetworkApiServices().getApi(
'${ApiUrls.base}get-small-case-auth-token',
);
// log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success") {
return response.data['data'];
} else {
return "Failed";
}
}
return "Failed";
}
Future<String> fetchBrokerConnectTxnId({required String authToken}) async {
var response = await http.get(
Uri.parse(
'${ApiUrls.pieBase}api/get_small_case_broker_connect_transaction/$authToken',
),
final response = await NetworkApiServices().postApi(
FormData.fromMap({"auth_token": authToken}),
'${ApiUrls.base}get-transaction-id',
);
return jsonDecode(response.body)['data']['transactionId'];
log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success") {
return response.data['data']["data"]
['transactionId']; // jsonDecode(response.body)
} else {
return "Failed";
}
}
return "Failed";
}
Future<http.Response> fetchHoldingsImportTxnId(String authToken) async {
var response = await http.get(
Uri.parse(
'${ApiUrls.pieBase}api/get_small_case_holding_import_transaction_id/$authToken',
),
Future<String> fetchHoldingsImportTxnId(String authToken) async {
log(authToken);
final response = await NetworkApiServices().postApi(
FormData.fromMap({"auth_token": authToken}),
'${ApiUrls.base}create-transaction-holdings-import',
);
return response;
log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success" &&
!responseData.toString().contains(
"{status: error, status_code: 500, message: Something went wrong.}")) {
return response.data['data']["data"]
['transactionId']; // jsonDecode(response.body)
} else {
return "Failed";
}
}
return "Failed";
}
Future<Map<String, dynamic>> fetchHoldings(String authToken) async {
var response = await http.get(
Uri.parse(
'${ApiUrls.pieBase}api/fetch_small_case_holding/$authToken',
),
final response = await NetworkApiServices().postApi(
FormData.fromMap({"auth_token": authToken}),
'${ApiUrls.base}fetch-holdings',
);
return jsonDecode(response.body)['data'];
log(response.data.toString());
if (response.status == ResponseStatus.SUCCESS) {
Map<String, dynamic> responseData =
Map<String, dynamic>.from(response.data);
if (responseData['status'] == "success") {
return responseData;
} else {
return {};
}
}
return {};
}
Future<String> fetchStocksOrderTxnId(String authToken, String body) async {
var response = await http.post(Uri.parse(
'${ApiUrls.pieBase}api/create_post_transaction_stock_order?body=$body&auth_token=$authToken'));
'${ApiUrls.base}api/create_post_transaction_stock_order?body=$body&auth_token=$authToken'));
var txnId = jsonDecode(response.body)['data']['transactionId'];
return txnId;
}