kyc and update risk profile api integration and issues fixed
This commit is contained in:
@@ -20,6 +20,7 @@ class CustomTextFormField extends StatefulWidget {
|
||||
this.inputFormatters,
|
||||
this.onInput,
|
||||
this.onTap,
|
||||
this.textCapV,
|
||||
this.suffixIcon,
|
||||
}) : super(key: key);
|
||||
|
||||
@@ -38,6 +39,7 @@ class CustomTextFormField extends StatefulWidget {
|
||||
final dynamic inputFormatters;
|
||||
final Function(String)? onInput;
|
||||
final VoidCallback? onTap;
|
||||
final TextCapitalization? textCapV;
|
||||
final Widget? suffixIcon;
|
||||
|
||||
@override
|
||||
@@ -93,6 +95,7 @@ class _CustomTextFormFieldState extends State<CustomTextFormField> {
|
||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||
obscureText: obscureText,
|
||||
controller: widget.textEditingController,
|
||||
textCapitalization: widget.textCapV ?? TextCapitalization.none,
|
||||
decoration: InputDecoration(
|
||||
hintStyle: TextStyle(color: Colors.white),
|
||||
hintText: widget.hintText,
|
||||
|
||||
@@ -133,20 +133,24 @@ class _CustomDropDownWidgetState extends State<CustomDropDownWidget> {
|
||||
Positioned(
|
||||
left: 14,
|
||||
top: 16,
|
||||
child: Text(
|
||||
widget.type == "risk"
|
||||
? (selectedValue.isNotEmpty
|
||||
? selectedValue.value
|
||||
: widget.header)
|
||||
: (contactUsController.selectedValue.isNotEmpty
|
||||
? contactUsController.selectedValue.value
|
||||
: widget.header),
|
||||
style: const TextStyle(
|
||||
color: Color(0xFFADADAD),
|
||||
fontSize: 16,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w400,
|
||||
height: 0,
|
||||
child: Container(
|
||||
width: 310,
|
||||
child: Text(
|
||||
widget.type == "risk"
|
||||
? (selectedValue.isNotEmpty
|
||||
? selectedValue.value
|
||||
: widget.header)
|
||||
: (contactUsController.selectedValue.isNotEmpty
|
||||
? contactUsController.selectedValue.value
|
||||
: widget.header),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: const TextStyle(
|
||||
color: Color(0xFFADADAD),
|
||||
fontSize: 16,
|
||||
fontFamily: 'hiragino',
|
||||
fontWeight: FontWeight.w400,
|
||||
height: 0,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -43,6 +43,7 @@ class ApiUrls {
|
||||
//RISK PROFILE API
|
||||
static String getRiskProfileQuestionAnswerApi = "${base}riskProfileQueAns";
|
||||
static String addRiskProfileQuestionAnswerApi = "${base}addUserRiskProfile";
|
||||
static String getRiskProfile = "${base}get-user-risk-profile-data";
|
||||
|
||||
//CONTENT BYTES API
|
||||
static String getContentBytesCategoriesApi =
|
||||
@@ -78,4 +79,7 @@ class ApiUrls {
|
||||
|
||||
//explore unseen
|
||||
static String getExplore = "${base}get-explore-the-unseen-recommendations";
|
||||
|
||||
//kyc
|
||||
static String getKyc = "${base}get-kyc-images";
|
||||
}
|
||||
|
||||
76
lib/model/KycModel/kyc_model.dart
Normal file
76
lib/model/KycModel/kyc_model.dart
Normal file
@@ -0,0 +1,76 @@
|
||||
class GetKYCModel {
|
||||
String? status;
|
||||
int? statusCode;
|
||||
String? message;
|
||||
List<Data>? data;
|
||||
|
||||
GetKYCModel({this.status, this.statusCode, this.message, this.data});
|
||||
|
||||
GetKYCModel.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['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? userId;
|
||||
String? adharcardNumber;
|
||||
String? panNumber;
|
||||
String? pancardImageFront;
|
||||
String? pancardImageBack;
|
||||
String? adharcardImageFront;
|
||||
String? adharcardImageBack;
|
||||
|
||||
Data(
|
||||
{this.id,
|
||||
this.userId,
|
||||
this.adharcardNumber,
|
||||
this.panNumber,
|
||||
this.pancardImageFront,
|
||||
this.pancardImageBack,
|
||||
this.adharcardImageFront,
|
||||
this.adharcardImageBack});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
userId = json['user_id'];
|
||||
adharcardNumber = json['adharcard_number'];
|
||||
panNumber = json['pan_number'] ?? "";
|
||||
pancardImageFront = json['pancard_image_front'];
|
||||
pancardImageBack = json['pancard_image_back'];
|
||||
adharcardImageFront = json['adharcard_image_front'];
|
||||
adharcardImageBack = json['adharcard_image_back'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['user_id'] = userId;
|
||||
data['adharcard_number'] = adharcardNumber;
|
||||
data['pan_number'] = panNumber;
|
||||
data['pancard_image_front'] = pancardImageFront;
|
||||
data['pancard_image_back'] = pancardImageBack;
|
||||
data['adharcard_image_front'] = adharcardImageFront;
|
||||
data['adharcard_image_back'] = adharcardImageBack;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
118
lib/model/RiskProfileModel/get_user_risk_profile_model.dart
Normal file
118
lib/model/RiskProfileModel/get_user_risk_profile_model.dart
Normal file
@@ -0,0 +1,118 @@
|
||||
class GetUserRiskProfileModel {
|
||||
String? status;
|
||||
int? statusCode;
|
||||
String? message;
|
||||
List<Data>? data;
|
||||
|
||||
GetUserRiskProfileModel(
|
||||
{this.status, this.statusCode, this.message, this.data});
|
||||
|
||||
GetUserRiskProfileModel.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['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? userId;
|
||||
int? questionId;
|
||||
int? answerId;
|
||||
QuestionData? questionData;
|
||||
AnswerData? answerData;
|
||||
|
||||
Data(
|
||||
{this.id,
|
||||
this.userId,
|
||||
this.questionId,
|
||||
this.answerId,
|
||||
this.questionData,
|
||||
this.answerData});
|
||||
|
||||
Data.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
userId = json['user_id'];
|
||||
questionId = json['question_id'];
|
||||
answerId = json['answer_id'];
|
||||
questionData = json['question_data'] != null
|
||||
? QuestionData.fromJson(json['question_data'])
|
||||
: null;
|
||||
answerData = json['answer_data'] != null
|
||||
? AnswerData.fromJson(json['answer_data'])
|
||||
: null;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['user_id'] = userId;
|
||||
data['question_id'] = questionId;
|
||||
data['answer_id'] = answerId;
|
||||
if (questionData != null) {
|
||||
data['question_data'] = questionData!.toJson();
|
||||
}
|
||||
if (answerData != null) {
|
||||
data['answer_data'] = answerData!.toJson();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class QuestionData {
|
||||
int? id;
|
||||
String? question;
|
||||
String? hint;
|
||||
|
||||
QuestionData({this.id, this.question, this.hint});
|
||||
|
||||
QuestionData.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
question = json['question'];
|
||||
hint = json['hint'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['question'] = question;
|
||||
data['hint'] = hint;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class AnswerData {
|
||||
int? id;
|
||||
String? answer;
|
||||
|
||||
AnswerData({this.id, this.answer});
|
||||
|
||||
AnswerData.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
answer = json['answer'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['answer'] = answer;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@ class Data {
|
||||
int? id;
|
||||
String? question;
|
||||
String? isActive;
|
||||
|
||||
String? hint;
|
||||
String? createdAt;
|
||||
String? updatedAt;
|
||||
List<Answer>? answer;
|
||||
@@ -43,6 +43,7 @@ class Data {
|
||||
Data(
|
||||
{this.id,
|
||||
this.question,
|
||||
this.hint,
|
||||
this.isActive,
|
||||
this.createdAt,
|
||||
this.updatedAt,
|
||||
@@ -52,7 +53,7 @@ class Data {
|
||||
id = json['id'];
|
||||
question = json['question'];
|
||||
isActive = json['is_active'];
|
||||
|
||||
hint = json['hint'];
|
||||
createdAt = json['created_at'];
|
||||
updatedAt = json['updated_at'];
|
||||
if (json['answer'] != null) {
|
||||
@@ -68,7 +69,7 @@ class Data {
|
||||
data['id'] = id;
|
||||
data['question'] = question;
|
||||
data['is_active'] = isActive;
|
||||
|
||||
data['hint'] = hint;
|
||||
data['created_at'] = createdAt;
|
||||
data['updated_at'] = updatedAt;
|
||||
if (answer != null) {
|
||||
@@ -84,7 +85,6 @@ class Answer {
|
||||
String? answer;
|
||||
int? points;
|
||||
String? isActive;
|
||||
|
||||
String? createdAt;
|
||||
String? updatedAt;
|
||||
|
||||
|
||||
@@ -309,7 +309,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
date: callRecommendationsModel
|
||||
.data!.activeCalls![index].createdAt!,
|
||||
premium:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].currentPrice}",
|
||||
price1:
|
||||
"₹ ${callRecommendationsModel.data!.activeCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
@@ -425,7 +425,7 @@ class _ShortTradeState extends State<ShortTrade> {
|
||||
date: callRecommendationsModel
|
||||
.data!.exitedCalls![index].createdAt!,
|
||||
premium:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].stopLoss}",
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].currentPrice}",
|
||||
price1:
|
||||
"₹ ${callRecommendationsModel.data!.exitedCalls![index].targetPrice}",
|
||||
stoploss:
|
||||
|
||||
@@ -245,7 +245,9 @@ class _SideMenuState extends State<SideMenu> {
|
||||
),
|
||||
selected: true,
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.kyc);
|
||||
Get.toNamed(RouteName.kyc, arguments: {
|
||||
"fromScreen": "sidemenu-flow",
|
||||
});
|
||||
},
|
||||
),
|
||||
Container(
|
||||
@@ -276,7 +278,9 @@ class _SideMenuState extends State<SideMenu> {
|
||||
selected: true,
|
||||
onTap: () {
|
||||
setState(() {
|
||||
Get.toNamed(RouteName.updateriskprofile);
|
||||
Get.toNamed(RouteName.updateriskprofile, arguments: {
|
||||
"fromScreen": "sidemenu-flow",
|
||||
});
|
||||
});
|
||||
},
|
||||
),
|
||||
|
||||
@@ -94,7 +94,9 @@ class _AddDetailsState extends State<AddDetails> {
|
||||
final resp = await AddDetailsAPI(updata).adddetailsApi();
|
||||
if (resp.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
Get.toNamed(RouteName.kyc);
|
||||
Get.toNamed(RouteName.kyc, arguments: {
|
||||
"fromScreen": "login-flow",
|
||||
});
|
||||
} else if (resp.status == ResponseStatus.PRIVATE) {
|
||||
Get.back();
|
||||
String? message = resp.data['message'];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
@@ -12,17 +13,42 @@ import 'package:traderscircuit/Utils/Common/CommonAppbar.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/dialogs.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/Utils/utils.dart';
|
||||
import 'package:traderscircuit/model/KycModel/kyc_model.dart';
|
||||
import 'package:traderscircuit/resources/routes/route_name.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
import 'package:traderscircuit/view_model/KycApi/kyc_api.dart';
|
||||
import 'package:traderscircuit/view_model/Login/add_kyc_api.dart';
|
||||
|
||||
import '../../controller/kyc_controller.dart';
|
||||
import '../../view_model/RiskProfileApi/risk_profile_api.dart';
|
||||
|
||||
import 'package:path/path.dart' as path;
|
||||
|
||||
class AlphaNumericTextFormatter extends TextInputFormatter {
|
||||
@override
|
||||
TextEditingValue formatEditUpdate(
|
||||
TextEditingValue oldValue, TextEditingValue newValue) {
|
||||
final regExp = RegExp(r'^[a-zA-Z0-9]*$');
|
||||
if (regExp.hasMatch(newValue.text)) {
|
||||
return newValue;
|
||||
}
|
||||
return oldValue;
|
||||
}
|
||||
}
|
||||
|
||||
class UpperCaseTextFormatter extends TextInputFormatter {
|
||||
@override
|
||||
TextEditingValue formatEditUpdate(
|
||||
TextEditingValue oldValue, TextEditingValue newValue) {
|
||||
return TextEditingValue(
|
||||
text: newValue.text.toUpperCase(),
|
||||
selection: newValue.selection,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Kyc extends StatefulWidget {
|
||||
const Kyc({super.key});
|
||||
|
||||
@@ -39,12 +65,21 @@ class _KycState extends State<Kyc> {
|
||||
|
||||
KYCController kycController = Get.put(KYCController());
|
||||
|
||||
String fromScreen = Get.arguments['fromScreen'];
|
||||
|
||||
var panFMulti;
|
||||
var panBMulti;
|
||||
var aadFMulti;
|
||||
var aadBMulti;
|
||||
|
||||
_addKyc() async {
|
||||
if (kycController.panFrontImage.value.isEmpty ||
|
||||
kycController.panBackImage.value.isEmpty ||
|
||||
kycController.aadharFrontImage.value.isEmpty ||
|
||||
kycController.aadharBackImage.value.isEmpty) {
|
||||
utils.showToast("Please add images to proceed further");
|
||||
return;
|
||||
}
|
||||
panFMulti = await MultipartFile.fromFile(
|
||||
kycController.panFrontImage.value,
|
||||
filename: path.basename(kycController.panFrontImage.value),
|
||||
@@ -76,7 +111,9 @@ class _KycState extends State<Kyc> {
|
||||
final resp = await AddKycAPI(formdata).addkycApi();
|
||||
if (resp.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
Get.toNamed(RouteName.updateriskprofile);
|
||||
Get.toNamed(RouteName.updateriskprofile, arguments: {
|
||||
"fromScreen": "login-flow",
|
||||
});
|
||||
} else if (resp.status == ResponseStatus.PRIVATE) {
|
||||
Get.back();
|
||||
String? message = resp.data['message'];
|
||||
@@ -93,6 +130,26 @@ class _KycState extends State<Kyc> {
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
if (fromScreen == "sidemenu-flow") {
|
||||
KycApi().getKycUserApi().then((value) {
|
||||
GetKYCModel getKYCModel = GetKYCModel.fromJson(value.data);
|
||||
pannumber.text = getKYCModel.data![0].panNumber!;
|
||||
aadhaarnumber.text = getKYCModel.data![0].adharcardNumber!;
|
||||
kycController.panFrontImage.value =
|
||||
getKYCModel.data![0].pancardImageFront!;
|
||||
kycController.panBackImage.value =
|
||||
getKYCModel.data![0].pancardImageBack!;
|
||||
kycController.aadharFrontImage.value =
|
||||
getKYCModel.data![0].adharcardImageFront!;
|
||||
kycController.aadharBackImage.value =
|
||||
getKYCModel.data![0].adharcardImageBack!;
|
||||
});
|
||||
}
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Obx(
|
||||
@@ -122,17 +179,23 @@ class _KycState extends State<Kyc> {
|
||||
child: ListView(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
children: [
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: Row(
|
||||
children: [
|
||||
text18W500("Step 1 : Personal Information"),
|
||||
],
|
||||
),
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W500("Step 1 : Personal Information"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload pan card image"),
|
||||
fromScreen == "sidemenu-flow"
|
||||
? text18W400("View pan card image")
|
||||
: text18W400("Upload pan card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
@@ -185,33 +248,46 @@ class _KycState extends State<Kyc> {
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.panFrontImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
child: fromScreen ==
|
||||
"sidemenu-flow"
|
||||
? CachedNetworkImage(
|
||||
imageUrl: kycController
|
||||
.panFrontImage.value,
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
)
|
||||
: 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 = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panFrontImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
@@ -276,33 +352,46 @@ class _KycState extends State<Kyc> {
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.panBackImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
child: fromScreen ==
|
||||
"sidemenu-flow"
|
||||
? CachedNetworkImage(
|
||||
imageUrl: kycController
|
||||
.panBackImage.value,
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
)
|
||||
: 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 = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.panBackImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
@@ -338,7 +427,15 @@ class _KycState extends State<Kyc> {
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
enabled:
|
||||
fromScreen == "sidemenu-flow" ? false : true,
|
||||
textCapV: TextCapitalization.characters,
|
||||
textEditingController: pannumber,
|
||||
inputFormatters: [
|
||||
AlphaNumericTextFormatter(),
|
||||
UpperCaseTextFormatter(),
|
||||
LengthLimitingTextInputFormatter(10),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 15.h,
|
||||
@@ -352,15 +449,24 @@ class _KycState extends State<Kyc> {
|
||||
height: 15.h,
|
||||
),
|
||||
CustomTextFormField(
|
||||
enabled:
|
||||
fromScreen == "sidemenu-flow" ? false : true,
|
||||
textEditingController: aadhaarnumber,
|
||||
texttype: TextInputType.phone,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.allow(
|
||||
RegExp(r'[0-9]')),
|
||||
LengthLimitingTextInputFormatter(12),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 30.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
text18W400("Upload Aadhar card image"),
|
||||
fromScreen == "sidemenu-flow"
|
||||
? text18W400("View Aadhar card image")
|
||||
: text18W400("Upload Aadhar card image"),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
@@ -413,33 +519,47 @@ class _KycState extends State<Kyc> {
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharFrontImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
child:
|
||||
fromScreen == "sidemenu-flow"
|
||||
? CachedNetworkImage(
|
||||
imageUrl: kycController
|
||||
.aadharFrontImage
|
||||
.value,
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
)
|
||||
: 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,
|
||||
),
|
||||
),
|
||||
)
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.aadharFrontImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
@@ -505,33 +625,47 @@ class _KycState extends State<Kyc> {
|
||||
const EdgeInsets.symmetric(
|
||||
vertical: 20,
|
||||
horizontal: 40),
|
||||
child: Image(
|
||||
image: FileImage(
|
||||
File(
|
||||
kycController
|
||||
.aadharBackImage.value,
|
||||
),
|
||||
),
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
),
|
||||
child:
|
||||
fromScreen == "sidemenu-flow"
|
||||
? CachedNetworkImage(
|
||||
imageUrl: kycController
|
||||
.aadharBackImage
|
||||
.value,
|
||||
fit: BoxFit.cover,
|
||||
width: Get.width,
|
||||
height: 50.h,
|
||||
)
|
||||
: 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,
|
||||
),
|
||||
),
|
||||
)
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: Positioned(
|
||||
top: 6,
|
||||
right: 10,
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
kycController
|
||||
.aadharBackImage
|
||||
.value = "";
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/images/svg/cancel.svg",
|
||||
width: 18,
|
||||
height: 18,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
)
|
||||
: Center(
|
||||
@@ -558,13 +692,15 @@ class _KycState extends State<Kyc> {
|
||||
SizedBox(
|
||||
height: 70.h,
|
||||
),
|
||||
CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addKyc();
|
||||
// Get.toNamed(RouteName.updateriskprofile);
|
||||
},
|
||||
),
|
||||
fromScreen == "sidemenu-flow"
|
||||
? SizedBox()
|
||||
: CommonBtn(
|
||||
text: "Next",
|
||||
onTap: () {
|
||||
_addKyc();
|
||||
// Get.toNamed(RouteName.updateriskprofile);
|
||||
},
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
|
||||
@@ -8,7 +8,9 @@ import 'package:get/get.dart' hide FormData;
|
||||
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:traderscircuit/Utils/dialogs.dart';
|
||||
import 'package:traderscircuit/Utils/text.dart';
|
||||
import 'package:traderscircuit/Utils/utils.dart';
|
||||
import 'package:traderscircuit/controller/risk_profile_controller.dart';
|
||||
import 'package:traderscircuit/model/RiskProfileModel/get_user_risk_profile_model.dart';
|
||||
import 'package:traderscircuit/model/RiskProfileModel/risk_profile_ques_answer_model.dart';
|
||||
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
|
||||
|
||||
@@ -32,6 +34,8 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
List<int> answerIdList = [];
|
||||
List<Map<String, List<String>>> dropHeader = [];
|
||||
|
||||
String fromScreen = Get.arguments["fromScreen"];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
RiskProfileApi().getRiskProfileData().then((value) {
|
||||
@@ -47,8 +51,23 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
dropHeader.add({a.question!: titleTxt});
|
||||
}
|
||||
|
||||
log(dropHeader.toString());
|
||||
isLoading.value = false;
|
||||
if (fromScreen == "sidemenu-flow") {
|
||||
riskProfileController.selectedData.clear();
|
||||
RiskProfileApi().getUserRiskProfileData().then((value) {
|
||||
GetUserRiskProfileModel getUserRiskProfileModel =
|
||||
GetUserRiskProfileModel.fromJson(value.data);
|
||||
for (var a in getUserRiskProfileModel.data!) {
|
||||
questionIdList.add(a.questionId!);
|
||||
answerIdList.add(a.answerId!);
|
||||
riskProfileController.selectedData
|
||||
.add({a.questionData!.question!: a.answerData!.answer!});
|
||||
}
|
||||
isLoading.value = false;
|
||||
setState(() {});
|
||||
});
|
||||
} else {
|
||||
isLoading.value = false;
|
||||
}
|
||||
});
|
||||
super.initState();
|
||||
}
|
||||
@@ -98,6 +117,9 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
CommonBtn(
|
||||
text: "Submit",
|
||||
onTap: () {
|
||||
log(riskProfileController
|
||||
.selectedData.length
|
||||
.toString());
|
||||
questionIdList.clear();
|
||||
answerIdList.clear();
|
||||
if (riskProfileController
|
||||
@@ -109,6 +131,7 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
utils.showToast(
|
||||
"All Fields Required");
|
||||
} else {
|
||||
Utils.loader();
|
||||
// Iterate through selected data and match with provided data
|
||||
for (var entry
|
||||
in riskProfileController
|
||||
@@ -157,6 +180,7 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
jsonEncode(answerIdList),
|
||||
}))
|
||||
.then((value) {
|
||||
Get.back();
|
||||
Map<String, dynamic>
|
||||
responseData =
|
||||
Map<String, dynamic>.from(
|
||||
@@ -179,7 +203,10 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
|
||||
.riskProfileQuestionAnswerModel
|
||||
.data![index]
|
||||
.question!,
|
||||
"Select your goal",
|
||||
riskProfileController
|
||||
.riskProfileQuestionAnswerModel
|
||||
.data![index]
|
||||
.hint!,
|
||||
index);
|
||||
})),
|
||||
],
|
||||
|
||||
@@ -84,9 +84,13 @@ class _VerifyOTPState extends State<VerifyOTP> {
|
||||
isProfileUpdated == 0
|
||||
? Get.toNamed(RouteName.adddetails)
|
||||
: isKycUpdated == 0
|
||||
? Get.toNamed(RouteName.kyc)
|
||||
? Get.toNamed(RouteName.kyc, arguments: {
|
||||
"fromScreen": "login-flow",
|
||||
})
|
||||
: isriskProfileUpdated == 0
|
||||
? Get.toNamed(RouteName.updateriskprofile)
|
||||
? Get.toNamed(RouteName.updateriskprofile, arguments: {
|
||||
"fromScreen": "login-flow",
|
||||
})
|
||||
: Get.toNamed(RouteName.mainscreen);
|
||||
|
||||
// Get.toNamed(RouteName.mainscreen);
|
||||
|
||||
21
lib/view_model/KycApi/kyc_api.dart
Normal file
21
lib/view_model/KycApi/kyc_api.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import 'package:traderscircuit/Utils/api_urls.dart';
|
||||
import 'package:traderscircuit/Utils/base_manager.dart';
|
||||
import 'package:traderscircuit/data/network/network_api_services.dart';
|
||||
|
||||
class KycApi {
|
||||
Future<ResponseData<dynamic>> getKycUserApi() async {
|
||||
final response =
|
||||
await NetworkApiServices().getApi(ApiUrls.getKyc, isAuth: true);
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
Map<String, dynamic> responseData =
|
||||
Map<String, dynamic>.from(response.data);
|
||||
if (responseData['status'] == "success") {
|
||||
return response;
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
responseData['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ class RiskProfileApi {
|
||||
Future<ResponseData<dynamic>> getRiskProfileData() async {
|
||||
final response = await NetworkApiServices()
|
||||
.getApi(ApiUrls.getRiskProfileQuestionAnswerApi, isAuth: true);
|
||||
log(response.data.toString());
|
||||
// log(response.data.toString());
|
||||
if (response.status == ResponseStatus.SUCCESS) {
|
||||
Map<String, dynamic> responseData =
|
||||
Map<String, dynamic>.from(response.data);
|
||||
@@ -42,4 +42,22 @@ class RiskProfileApi {
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<ResponseData<dynamic>> getUserRiskProfileData() async {
|
||||
final response = await NetworkApiServices().getApi(
|
||||
ApiUrls.getRiskProfile,
|
||||
);
|
||||
// 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;
|
||||
} else {
|
||||
return ResponseData<dynamic>(
|
||||
responseData['message'], ResponseStatus.FAILED);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user