Compare commits
2 Commits
ab9c2367bf
...
b66101418b
| Author | SHA1 | Date | |
|---|---|---|---|
| b66101418b | |||
|
|
c2ba93738d |
@@ -55,6 +55,12 @@ class ApiUrls {
|
||||
|
||||
static const postremoveuser = "${baseUrl}remove-follower";
|
||||
|
||||
static const postchangepassword = "${baseUrl}update-password-send-otp";
|
||||
|
||||
static const postchangepassverify = "${baseUrl}verify-update-password-otp";
|
||||
|
||||
|
||||
|
||||
static const postnotification = "${baseUrl}update-notification-settings";
|
||||
static const getnotification = "${baseUrl}fetch-notification-settings";
|
||||
|
||||
|
||||
@@ -3,10 +3,13 @@ import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:regroup/Common/CommonButton.dart';
|
||||
import 'package:regroup/Common/base_manager.dart';
|
||||
import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/view_model/profilePostmethod.dart';
|
||||
import 'package:regroup/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
|
||||
import 'package:regroup/Utils/Common/blureffect.dart';
|
||||
import 'package:regroup/Utils/Common/sized_box.dart';
|
||||
import 'package:regroup/Utils/dialogs.dart';
|
||||
import 'package:regroup/Utils/texts.dart';
|
||||
import 'package:regroup/resources/routes/route_name.dart';
|
||||
import 'package:remove_emoji_input_formatter/remove_emoji_input_formatter.dart';
|
||||
@@ -19,116 +22,164 @@ class ChangePassword extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _ChangePasswordState extends State<ChangePassword> {
|
||||
TextEditingController currentpasscontroller = TextEditingController();
|
||||
TextEditingController newpasscontroller = TextEditingController();
|
||||
TextEditingController repeatpasscontroller = TextEditingController();
|
||||
|
||||
Uploadata() async {
|
||||
utils.loader();
|
||||
Map<String, dynamic> updata = {
|
||||
"current_password": currentpasscontroller.text,
|
||||
"new_password": newpasscontroller.text,
|
||||
"confirm_password": repeatpasscontroller.text,
|
||||
};
|
||||
final data = await Profilepostmethod().postChangepassword(updata);
|
||||
if (data.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
print("Change pass up done");
|
||||
|
||||
Get.toNamed(RouteName.verifycode,
|
||||
arguments: {
|
||||
"currentpass" : currentpasscontroller.text,
|
||||
"newpass" : newpasscontroller.text,
|
||||
"confirmpass" : repeatpasscontroller.text
|
||||
}
|
||||
);
|
||||
return utils.showToast(data.message);
|
||||
} else {
|
||||
Get.back();
|
||||
print("change pass not done");
|
||||
return utils.showToast(data.message);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
// key: _scaffoldKey1,
|
||||
backgroundColor: Color(0xFF222935),
|
||||
extendBody: true,
|
||||
appBar: CommonAppbar(
|
||||
titleTxt: "Change password",
|
||||
),
|
||||
body: Stack(children: [
|
||||
Container(
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage("assets/images/png/Ellipse 1496.png"), fit: BoxFit.fill)),
|
||||
return GestureDetector(
|
||||
onTap: () => FocusManager.instance.primaryFocus?.unfocus(),
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
// key: _scaffoldKey1,
|
||||
backgroundColor: Color(0xFF222935),
|
||||
extendBody: true,
|
||||
appBar: CommonAppbar(
|
||||
titleTxt: "Change password",
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("Current password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
isInputPassword: true,
|
||||
// textEditingController: _password,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(20),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("New password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
isInputPassword: true,
|
||||
// textEditingController: _password,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(20),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("Repeat password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
isInputPassword: true,
|
||||
// textEditingController: _password,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(20),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(50.h),
|
||||
CommonBtn(
|
||||
text: "Verify",
|
||||
onTap: () {
|
||||
Get.toNamed(RouteName.verifycode);
|
||||
},
|
||||
)
|
||||
]),
|
||||
body: Stack(children: [
|
||||
Container(
|
||||
decoration: const BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage("assets/images/png/Ellipse 1496.png"),
|
||||
fit: BoxFit.fill)),
|
||||
),
|
||||
)
|
||||
]));
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w),
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("Current password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
textEditingController: currentpasscontroller,
|
||||
isInputPassword: true,
|
||||
// textEditingController: _password,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(50),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("New password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
textEditingController: newpasscontroller,
|
||||
isInputPassword: true,
|
||||
// textEditingController: _password,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(50),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(25.h),
|
||||
text16w400_FCFCFC("Repeat password"),
|
||||
sizedBoxHeight(16.w),
|
||||
CustomTextFormField(
|
||||
isInputPassword: true,
|
||||
textEditingController: repeatpasscontroller,
|
||||
hintText: '',
|
||||
leadingIcon: Image.asset(
|
||||
'assets/images/png/lock.png',
|
||||
width: 22.w,
|
||||
height: 17.h,
|
||||
),
|
||||
|
||||
// const Icon(Icons.lock_outline),
|
||||
// validationMessage: "Enter your password",
|
||||
validator: (val) {
|
||||
if (val == null || val.isEmpty) {
|
||||
return 'Please enter your password';
|
||||
}
|
||||
if (val != newpasscontroller.text) {
|
||||
return 'Password does not match';
|
||||
}
|
||||
return null;
|
||||
},
|
||||
inputFormatters: [
|
||||
LengthLimitingTextInputFormatter(50),
|
||||
RemoveEmojiInputFormatter()
|
||||
],
|
||||
),
|
||||
sizedBoxHeight(50.h),
|
||||
CommonBtn(
|
||||
text: "Verify",
|
||||
onTap: () {
|
||||
// Get.toNamed(RouteName.verifycode);
|
||||
if (currentpasscontroller.text.isBlank! &&
|
||||
newpasscontroller.text.isBlank! &&
|
||||
repeatpasscontroller.text.isBlank!) {
|
||||
utils.showToast('Please fill all fields');
|
||||
} else {
|
||||
Uploadata();
|
||||
|
||||
}
|
||||
},
|
||||
)
|
||||
]),
|
||||
),
|
||||
)
|
||||
])),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pin_code_fields/pin_code_fields.dart';
|
||||
import 'package:regroup/Common/CommonGlassmorphism.dart';
|
||||
import 'package:regroup/Common/base_manager.dart';
|
||||
import 'package:regroup/Feed%20Module/Main_Screens/ProfileTab/view_model/profilePostmethod.dart';
|
||||
import 'package:regroup/Global.dart';
|
||||
import 'package:regroup/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:regroup/Utils/Common/CustomNextButton.dart';
|
||||
import 'package:regroup/Utils/Common/blureffect.dart';
|
||||
import 'package:regroup/Utils/Common/googleOAuthService.dart';
|
||||
import 'package:regroup/Utils/Common/sized_box.dart';
|
||||
import 'package:regroup/Utils/dialogs.dart';
|
||||
import 'package:regroup/Utils/texts.dart';
|
||||
import 'package:timer_button/timer_button.dart';
|
||||
|
||||
class VerifyCode extends StatefulWidget {
|
||||
const VerifyCode({super.key});
|
||||
@@ -17,8 +24,59 @@ class VerifyCode extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _VerifyCodeState extends State<VerifyCode> {
|
||||
final TextEditingController pincodeController = TextEditingController();
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
TextEditingController pincodeController = TextEditingController();
|
||||
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
|
||||
String currentpassword = Get.arguments['currentpass'];
|
||||
String newpassword = Get.arguments['newpass'];
|
||||
String confirmpassword = Get.arguments['confirmpass'];
|
||||
|
||||
Uploadata() async {
|
||||
utils.loader();
|
||||
Map<String, dynamic> updata = {
|
||||
"otp": pincodeController.text,
|
||||
"new_password": newpassword,
|
||||
};
|
||||
// final data = res
|
||||
final res = await Profilepostmethod().postChangepassverifyotp(updata);
|
||||
if (res.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
print("verification done");
|
||||
|
||||
Get.back();
|
||||
Get.back();
|
||||
|
||||
return utils.showToast(res.message);
|
||||
} else {
|
||||
Get.back();
|
||||
print("change pass not done");
|
||||
return utils.showToast(res.message);
|
||||
}
|
||||
}
|
||||
|
||||
Uploadataresendotp() async {
|
||||
utils.loader();
|
||||
Map<String, dynamic> updata = {
|
||||
"current_password": currentpassword,
|
||||
"new_password": newpassword,
|
||||
"confirm_password": confirmpassword,
|
||||
};
|
||||
final data = await Profilepostmethod().postChangepassword(updata);
|
||||
if (data.status == ResponseStatus.SUCCESS) {
|
||||
Get.back();
|
||||
print("otp done");
|
||||
|
||||
setState(() {
|
||||
pincodeController.clear();
|
||||
// turnValidation = false;
|
||||
});
|
||||
return utils.showToast(data.message);
|
||||
} else {
|
||||
Get.back();
|
||||
print("otp not done");
|
||||
return utils.showToast(data.message);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -44,34 +102,97 @@ class _VerifyCodeState extends State<VerifyCode> {
|
||||
text20700white("Check your email"),
|
||||
sizedBoxHeight(10.h),
|
||||
text14400whiteblur(
|
||||
"Enter the verification code that we sent to loremipsum@gmail.com"),
|
||||
"Enter the verification code that we sent to $emailid"),
|
||||
sizedBoxHeight(30.h),
|
||||
text16400white("Enter code"),
|
||||
sizedBoxHeight(20.h),
|
||||
commonGlassContainer(
|
||||
width: double.infinity,
|
||||
height: 50.h,
|
||||
borderradius: 30.r,
|
||||
border: 1,
|
||||
customWidget: CustomPinCodeField(
|
||||
controller: pincodeController,
|
||||
onChanged: (value) {
|
||||
print(value);
|
||||
},
|
||||
onCompleted: (value) {
|
||||
print("Completed");
|
||||
pincodeController.text = value;
|
||||
PinCodeTextField(
|
||||
validator: (value) {
|
||||
if (value != null && value.isEmpty) {
|
||||
return "Please Enter verification code";
|
||||
} else if (value != null && value.length < 4) {
|
||||
return "OTP length should be at least 4";
|
||||
}
|
||||
return null;
|
||||
},
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
|
||||
],
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
length: 4,
|
||||
obscureText: false,
|
||||
animationType: AnimationType.fade,
|
||||
pinTheme: PinTheme(
|
||||
selectedFillColor: Color(0xFF434A53),
|
||||
inactiveFillColor: Color(0xFF434A53),
|
||||
inactiveColor: Color(0xFF434A53),
|
||||
activeColor: Color(0xFF434A53),
|
||||
selectedColor: Color(0xFF434A53),
|
||||
shape: PinCodeFieldShape.underline,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
fieldHeight: 70,
|
||||
fieldWidth: 70,
|
||||
activeFillColor:
|
||||
// Colors.white
|
||||
Color(0xFF303030).withOpacity(0.4),
|
||||
// textStyle: TextStyle(color: Colors.white, fontSize: 20), // Change text color and font size
|
||||
),
|
||||
animationDuration: Duration(milliseconds: 300),
|
||||
enableActiveFill: true,
|
||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||
controller: pincodeController,
|
||||
onCompleted: (v) {
|
||||
print("Completed");
|
||||
},
|
||||
onChanged: (value) {
|
||||
print(value);
|
||||
setState(() {
|
||||
// currentText = value;
|
||||
});
|
||||
},
|
||||
cursorColor: Colors.white,
|
||||
textStyle: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 20.sp,
|
||||
fontFamily: 'Helvetica',
|
||||
),
|
||||
beforeTextPaste: (text) {
|
||||
print("Allowing to paste $text");
|
||||
return true;
|
||||
},
|
||||
appContext: context,
|
||||
),
|
||||
sizedBoxHeight(10.h),
|
||||
Center(
|
||||
child: TimerButton(
|
||||
disabledTextStyle: TextStyle(color: Colors.red),
|
||||
activeTextStyle: TextStyle(color: Colors.white),
|
||||
disabledColor: Color(0XFF222935).withOpacity(0.10),
|
||||
buttonType: ButtonType.textButton,
|
||||
label: "Resend OTP",
|
||||
timeOutInSeconds: 6,
|
||||
//mobile.text.isEmpty ? 1 : 60,
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
Uploadataresendotp();
|
||||
});
|
||||
},
|
||||
// disabledColor: Colors.white,
|
||||
color: Color(0XFF222935).withOpacity(0.10),
|
||||
),
|
||||
),
|
||||
// ),
|
||||
sizedBoxHeight(70.h),
|
||||
CustomButton(
|
||||
text: 'Continue',
|
||||
onPressed: () {
|
||||
if (pincodeController.text.isEmpty) {
|
||||
utils.showToast("Pin field is empty");
|
||||
} else if (pincodeController.text.length < 4) {
|
||||
utils.showToast("OTP length should be 4 digits");
|
||||
} else {
|
||||
return;
|
||||
Uploadata();
|
||||
}
|
||||
},
|
||||
),
|
||||
@@ -85,122 +206,176 @@ class _VerifyCodeState extends State<VerifyCode> {
|
||||
}
|
||||
}
|
||||
|
||||
class CustomPinCodeField extends StatefulWidget {
|
||||
final TextEditingController controller;
|
||||
final ValueChanged<String> onChanged;
|
||||
final ValueChanged<String> onCompleted;
|
||||
// class CustomPinCodeField extends StatefulWidget {
|
||||
// final TextEditingController controller;
|
||||
// final ValueChanged<String> onChanged;
|
||||
// final ValueChanged<String> onCompleted;
|
||||
|
||||
CustomPinCodeField({
|
||||
required this.controller,
|
||||
required this.onChanged,
|
||||
required this.onCompleted,
|
||||
});
|
||||
// CustomPinCodeField({
|
||||
// required this.controller,
|
||||
// required this.onChanged,
|
||||
// required this.onCompleted,
|
||||
// });
|
||||
|
||||
@override
|
||||
_CustomPinCodeFieldState createState() => _CustomPinCodeFieldState();
|
||||
}
|
||||
// @override
|
||||
// _CustomPinCodeFieldState createState() => _CustomPinCodeFieldState();
|
||||
// }
|
||||
|
||||
class _CustomPinCodeFieldState extends State<CustomPinCodeField> {
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
late List<TextEditingController> _controllers;
|
||||
late List<FocusNode> _focusNodes;
|
||||
String _currentText = "";
|
||||
// class _CustomPinCodeFieldState extends State<CustomPinCodeField> {
|
||||
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
// late List<TextEditingController> _controllers;
|
||||
// late List<FocusNode> _focusNodes;
|
||||
// String _currentText = "";
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_controllers = List.generate(4, (_) => TextEditingController());
|
||||
_focusNodes = List.generate(4, (_) => FocusNode());
|
||||
}
|
||||
// @override
|
||||
// void initState() {
|
||||
// super.initState();
|
||||
// _controllers = List.generate(4, (_) => TextEditingController());
|
||||
// _focusNodes = List.generate(4, (_) => FocusNode());
|
||||
// }
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controllers.forEach((controller) => controller.dispose());
|
||||
_focusNodes.forEach((focusNode) => focusNode.dispose());
|
||||
super.dispose();
|
||||
}
|
||||
// @override
|
||||
// void dispose() {
|
||||
// _controllers.forEach((controller) => controller.dispose());
|
||||
// _focusNodes.forEach((focusNode) => focusNode.dispose());
|
||||
// super.dispose();
|
||||
// }
|
||||
|
||||
String? _validate(int index) {
|
||||
// _currentText = _controllers.map((controller) => controller.text).join();
|
||||
if (_currentText[index].isEmpty) {
|
||||
return "Please Enter verification code";
|
||||
} else if (_currentText.length < 4) {
|
||||
return "OTP length should be at least 4";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// String? _validate(int index) {
|
||||
// if (_controllers[index].text.isEmpty) {
|
||||
// return "Please enter verification code";
|
||||
// } else if (_controllers[index].text.length > 1) {
|
||||
// return "Please enter only one digit";
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
|
||||
void _onChanged(String value, int index) {
|
||||
setState(() {
|
||||
_currentText = _controllers.map((controller) => controller.text).join();
|
||||
});
|
||||
if (value.length == 1 && index != 3) {
|
||||
FocusScope.of(context).nextFocus();
|
||||
} else if (value.isEmpty && index != 0) {
|
||||
FocusScope.of(context).previousFocus();
|
||||
}
|
||||
widget.onChanged(_currentText);
|
||||
// void _onChanged(String value, int index) {
|
||||
// setState(() {
|
||||
// _currentText = _controllers.map((controller) => controller.text).join();
|
||||
// });
|
||||
|
||||
if (_currentText.length == 4) {
|
||||
widget.onCompleted(_currentText);
|
||||
}
|
||||
}
|
||||
// if (value.isNotEmpty) {
|
||||
// if (index < _controllers.length - 1) {
|
||||
// FocusScope.of(context).nextFocus();
|
||||
// } else {
|
||||
// // Last field, trigger onCompleted directly
|
||||
// if (_currentText.length == _controllers.length) {
|
||||
// widget.onCompleted(_currentText);
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// // Empty value, focus to previous field if not the first field
|
||||
// if (index > 0) {
|
||||
// FocusScope.of(context).previousFocus();
|
||||
// }
|
||||
// }
|
||||
// widget.onChanged(_currentText);
|
||||
// }
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Form(
|
||||
key: _formKey,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: List.generate(4, (index) {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Center(
|
||||
child: Container(
|
||||
width: 30,
|
||||
height: 40,
|
||||
// color: Colors.amber,
|
||||
child: Center(
|
||||
child: TextFormField(
|
||||
controller: _controllers[index],
|
||||
focusNode: _focusNodes[index],
|
||||
keyboardType: TextInputType.number,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
|
||||
LengthLimitingTextInputFormatter(1),
|
||||
],
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 20.sp,
|
||||
fontFamily: 'Helvetica',
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
border: InputBorder.none,
|
||||
errorStyle: TextStyle(height: 0),
|
||||
),
|
||||
onChanged: (value) => _onChanged(value, index),
|
||||
validator: (value) {
|
||||
if (index == 3) return _validate(index);
|
||||
return null;
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
if (index != 3)
|
||||
Container(
|
||||
width: 12,
|
||||
height: 2,
|
||||
color: Colors.white,
|
||||
margin: EdgeInsets.symmetric(horizontal: 10),
|
||||
),
|
||||
],
|
||||
);
|
||||
}),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// return Form(
|
||||
// key: _formKey,
|
||||
// child: Column(
|
||||
// children: [
|
||||
// commonGlassContainer(
|
||||
// width: double.infinity,
|
||||
// height: 50.h,
|
||||
// borderradius: 30.r,
|
||||
// border: 1,
|
||||
// customWidget: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// children: List.generate(4, (index) {
|
||||
// return Row(
|
||||
// crossAxisAlignment: CrossAxisAlignment.center,
|
||||
// children: [
|
||||
// Center(
|
||||
// child: Container(
|
||||
// width: 30,
|
||||
// height: 40,
|
||||
// child: Center(
|
||||
// child: TextFormField(
|
||||
// controller: _controllers[index],
|
||||
// focusNode: _focusNodes[index],
|
||||
// keyboardType: TextInputType.number,
|
||||
// inputFormatters: [
|
||||
// FilteringTextInputFormatter.allow(
|
||||
// RegExp('[0-9]')),
|
||||
// LengthLimitingTextInputFormatter(1),
|
||||
// ],
|
||||
// textAlign: TextAlign.center,
|
||||
// style: TextStyle(
|
||||
// color: Colors.white,
|
||||
// fontSize: 20,
|
||||
// fontFamily: 'Helvetica',
|
||||
// ),
|
||||
// decoration: InputDecoration(
|
||||
// border: InputBorder.none,
|
||||
// errorStyle: TextStyle(height: 0),
|
||||
// ),
|
||||
// onChanged: (value) => _onChanged(value, index),
|
||||
// validator: (value) => _validate(index),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// if (index != 3)
|
||||
// Container(
|
||||
// width: 12,
|
||||
// height: 2,
|
||||
// color: Colors.white,
|
||||
// margin: EdgeInsets.symmetric(horizontal: 10),
|
||||
// ),
|
||||
// ],
|
||||
// );
|
||||
// }),
|
||||
// ),
|
||||
// ),
|
||||
// sizedBoxHeight(10.h),
|
||||
// Text(
|
||||
// _validateErrors(),
|
||||
// style: TextStyle(color: Colors.red),
|
||||
// ),
|
||||
// ],
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
|
||||
// String _validateErrors() {
|
||||
// for (int i = 0; i < _controllers.length; i++) {
|
||||
// String? error = _validate(i);
|
||||
// if (error != null) {
|
||||
// return error;
|
||||
// }
|
||||
// }
|
||||
|
||||
// // Check if OTP length is less than 4
|
||||
// if (_currentText.length < 4) {
|
||||
// return "OTP length should be 4 digits";
|
||||
// }
|
||||
|
||||
// return "";
|
||||
// }
|
||||
|
||||
// // String _validateErrors() {
|
||||
// // List<String> errors = [];
|
||||
|
||||
// // // Validate each TextFormField
|
||||
// // for (int i = 0; i < _controllers.length; i++) {
|
||||
// // String? error = _validate(i);
|
||||
// // if (error != null && !errors.contains(error)) {
|
||||
// // errors.add(error);
|
||||
// // }
|
||||
// // }
|
||||
|
||||
// // // Check OTP length only if there are no other errors
|
||||
// // if (errors.isEmpty && _currentText.length < 4) {
|
||||
// // errors.add("OTP length should be 4 digits");
|
||||
// // }
|
||||
|
||||
// // // Return concatenated error messages
|
||||
// // return errors.isNotEmpty ? errors.join("\n") : "";
|
||||
// // }
|
||||
// }
|
||||
|
||||
@@ -5,6 +5,7 @@ import 'package:regroup/Common/CommonButton.dart';
|
||||
import 'package:regroup/Common/CommonGlassmorphism.dart';
|
||||
import 'package:regroup/Common/CommonWidget.dart';
|
||||
import 'package:regroup/Utils/Common/CommonAppbar.dart';
|
||||
import 'package:regroup/Utils/Common/CommonDropdown.dart';
|
||||
import 'package:regroup/Utils/Common/CustomTextformfield.dart';
|
||||
import 'package:regroup/Utils/Common/blureffect.dart';
|
||||
import 'package:regroup/Utils/Common/sized_box.dart';
|
||||
@@ -22,6 +23,19 @@ class _AddTimelineState extends State<AddTimeline> {
|
||||
TextEditingController dateController = TextEditingController();
|
||||
TextEditingController dateController2 = TextEditingController();
|
||||
|
||||
final List<String> _dropdownProductItems = [
|
||||
'Individual',
|
||||
'Business',
|
||||
];
|
||||
|
||||
String _selectedAccountType = '';
|
||||
|
||||
void _onItemSelected(String value) {
|
||||
setState(() {
|
||||
_selectedAccountType = value;
|
||||
});
|
||||
}
|
||||
|
||||
RxBool isChecked = false.obs;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -150,6 +164,18 @@ class _AddTimelineState extends State<AddTimeline> {
|
||||
)
|
||||
],
|
||||
),
|
||||
text16400white("Ability"),
|
||||
sizedBoxHeight(15.h),
|
||||
CustomDropDownWidgetSignup(
|
||||
header: 'Select ability',
|
||||
title: '',
|
||||
listData: _dropdownProductItems,
|
||||
onItemSelected: _onItemSelected,
|
||||
// leadingImage:
|
||||
// Image.asset(
|
||||
// 'assets/images/png/user.png',
|
||||
// ),
|
||||
),
|
||||
sizedBoxHeight(80.h),
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 20.w),
|
||||
|
||||
@@ -59,4 +59,26 @@ class Profilepostmethod {
|
||||
print("response message is ${response.message}");
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<ResponseData<dynamic>> postChangepassword(updata) async {
|
||||
print("updata is $updata");
|
||||
final response = await NetworkApiServices().postApi(
|
||||
updata,
|
||||
ApiUrls.postchangepassword,
|
||||
);
|
||||
print("response is ${response.data}");
|
||||
print("response message is ${response.message}");
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<ResponseData<dynamic>> postChangepassverifyotp(updata) async {
|
||||
print("updata is $updata");
|
||||
final response = await NetworkApiServices().postApi(
|
||||
updata,
|
||||
ApiUrls.postchangepassverify,
|
||||
);
|
||||
print("response is ${response.data}");
|
||||
print("response message is ${response.message}");
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class CustomDropDownWidgetSignup extends StatefulWidget {
|
||||
required this.title,
|
||||
required this.listData,
|
||||
required this.onItemSelected,
|
||||
required this.leadingImage,
|
||||
this.leadingImage,
|
||||
}) : super(key: key);
|
||||
|
||||
final String header;
|
||||
@@ -73,7 +73,13 @@ class _CustomDropDownWidgetSignupState
|
||||
// 'assets/images/png/user.png',
|
||||
// ),
|
||||
|
||||
widget.leadingImage!,
|
||||
widget.leadingImage == null
|
||||
?
|
||||
SizedBox()
|
||||
:
|
||||
widget.leadingImage!
|
||||
,
|
||||
|
||||
SizedBox(width: 16.w),
|
||||
Text(
|
||||
selectedValue.value.isEmpty
|
||||
|
||||
@@ -32,7 +32,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
|
||||
int accounttypenumber = Get.arguments["accountypenumber"];
|
||||
|
||||
Uploadata() async {
|
||||
// utils.loader();
|
||||
utils.loader();
|
||||
Map<String, dynamic> updata = {
|
||||
"email_address": email,
|
||||
"password": userpassword,
|
||||
@@ -65,6 +65,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
|
||||
|
||||
return utils.showToast(res.message);
|
||||
} else {
|
||||
Get.back();
|
||||
// btnController.error();
|
||||
// btnController.reset();
|
||||
Get.snackbar(
|
||||
@@ -87,7 +88,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
|
||||
}
|
||||
|
||||
Uploadataresendotp() async {
|
||||
// utils.loader();
|
||||
utils.loader();
|
||||
Map<String, dynamic> updata = {
|
||||
"email_address": email,
|
||||
"password": userpassword,
|
||||
@@ -95,7 +96,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
|
||||
};
|
||||
final data = await Onboard().Postregisteration(updata);
|
||||
if (data.status == ResponseStatus.SUCCESS) {
|
||||
// Get.back();
|
||||
Get.back();
|
||||
// print("resend up done");
|
||||
// return utils.showToast(data.message);
|
||||
Get.snackbar(
|
||||
@@ -120,6 +121,7 @@ class _VerifyuserScreenStateState extends State<VerifyuserScreenState> {
|
||||
// }
|
||||
|
||||
else {
|
||||
Get.back();
|
||||
// btnController.error();
|
||||
// btnController.reset();
|
||||
Get.snackbar(
|
||||
|
||||
Reference in New Issue
Block a user