Merge branch 'main' of https://github.com/WDI-Ideas/trader-s-circuit into jayeshjain25
This commit is contained in:
@@ -58,7 +58,7 @@ Widget CommonYesNoBtn({
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Color.fromRGBO(70, 5, 1, 0.8),
|
||||
Color(0xFF2D7AEE).withOpacity(0.14),
|
||||
Color.fromRGBO(102, 102, 102, 0.8),
|
||||
],
|
||||
),
|
||||
@@ -74,9 +74,10 @@ Widget CommonYesNoBtn({
|
||||
height: 50.h,
|
||||
width: 170.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
border: Border.all(color: Color(0xFF9A0000), width: 1.w),
|
||||
color: Color(0xFF6C0000)),
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
// border: Border.all(color: Color(0xFF9A0000), width: 1.w),
|
||||
color: Color(0xFF2D7AEE),
|
||||
),
|
||||
child: Center(child: text18W500('No')),
|
||||
),
|
||||
)
|
||||
|
||||
@@ -84,7 +84,6 @@ class ApiUrls {
|
||||
//Stock Details
|
||||
static String stockDetailsApi = "${base}get-details-of-stock";
|
||||
|
||||
//Stock Details
|
||||
static String subscriptionApi = "${base}my-subscription-page";
|
||||
|
||||
//setting
|
||||
@@ -92,4 +91,10 @@ class ApiUrls {
|
||||
|
||||
//search
|
||||
static String searchData = "${base}search-stock";
|
||||
|
||||
//logout
|
||||
static String logout = "${base}Logout";
|
||||
|
||||
//signin with google
|
||||
static String googlesignin = "${base}sign-in-with-google";
|
||||
}
|
||||
|
||||
@@ -63,6 +63,8 @@ class DefaultFirebaseOptions {
|
||||
messagingSenderId: '307701736370',
|
||||
projectId: 'traders-circuit',
|
||||
storageBucket: 'traders-circuit.appspot.com',
|
||||
iosClientId: '307701736370-il62k6tumpu03hnaiqkefj44494bvae6.apps.googleusercontent.com',
|
||||
iosBundleId: 'com.example.traderscircuit',
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -84,7 +84,10 @@ class _HomeScreenState extends State<HomeScreen> {
|
||||
drawerEnableOpenDragGesture: false,
|
||||
key: _scaffoldKey1,
|
||||
backgroundColor: Colors.black,
|
||||
drawer: Container(child: const SideMenu()),
|
||||
drawer: Container(
|
||||
width: 300,
|
||||
child: const SideMenu(),
|
||||
),
|
||||
extendBody: true,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 70.h,
|
||||
|
||||
@@ -973,7 +973,7 @@ class HoldingsTabBar extends StatelessWidget {
|
||||
indicatorColor: const Color(0xFFFFFFFF),
|
||||
labelColor: Colors.white,
|
||||
unselectedLabelColor: const Color(0xffFFFFFF),
|
||||
overlayColor: WidgetStateProperty.all(const Color(0xFFFFFFFF)),
|
||||
overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)),
|
||||
tabs: const [
|
||||
Tab(
|
||||
text: 'Holdings',
|
||||
@@ -1013,7 +1013,7 @@ class PortfolioTabBar extends StatelessWidget {
|
||||
indicatorColor: const Color(0xff6C0000),
|
||||
labelColor: Colors.white,
|
||||
unselectedLabelColor: const Color(0xFF464646),
|
||||
overlayColor: WidgetStateProperty.all(const Color(0xFFFFFFFF)),
|
||||
overlayColor: MaterialStateProperty.all(const Color(0xFFFFFFFF)),
|
||||
tabs: List.generate(portfolioLength, (counter) {
|
||||
return Tab(
|
||||
text: portoflioName[counter].brokerName,
|
||||
|
||||
@@ -6,8 +6,10 @@ import 'package:shared_preferences/shared_preferences.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/base_manager.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view_model/LogoutApi/logout_api.dart';
|
||||
import 'package:traderscircuit/view_model/ProfileAPI/GetProfileApi.dart';
|
||||
|
||||
import 'webview_subscription.dart';
|
||||
@@ -161,7 +163,7 @@ class _SideMenuState extends State<SideMenu> {
|
||||
title: text18W400('My Subscription'),
|
||||
trailing: Container(
|
||||
height: 35.h,
|
||||
width: 122.w,
|
||||
width: 80.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6.r),
|
||||
color: const Color(0xFF34C759),
|
||||
@@ -221,20 +223,20 @@ class _SideMenuState extends State<SideMenu> {
|
||||
title: text18W400('Update My KYC'),
|
||||
trailing: Container(
|
||||
height: 40.h,
|
||||
width: 122.w,
|
||||
width: 80.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6.r),
|
||||
color: const Color(0xFF3A3A3A).withOpacity(0.6),
|
||||
border: Border.all(color: const Color(0xFF9A0000))),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 10.w),
|
||||
padding: EdgeInsets.symmetric(horizontal: 4.w),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
text12W400('Pending'),
|
||||
text10W300('Pending'),
|
||||
Container(
|
||||
height: 30.h,
|
||||
width: 30.h,
|
||||
height: 22.h,
|
||||
width: 22.w,
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage(
|
||||
@@ -272,12 +274,12 @@ class _SideMenuState extends State<SideMenu> {
|
||||
title: text18W400('My Risk Profile'),
|
||||
trailing: Container(
|
||||
height: 35.h,
|
||||
width: 122.w,
|
||||
width: 80.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(6.r),
|
||||
color: const Color(0xFF0093FF),
|
||||
),
|
||||
child: Center(child: text14W500('Conservative')),
|
||||
child: Center(child: text10W300('Conservative')),
|
||||
),
|
||||
selected: true,
|
||||
onTap: () {
|
||||
@@ -385,10 +387,11 @@ LogOutdialog(context) {
|
||||
width: 140.w,
|
||||
child: CommonYesNoBtn(
|
||||
yesonTap: () async {
|
||||
SharedPreferences prefs =
|
||||
await SharedPreferences.getInstance();
|
||||
await prefs.clear();
|
||||
Get.offNamed(RouteName.loginscreen);
|
||||
_handleLogout();
|
||||
// SharedPreferences prefs =
|
||||
// await SharedPreferences.getInstance();
|
||||
// await prefs.clear();
|
||||
// Get.offNamed(RouteName.loginscreen);
|
||||
},
|
||||
)),
|
||||
SizedBox(
|
||||
@@ -477,7 +480,8 @@ void navigateTo(int index, BuildContext context) {
|
||||
sizedBoxHeight(50.h),
|
||||
CommonYesNoBtn(
|
||||
yesonTap: () {
|
||||
Get.toNamed(RouteName.loginscreen);
|
||||
_handleLogout();
|
||||
// Get.toNamed(RouteName.loginscreen);
|
||||
},
|
||||
noonTap: () {
|
||||
Get.back();
|
||||
@@ -537,3 +541,26 @@ class sideBarTile extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _handleLogout() async {
|
||||
// Create an instance of the API with required data
|
||||
var logoutApi = LogoutAPI({
|
||||
// Add any required data here, e.g., user token or ID
|
||||
});
|
||||
|
||||
// Call the logout API
|
||||
final response = await logoutApi.logoutApi();
|
||||
|
||||
// Handle the response
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
// Clear any user-related data here if necessary
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await prefs.clear();
|
||||
|
||||
// Navigate to the login screen
|
||||
Get.offAllNamed(RouteName.loginscreen);
|
||||
} else {
|
||||
// Show an error message if logout failed
|
||||
Get.snackbar('Error', response.message ?? 'Logout failed');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,23 @@ import 'dart:ui';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:glassmorphism/glassmorphism.dart';
|
||||
import 'package:google_sign_in/google_sign_in.dart';
|
||||
import 'package:onesignal_flutter/onesignal_flutter.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
|
||||
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
|
||||
import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/Utils/utils.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/login/VerifyOtp.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
import 'package:traderscircuit/view_model/GoogleApi/google_api.dart';
|
||||
import '../../view_model/SendOtp/sendOtpObserver.dart';
|
||||
import '../../view_model/SendOtp/sendOtpbloc.dart';
|
||||
|
||||
@@ -31,6 +38,110 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
return !phoneNumberExpression.hasMatch(phoneNumber);
|
||||
}
|
||||
|
||||
_signInWithGooglecheck() async {
|
||||
try {
|
||||
final GoogleSignIn googleSignIn = GoogleSignIn();
|
||||
await googleSignIn.signOut();
|
||||
final GoogleSignInAccount? googleUser = await googleSignIn.signIn();
|
||||
if (googleUser == null) {
|
||||
return;
|
||||
}
|
||||
final GoogleSignInAuthentication googleAuth =
|
||||
await googleUser.authentication;
|
||||
|
||||
print('googleAuth AccessToken ${googleAuth.accessToken}');
|
||||
|
||||
// Show loading dialog
|
||||
showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (BuildContext context) {
|
||||
return Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: Colors.white,
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
final status = await OneSignal.shared.getDeviceState();
|
||||
final String? playerIdV = status?.userId;
|
||||
Map<String, String> updata = {
|
||||
"principal_source_xid": '3',
|
||||
"access_token": '${googleAuth.accessToken}',
|
||||
"player_id": playerIdV!,
|
||||
};
|
||||
// Call Google API
|
||||
final response = await GoogleAPI(updata).googleApi();
|
||||
|
||||
// Dismiss loading dialog
|
||||
Navigator.of(context).pop();
|
||||
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
// await global.setname();
|
||||
// await global.getVar();
|
||||
|
||||
Get.snackbar(
|
||||
"Success!",
|
||||
'Google Sign In successful!',
|
||||
duration: Duration(seconds: 2),
|
||||
colorText: Colors.white,
|
||||
backgroundColor: Colors.green,
|
||||
margin: EdgeInsets.all(8),
|
||||
snackStyle: SnackStyle.FLOATING,
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(
|
||||
'accessToken', response.data["data"]["access-token"]);
|
||||
isProfileUpdated =
|
||||
response.data["data"]["user_data"]["profile_updated"];
|
||||
isriskProfileUpdated =
|
||||
response.data["data"]["user_data"]["risk_profile_updated"];
|
||||
isKycUpdated = response.data["data"]["user_data"]["kyc_updated"];
|
||||
isSecuredAccess = response.data["data"]["user_data"]["secured_access"];
|
||||
isProfileUpdated == 0
|
||||
? Get.toNamed(RouteName.adddetails)
|
||||
:
|
||||
// isKycUpdated == 0
|
||||
// ? Get.toNamed(RouteName.kyc)
|
||||
// :
|
||||
isriskProfileUpdated == 0
|
||||
? Get.toNamed(RouteName.updateriskprofile, arguments: {
|
||||
"fromScreen": "login-flow",
|
||||
})
|
||||
: Get.toNamed(RouteName.mainscreen);
|
||||
print('signup: ${prefs.getString('token')}');
|
||||
|
||||
// Get.toNamed(RouteName.adddetails);
|
||||
} else {
|
||||
// Show an error message
|
||||
Get.snackbar(
|
||||
"Error!",
|
||||
response.message,
|
||||
duration: Duration(seconds: 2),
|
||||
colorText: Colors.white,
|
||||
backgroundColor: Colors.red,
|
||||
margin: EdgeInsets.all(8),
|
||||
snackStyle: SnackStyle.FLOATING,
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
print("Error during Google sign-in and API call: $e");
|
||||
Get.snackbar(
|
||||
"Error!",
|
||||
'Something went wrong, please try again!',
|
||||
duration: Duration(seconds: 2),
|
||||
colorText: Colors.white,
|
||||
backgroundColor: Colors.red,
|
||||
margin: EdgeInsets.all(8),
|
||||
snackStyle: SnackStyle.FLOATING,
|
||||
snackPosition: SnackPosition.BOTTOM,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// final CounterBloc counterbloc = BlocProvider.of<CounterBloc>(context);
|
||||
@@ -250,7 +361,7 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
if (isValid!) {
|
||||
FocusManager.instance.primaryFocus
|
||||
?.unfocus();
|
||||
if (isValid != null && isValid) {
|
||||
if (isValid != null && isValid) {
|
||||
Map<String, String> myLoginData = {
|
||||
"mobile_number": phonecontroller.text,
|
||||
};
|
||||
@@ -353,52 +464,57 @@ class _LoginScreenState extends State<LoginScreen> {
|
||||
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(0xff4A73FB).withOpacity(0.2),
|
||||
const Color(0xff4A73FB).withOpacity(0.2),
|
||||
const Color(0xff4A73FB).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",
|
||||
),
|
||||
],
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
_signInWithGooglecheck();
|
||||
},
|
||||
child: 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(0xff4A73FB).withOpacity(0.2),
|
||||
const Color(0xff4A73FB).withOpacity(0.2),
|
||||
const Color(0xff4A73FB).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",
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
34
lib/view_model/GoogleApi/google_api.dart
Normal file
34
lib/view_model/GoogleApi/google_api.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:traderscircuit/Utils/api_urls.dart';
|
||||
import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/data/network/network_api_services.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/login/VerifyOtp.dart';
|
||||
|
||||
class GoogleAPI {
|
||||
GoogleAPI(this.data);
|
||||
var data;
|
||||
Future<ResponseData<dynamic>> googleApi() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
final response = await NetworkApiServices().postApi(
|
||||
data,
|
||||
ApiUrls.googlesignin,
|
||||
);
|
||||
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
//Map<String, dynamic> responseData = jsonDecode(response.data);
|
||||
if (response.data["status"] == "success") {
|
||||
// await prefs.setString('token', response.data["data"]["access"]);
|
||||
// await prefs.setString('refreshToken', response.data["data"]["refresh"]);
|
||||
// await prefs.setBool('hasSignedInBefore', response.data["data"]["complete"]);
|
||||
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
response.data['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
28
lib/view_model/LogoutApi/logout_api.dart
Normal file
28
lib/view_model/LogoutApi/logout_api.dart
Normal file
@@ -0,0 +1,28 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:traderscircuit/Utils/api_urls.dart';
|
||||
import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/data/network/network_api_services.dart';
|
||||
|
||||
class LogoutAPI {
|
||||
LogoutAPI(this.data);
|
||||
var data;
|
||||
Future<ResponseData<dynamic>> logoutApi() async {
|
||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||
final response = await NetworkApiServices().postApi(
|
||||
data,
|
||||
ApiUrls.logout,
|
||||
);
|
||||
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
Map<String, dynamic> responseData =
|
||||
Map<String, dynamic>.from(response.data);
|
||||
if (responseData['status'] == "success") {
|
||||
print("OTP sent successfully");
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
responseData['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user