search completed

This commit is contained in:
Rajshinde046
2024-06-07 17:00:36 +05:30
parent 840222f097
commit 338a143f73
12 changed files with 596 additions and 211 deletions

View File

@@ -4,6 +4,7 @@ import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_svg/svg.dart';
import 'package:gap/gap.dart';
@@ -24,10 +25,10 @@ import 'package:traderscircuit/view/MainScreen/ExploreUnseen.dart';
import 'package:traderscircuit/view/MainScreen/MainScreen.dart';
import 'package:traderscircuit/view/Sidemenu/ContentByte/PlayerWidget.dart';
import 'package:traderscircuit/view/Sidemenu/Sidemenu.dart';
import 'package:traderscircuit/view/Sidemenu/webview_subscription.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
import 'package:traderscircuit/view_model/HomeApi/home_api.dart';
import '../../Utils/Common/CustomTextFormField.dart';
import '../../view_model/ProfileAPI/GetProfileApi.dart';
class HomeScreen extends StatefulWidget {
@@ -89,11 +90,41 @@ class _HomeScreenState extends State<HomeScreen> {
drawer: Container(child: const SideMenu()),
extendBody: true,
appBar: AppBar(
toolbarHeight: 70.h,
scrolledUnderElevation: 0.0,
backgroundColor: Colors.black,
elevation: 0,
automaticallyImplyLeading: false,
titleSpacing: 0,
centerTitle: true,
title: GestureDetector(
onTap: () {
Get.toNamed(RouteName.search);
},
child: commonGlassContainer(
width: 250,
height: 50,
borderradius: 8,
customWidget: Center(
child: Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
SizedBox(
width: 10.w,
),
Icon(
Icons.search,
color: Colors.white,
),
SizedBox(
width: 15.w,
),
text20W400("Search"),
],
),
),
),
),
leading: InkWell(
onTap: () {
_scaffoldKey1.currentState?.openDrawer();
@@ -114,7 +145,7 @@ class _HomeScreenState extends State<HomeScreen> {
child: Padding(
padding: EdgeInsets.only(right: 14.w),
child: SvgPicture.asset('assets/images/svg/Group 1897.svg')),
),
)
],
),
body: Obx(
@@ -135,19 +166,6 @@ class _HomeScreenState extends State<HomeScreen> {
: ListView(
physics: const BouncingScrollPhysics(),
children: [
sizedBoxHeight(15.h),
CustomTextFormField1(
hintText: 'Search',
leadingIcon: SizedBox(
height: 20,
width: 20,
child: Center(
child: SvgPicture.asset(
'assets/images/svg/search-svgrepo-com.svg',
),
),
),
),
sizedBoxHeight(20.h),
Text(
"Welcome $userName",
@@ -157,6 +175,9 @@ class _HomeScreenState extends State<HomeScreen> {
fontFamily: 'hiragino',
fontWeight: FontWeight.w500),
),
SizedBox(
height: 10,
),
!homeModel.data!.isUpstoxTokenRefreshed!
? const SizedBox()
: sizedBoxHeight(25.h),
@@ -261,12 +282,21 @@ class _HomeScreenState extends State<HomeScreen> {
SvgPicture.asset(
'assets/images/svg/Vector (2).svg'),
sizedBoxWidth(10.w),
InkWell(
child: text18W500('UNLOCK NOW!'),
onTap: () {
throw Exception();
},
),
ProfileObj!.data!.isSubscriptionTaken == true
? SizedBox()
: InkWell(
child: text18W500('UNLOCK NOW!'),
onTap: () async {
SharedPreferences prefs =
await SharedPreferences
.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
],
),
sizedBoxHeight(25.h),
@@ -777,16 +807,16 @@ Widget commoncontainer({
),
),
child: Padding(
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 10.w),
padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 6.w),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
text14W400_979797(text),
sizedBoxWidth(8.w),
sizedBoxWidth(7.w),
text16W600(amount),
sizedBoxWidth(8.w),
sizedBoxWidth(7.w),
rate.contains("-")
? SvgPicture.asset(
'assets/images/svg/Line 587.svg',

View File

@@ -255,21 +255,23 @@ class _ShortTradeState extends State<ShortTrade> {
text22W600("No Data Available !"),
],
))
: ListView.builder(
itemCount: callRecommendationsModel.data!.activeCalls!.length,
itemBuilder: (ctx, index) {
return Padding(
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
child: productsController.selectedIndex.value == 0
? ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"Swing Trade"
? cardSwingWidget(
: productsController.selectedIndex.value == 0
? ProfileObj!.data!.isSubscriptionTaken == true &&
ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"Swing Trade"
? ListView.builder(
itemCount:
callRecommendationsModel.data!.activeCalls!.length,
itemBuilder: (ctx, index) {
return Padding(
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
child: cardSwingWidget(
instrumentName: callRecommendationsModel
.data!.activeCalls![index].instrumentKey!,
pdfLink: "",
image: callRecommendationsModel
.data!.activeCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.activeCalls![index].stockImage!,
text: callRecommendationsModel
.data!.activeCalls![index].stockName!,
amount:
@@ -282,17 +284,59 @@ class _ShortTradeState extends State<ShortTrade> {
'${callRecommendationsModel.data!.activeCalls![index].duration}',
action: callRecommendationsModel
.data!.activeCalls![index].actionData!.name!,
)
: Text("Please Subscribe to Swing trade")
: productsController.selectedIndex.value == 1
? ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"MultiBagger"
? cardMultibaggerWidget(
));
})
: Center(
child: commonGlassContainer(
width: double.infinity,
height: 150,
borderradius: 2,
customWidget: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
text18W500("Please Subscribe to Swing Trade"),
SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CommonBtn(
text: "Unlock Now",
onTap: () async {
SharedPreferences prefs =
await SharedPreferences.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
)
],
),
),
),
)
: productsController.selectedIndex.value == 1
? ProfileObj!.data!.isSubscriptionTaken == true &&
ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"MultiBagger"
? ListView.builder(
itemCount:
callRecommendationsModel.data!.activeCalls!.length,
itemBuilder: (ctx, index) {
return Padding(
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
child: cardMultibaggerWidget(
instrumentName: callRecommendationsModel
.data!.activeCalls![index].instrumentKey!,
image: callRecommendationsModel
.data!.activeCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.activeCalls![index].stockImage!,
action: callRecommendationsModel.data!
.activeCalls![index].actionData!.name!,
text: callRecommendationsModel
@@ -310,54 +354,59 @@ class _ShortTradeState extends State<ShortTrade> {
pdfname: "Download Pdf",
pdfLink: callRecommendationsModel
.data!.activeCalls![index].docs!,
)
: Center(
child: commonGlassContainer(
width: double.infinity,
height: 150,
borderradius: 2,
customWidget: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
text18W500(
"Please Subscribe to Multibagger"),
SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CommonBtn(
text: "Unlock Now",
onTap: () async {
SharedPreferences prefs =
await SharedPreferences
.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
)
],
),
),
));
})
: Center(
child: commonGlassContainer(
width: double.infinity,
height: 150,
borderradius: 2,
customWidget: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
)
// Text("Please Subscribe to Multibagger")
: ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"Options"
? cardOptionWidget(
text18W500("Please Subscribe to Multibagger"),
SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CommonBtn(
text: "Unlock Now",
onTap: () async {
SharedPreferences prefs =
await SharedPreferences.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
)
],
),
),
),
)
: ProfileObj!.data!.isSubscriptionTaken == true &&
ProfileObj!.data!.subscriptionData!.productData!
.productName! ==
"Options"
? ListView.builder(
itemCount:
callRecommendationsModel.data!.activeCalls!.length,
itemBuilder: (ctx, index) {
return Padding(
padding: EdgeInsets.only(top: 20.h, bottom: 5.h),
child: cardOptionWidget(
instrumentName: callRecommendationsModel
.data!.activeCalls![index].instrumentKey!,
pdfLink: "",
image: callRecommendationsModel
.data!.activeCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.activeCalls![index].stockImage!,
action: callRecommendationsModel.data!
.activeCalls![index].actionData!.name!,
text: callRecommendationsModel
@@ -374,47 +423,45 @@ class _ShortTradeState extends State<ShortTrade> {
"${callRecommendationsModel.data!.activeCalls![index].targetPrice}",
stoploss:
"${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
)
: Center(
child: commonGlassContainer(
width: double.infinity,
height: 150,
borderradius: 2,
customWidget: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
text18W500(
"Please Subscribe to Options"),
SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CommonBtn(
text: "Unlock Now",
onTap: () async {
SharedPreferences prefs =
await SharedPreferences
.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
)
],
),
),
));
})
: Center(
child: commonGlassContainer(
width: double.infinity,
height: 150,
borderradius: 2,
customWidget: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
),
);
});
}
text18W500("Please Subscribe to Options"),
SizedBox(
height: 20,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CommonBtn(
text: "Unlock Now",
onTap: () async {
SharedPreferences prefs =
await SharedPreferences.getInstance();
Get.to(WebViewSubscription(
token: prefs
.getString('accessToken')
.toString()));
},
),
)
],
),
),
),
);
}
void _unlockbottomsheet() {
Get.bottomSheet(
@@ -472,8 +519,8 @@ class _ShortTradeState extends State<ShortTrade> {
.data!.exitedCalls![index].instrumentKey!,
pdfLink: callRecommendationsModel
.data!.exitedCalls![index].docs!,
image: callRecommendationsModel
.data!.exitedCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.exitedCalls![index].stockImage!,
text: callRecommendationsModel
.data!.exitedCalls![index].stockName!,
amount: '₹ 196.50 - ₹ 197',
@@ -490,8 +537,8 @@ class _ShortTradeState extends State<ShortTrade> {
? cardMultibaggerWidget(
instrumentName: callRecommendationsModel
.data!.exitedCalls![index].instrumentKey!,
image: callRecommendationsModel
.data!.exitedCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.exitedCalls![index].stockImage!,
action: callRecommendationsModel
.data!.exitedCalls![index].actionData!.name!,
text: callRecommendationsModel
@@ -515,8 +562,8 @@ class _ShortTradeState extends State<ShortTrade> {
.data!.exitedCalls![index].instrumentKey!,
pdfLink: callRecommendationsModel
.data!.exitedCalls![index].docs!,
image: callRecommendationsModel
.data!.exitedCalls![index].stockImage!,
// image: callRecommendationsModel
// .data!.exitedCalls![index].stockImage!,
action: callRecommendationsModel
.data!.exitedCalls![index].actionData!.name!,
text: callRecommendationsModel
@@ -548,7 +595,7 @@ class _ShortTradeState extends State<ShortTrade> {
required String stoploss,
required String action,
required String pdfLink,
required String image,
// required String image,
required String instrumentName,
}) {
ContactUsController contactUsController = Get.put(ContactUsController());
@@ -577,11 +624,11 @@ class _ShortTradeState extends State<ShortTrade> {
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CachedNetworkImage(
imageUrl: image,
width: 78.29,
height: 31,
),
// CachedNetworkImage(
// imageUrl: image,
// width: 78.29,
// height: 31,
// ),
const Gap(10),
text16W700(text),
const Spacer(),
@@ -722,7 +769,7 @@ class _ShortTradeState extends State<ShortTrade> {
required String pdfname,
required String action,
required String pdfLink,
required String image,
// required String image,
required String instrumentName,
}) {
ContactUsController contactUsController = Get.put(ContactUsController());
@@ -751,11 +798,11 @@ class _ShortTradeState extends State<ShortTrade> {
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CachedNetworkImage(
imageUrl: image,
width: 78.29,
height: 31,
),
// CachedNetworkImage(
// imageUrl: image,
// width: 78.29,
// height: 31,
// ),
const Gap(10),
text16W700(text),
const Spacer(),
@@ -898,7 +945,7 @@ class _ShortTradeState extends State<ShortTrade> {
}
Widget cardSwingWidget({
required String image,
// required String image,
required String text,
required String amount,
required String targetamount,
@@ -933,11 +980,11 @@ class _ShortTradeState extends State<ShortTrade> {
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
CachedNetworkImage(
imageUrl: image,
width: 78.29,
height: 31,
),
// CachedNetworkImage(
// imageUrl: image,
// width: 78.29,
// height: 31,
// ),
const Gap(10),
Container(
width: 2,

View File

@@ -0,0 +1,201 @@
import 'package:flutter/cupertino.dart';
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';
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/model/HomeModel/search_model.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/MainScreen/stockDetails/stock_details_screen.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
import 'package:traderscircuit/view_model/HomeApi/Search_api.dart';
import 'dart:async';
class Search extends StatefulWidget {
const Search({super.key});
@override
State<Search> createState() => _SearchState();
}
class _SearchState extends State<Search> {
RxBool isLoading = true.obs;
SearchModel searchModel = SearchModel();
TextEditingController searchController = TextEditingController();
Timer? _debounce;
@override
void initState() {
super.initState();
_loadSearchData();
}
Future<void> _loadSearchData() async {
if (searchController.text.isEmpty || searchController.text.length < 2) {
setState(() {
searchModel = SearchModel(data: []);
isLoading.value = false;
});
return;
}
final value =
await SearchAPI().searchData(searchText: searchController.text);
setState(() {
searchModel = SearchModel.fromJson(value.data);
isLoading.value = false;
});
}
void _onSearchChanged() {
if (_debounce?.isActive ?? false) _debounce?.cancel();
_debounce = Timer(const Duration(milliseconds: 300), () {
setState(() {
isLoading.value = true;
});
_loadSearchData();
});
}
@override
void dispose() {
_debounce?.cancel();
searchController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
toolbarHeight: 70.h,
scrolledUnderElevation: 0.0,
backgroundColor: Colors.black,
elevation: 0,
automaticallyImplyLeading: false,
titleSpacing: 0,
centerTitle: true,
leading: GestureDetector(
onTap: () {
Get.back();
},
child: Center(
child: Icon(
Icons.arrow_back_ios,
color: Colors.white,
),
),
),
),
// appBar: const CommonAppbar(
// titleTxt: "",
// ),
backgroundColor: Colors.black,
extendBody: true,
body: Obx(
() => Stack(
children: [
const CommonBlurLeft(),
const CommonBlurRight(),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: Column(
children: [
CustomTextFormField(
autofocus: true,
onInput: (p0) {
_onSearchChanged();
},
leadingIcon: const Icon(
Icons.search,
color: Colors.white,
),
hintText: "Search",
texttype: TextInputType.text,
textEditingController: searchController,
),
SizedBox(
height: 10.h,
),
Expanded(
child: isLoading.value
? const Center(
child: CircularProgressIndicator(
color: Color(0xFF0093FF),
),
)
: searchModel.data == null || searchModel.data!.isEmpty
? const Center(
child: Text(
"Try Searching For TATA MOTORS, HCL...",
style: TextStyle(color: Colors.white),
),
)
: ListView.separated(
shrinkWrap: true,
itemCount: searchModel.data?.length ?? 0,
itemBuilder: (context, index) {
return InkWell(
onTap: () {
Get.to(const StockDetailsScreen(),
arguments: {
"instrument_name": searchModel.data!
.elementAt(index)
.instrumentKey,
});
},
child: Row(
children: [
Image.asset(
"assets/images/png/search.png",
height: 35.h,
width: 35.w,
),
SizedBox(
width: 25.w,
),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
width: 230.w,
child: text16W500(searchModel
.data!
.elementAt(index)
.name ??
""),
),
SizedBox(
width: 297.w,
child: text12W400(
searchModel.data!
.elementAt(index)
.tradingSymbol ??
"",
),
),
],
),
],
),
);
},
separatorBuilder:
(BuildContext context, int index) =>
const Divider(
color: Color(0xff242424),
),
),
),
],
),
),
],
),
),
);
}
}

View File

@@ -39,68 +39,68 @@ class _StockDetailsScreenState extends State<StockDetailsScreen> {
void initState() {
dv.log(instrumentName);
if (productsController.isUpstoxTokenNotExpired.value) {
// StockDetailsApi()
// .getStockDetails(
// FormData.fromMap({"upstox_instrument_key": instrumentName}))
// .then((value) {
// final Map<String, dynamic> data = value.data;
StockDetailsApi()
.getStockDetails(
FormData.fromMap({"upstox_instrument_key": instrumentName}))
.then((value) {
final Map<String, dynamic> data = value.data;
// Map<String, dynamic> data1 = data["data"]['stock_data']['data'];
// String dynamicKey = data1.keys.first;
// // Access nested data using dynamic key
// Map<String, dynamic> dynamicData = data1[dynamicKey];
Map<String, dynamic> data1 = data["data"]['stock_data']['data'];
String dynamicKey = data1.keys.first;
// Access nested data using dynamic key
Map<String, dynamic> dynamicData = data1[dynamicKey];
// List<Candles>? candles = [];
List<Candles>? candles = [];
// for (var a in data["data"]['candle_stick']["data"]["candles"]) {
// candles.add(Candles(
// timestamp: a[0],
// open: a[1].toDouble(),
// high: a[2].toDouble(),
// low: a[3].toDouble(),
// close: a[4].toDouble(),
// volume: a[5].toInt(),
// openInterest: a[6],
// ));
// }
// candles = candles.reversed.toList();
// stockDetailsModel = StockDetailsModel(
// status: data["status"],
// message: data["message"],
// statusCode: data["status_code"],
// data: Data(
// stockData: StockInfo(
// ohlc: Ohlc.fromJson(dynamicData['ohlc']),
// averagePrice: dynamicData['average_price'].toDouble(),
// instrumentToken: dynamicData['instrument_token'],
// lastPrice: dynamicData['last_price'].toDouble(),
// lastTradeTime: dynamicData['last_trade_time'],
// lowerCircuitLimit:
// dynamicData['lower_circuit_limit'].toDouble(),
// netChange: dynamicData['net_change'].toDouble(),
// oi: dynamicData['oi'],
// oiDayHigh: dynamicData['oi_day_high'],
// oiDayLow: dynamicData['oi_day_low'],
// symbol: dynamicData['symbol'],
// timestamp: dynamicData['timestamp'],
// totalBuyQuantity: dynamicData['total_buy_quantity'],
// totalSellQuantity: dynamicData['total_sell_quantity'],
// upperCircuitLimit: dynamicData['upper_circuit_limit'],
// volume: dynamicData['volume'],
// ),
// candleStick: CandleStick(candles: candles),
// optionChain:
// OptionChain.fromJson(data["data"]['option_chain'])));
for (var a in data["data"]['candle_stick']["data"]["candles"]) {
candles.add(Candles(
timestamp: a[0],
open: a[1].toDouble(),
high: a[2].toDouble(),
low: a[3].toDouble(),
close: a[4].toDouble(),
volume: a[5].toInt(),
openInterest: a[6],
));
}
candles = candles.reversed.toList();
stockDetailsModel = StockDetailsModel(
status: data["status"],
message: data["message"],
statusCode: data["status_code"],
data: Data(
stockData: StockInfo(
ohlc: Ohlc.fromJson(dynamicData['ohlc']),
averagePrice: dynamicData['average_price'].toDouble(),
instrumentToken: dynamicData['instrument_token'],
lastPrice: dynamicData['last_price'].toDouble(),
lastTradeTime: dynamicData['last_trade_time'],
lowerCircuitLimit:
dynamicData['lower_circuit_limit'].toDouble(),
netChange: dynamicData['net_change'].toDouble(),
oi: dynamicData['oi'],
oiDayHigh: dynamicData['oi_day_high'],
oiDayLow: dynamicData['oi_day_low'],
symbol: dynamicData['symbol'],
timestamp: dynamicData['timestamp'],
totalBuyQuantity: dynamicData['total_buy_quantity'],
totalSellQuantity: dynamicData['total_sell_quantity'],
upperCircuitLimit: dynamicData['upper_circuit_limit'],
volume: dynamicData['volume'],
),
candleStick: CandleStick(candles: candles),
optionChain:
OptionChain.fromJson(data["data"]['option_chain'])));
// netChange = dynamicData['net_change'].toString();
// _calculatePercentageChange(
// stockDetailsModel!.data!.stockData!.ohlc!.open!,
// stockDetailsModel!.data!.stockData!.lastPrice!);
netChange = dynamicData['net_change'].toString();
_calculatePercentageChange(
stockDetailsModel!.data!.stockData!.ohlc!.open!,
stockDetailsModel!.data!.stockData!.lastPrice!);
// isLoading.value = false;
// });
isLoading.value = false;
});
initializeWebSocket();
// initializeWebSocket();
} else {
isLoading.value = false;
}