Set Pass Screen

This commit is contained in:
hanie.khodkari
2025-04-29 17:10:09 +03:30
parent bb1adc81ec
commit ff0931048e
6 changed files with 301 additions and 251 deletions
+2 -3
View File
@@ -53,7 +53,7 @@ import 'pages/LabelPages/label_result_screen.dart';
import 'pages/LabelPages/label_scan_screen.dart';
import 'pages/LoginRegisterPages/login_screen.dart';
import 'pages/my_info_screen.dart';
import 'pages/LoginRegisterPages/rePass_screen.dart';
import 'pages/LoginRegisterPages/re_pass_screen.dart';
import 'pages/TestPages/test_add_screen.dart';
import 'pages/TestPages/test_detail_screen.dart';
import 'pages/TestPages/test_filter_screen.dart';
@@ -195,8 +195,7 @@ class MyApp extends StatelessWidget {
Routes.myPackagesResultScreen: (ctx) =>
MyPackagesResultScreen(),
Routes.myPackagesFilterScreen: (ctx) => MyPackageFilterScreen(),
Routes.myPackagesDetailScreen: (ctx) =>
PackageDetailScreen(),
Routes.myPackagesDetailScreen: (ctx) => PackageDetailScreen(),
Routes.packagesTransferScreen: (ctx) => PackageTransferScreen(),
Routes.myPackagesHistoryScreen: (ctx) =>
MyPackagesHistoryScreen(),
@@ -1,239 +0,0 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';
import '../../providers/auth.dart';
import '../../providers/connectivity.dart';
import '../../widgets/Global/internet_error.dart';
class RePassScreen extends StatefulWidget {
// static const route = '/HomeScreen';
@override
State<StatefulWidget> createState() {
return _RePassScreenState();
}
}
class _RePassScreenState extends State<RePassScreen> {
final _form = GlobalKey<FormState>();
bool _isLoading = false;
// final cellNumberController = TextEditingController();
final passwordController = new TextEditingController();
final rePasswordController = new TextEditingController();
String token = 'Bearer ';
// String token = 'Bearer ';
bool _hidePass = true;
bool _hideRePass = true;
bool isInit = true;
@override
void didChangeDependencies() {
if (isInit) {
token += ModalRoute.of(context)!.settings.arguments.toString();
isInit = false;
}
super.didChangeDependencies();
}
Future<void> _showDialog(String message) async {
await showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text(message),
actions: <Widget>[
TextButton(
child: Text('Ok'),
onPressed: () {
Navigator.of(ctx).pop();
},
),
],
),
);
}
void _sendRePass() async {
if (!_form.currentState!.validate()) {
return;
}
_form.currentState!.save();
setState(() {
_isLoading = true;
});
await Provider.of<Auth>(context, listen: false)
.sendRePass(passwordController.text, token)
.then((value) async {
if (value == 'done') {
await _showDialog(
'Password changed successfully.Now login to your account.');
Navigator.of(context).pop();
}
});
}
@override
Widget build(BuildContext context) {
final _media = MediaQuery.of(context);
// final double _pixelRatio = (_media.size.height / _media.size.width * 7 / 5);
final double _devicewidth = _media.size.width;
final double _deviceBlockSize = _devicewidth / 100;
return SafeArea(
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('CSSD', style: TextStyle(color: Colors.white,),),
backgroundColor: Colors.black,
),
body: Selector<ConnectivityProvider, String>(
builder: (ctx, value, _) => value != 'offline'
? _isLoading
? Center(
child: CircularProgressIndicator(
color: Colors.black,
),
)
: Form(
key: _form,
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 20),
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(vertical: 20),
child: Text(
'CHANGE PASSWORD',
textAlign: TextAlign.left,
style: TextStyle(
color: Colors.black,
fontSize: 6 * _deviceBlockSize,
letterSpacing: 3,
fontWeight: FontWeight.w700,
),
),
),
TextFormField(
validator: (value) {
if (value!.isEmpty) {
return 'Password is required.';
}
if (value.length < 8) {
return 'Password at least is 8 characters.';
}
return null;
},
obscureText: _hidePass,
controller: passwordController,
decoration: InputDecoration(
icon: Icon(
FontAwesomeIcons.starOfLife,
size: 6 * _deviceBlockSize,
),
labelStyle: TextStyle(
fontWeight: FontWeight.w100,
fontSize: 4 * _deviceBlockSize,
),
labelText: 'Password',
isDense: true,
contentPadding: EdgeInsets.symmetric(
vertical: 2, horizontal: 3),
suffixIcon: InkWell(
child: Icon(FontAwesomeIcons.eye),
onTap: () {
setState(() {
_hidePass = !_hidePass;
});
},
),
),
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 5 * _deviceBlockSize,
),
textInputAction: TextInputAction.done,
onFieldSubmitted: (_) {
_sendRePass();
},
keyboardType: TextInputType.visiblePassword,
),
SizedBox(
height: 30,
),
TextFormField(
validator: (value) {
if (value!.length < 8) {
return 'Password at least is 8 characters.';
}
if (value != passwordController.text) {
return 'Password doesnt match!';
}
return null;
},
obscureText: _hideRePass,
controller: rePasswordController,
decoration: InputDecoration(
icon: Icon(
FontAwesomeIcons.starOfLife,
size: 6 * _deviceBlockSize,
),
labelStyle: TextStyle(
fontWeight: FontWeight.w100,
fontSize: 4 * _deviceBlockSize,
),
labelText: 'Confirm Password',
isDense: true,
contentPadding: EdgeInsets.symmetric(
vertical: 2, horizontal: 3),
suffixIcon: InkWell(
child: Icon(FontAwesomeIcons.eye),
onTap: () {
setState(() {
_hideRePass = !_hideRePass;
});
},
),
),
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 5 * _deviceBlockSize,
),
textInputAction: TextInputAction.done,
onFieldSubmitted: (_) {
_sendRePass();
},
keyboardType: TextInputType.visiblePassword,
),
SizedBox(height: 40),
Row(
children: <Widget>[
InkWell(
onTap: () => _sendRePass(),
child: Container(
width: 88 * _deviceBlockSize,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.black,
borderRadius: BorderRadius.circular(7),
),
child: Text(
'Change',
style: TextStyle(
color: Colors.white,
),
textAlign: TextAlign.center,
),
),
),
Spacer(),
],
),
SizedBox(height: 10),
],
),
)
: ConnectionErrorBox(),
selector: (_, connectivity) => connectivity.conStatus,
)),
);
}
}
@@ -0,0 +1,262 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../../config/routes.dart';
import '../../providers/auth.dart';
import '../../providers/connectivity.dart';
import '../../widgets/Global/internet_error.dart';
class RePassScreen extends StatefulWidget {
// static const route = '/HomeScreen';
@override
State<StatefulWidget> createState() {
return _RePassScreenState();
}
}
class _RePassScreenState extends State<RePassScreen> {
final _form = GlobalKey<FormState>();
bool _isLoading = false;
// final cellNumberController = TextEditingController();
final passwordController = new TextEditingController();
final rePasswordController = new TextEditingController();
String token = 'Bearer ';
// String token = 'Bearer ';
bool _hidePass = true;
bool _hideRePass = true;
bool isInit = true;
@override
void didChangeDependencies() {
if (isInit) {
token += ModalRoute.of(context)!.settings.arguments.toString();
isInit = false;
}
super.didChangeDependencies();
}
Future<void> _showDialog(String message) async {
await showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text(message),
actions: <Widget>[
TextButton(
child: Text('Ok'),
onPressed: () {
Navigator.of(ctx).pop();
},
),
],
),
);
}
void _sendRePass() async {
if (!_form.currentState!.validate()) {
return;
}
_form.currentState!.save();
setState(() {
_isLoading = true;
});
await Provider.of<Auth>(context, listen: false)
.sendRePass(passwordController.text, rePasswordController.text, token)
.then((value) async {
if (value == 'done') {
await _showDialog('Password changed successfully.');
Navigator.of(context).pop();
}
});
}
@override
Widget build(BuildContext context) {
final _media = MediaQuery.of(context);
// final double _pixelRatio = (_media.size.height / _media.size.width * 7 / 5);
final double _devicewidth = _media.size.width;
final double _deviceBlockSize = _devicewidth / 100;
return SafeArea(
child: Scaffold(
appBar: AppBar(
titleSpacing: -10,
title: Text(
'Home',
style: TextStyle(
color: Colors.white,
),
),
backgroundColor: Colors.black,
leading: IconButton(
icon: Icon(
Icons.keyboard_arrow_left,
color: Colors.white,
size: 35,
),
onPressed: () => Navigator.of(context).pushNamed(Routes.homePage),
),
),
body: Selector<ConnectivityProvider, String>(
builder: (ctx, value, _) => value != 'offline'
? _isLoading
? Center(
child: CircularProgressIndicator(
color: Colors.black,
),
)
: Form(
key: _form,
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 15),
children: <Widget>[
Container(
padding: EdgeInsets.only(top: 20, bottom: 5),
child: Text(
'CHANGE PASSWORD',
textAlign: TextAlign.left,
style: TextStyle(
color: Colors.black,
fontSize: 6 * _deviceBlockSize,
// letterSpacing: 3,
fontWeight: FontWeight.w700,
),
),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 5),
child: Column(
children: [
TextFormField(
validator: (value) {
if (value!.isEmpty) {
return 'Password is required.';
}
if (value.length < 8) {
return 'Password at least is 8 characters.';
}
return null;
},
obscureText: _hidePass,
controller: passwordController,
decoration: InputDecoration(
// icon: Icon(
// FontAwesomeIcons.starOfLife,
// size: 6 * _deviceBlockSize,
// ),
labelStyle: TextStyle(
fontWeight: FontWeight.w100,
fontSize: 4 * _deviceBlockSize,
),
labelText: 'Password',
isDense: true,
contentPadding: EdgeInsets.symmetric(
vertical: 2, horizontal: 3),
// suffixIcon: InkWell(
// child: Icon(FontAwesomeIcons.eye),
// onTap: () {
// setState(() {
// _hidePass = !_hidePass;
// });
// },
// ),
),
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 5 * _deviceBlockSize,
),
textInputAction: TextInputAction.done,
onFieldSubmitted: (_) {
_sendRePass();
},
keyboardType: TextInputType.visiblePassword,
),
SizedBox(
height: 30,
),
TextFormField(
validator: (value) {
if (value!.length < 8) {
return 'Password at least is 8 characters.';
}
if (value != passwordController.text) {
return 'Password doesnt match!';
}
return null;
},
obscureText: _hideRePass,
controller: rePasswordController,
decoration: InputDecoration(
// icon: Icon(
// FontAwesomeIcons.starOfLife,
// size: 6 * _deviceBlockSize,
// ),
labelStyle: TextStyle(
fontWeight: FontWeight.w100,
fontSize: 4 * _deviceBlockSize,
),
labelText: 'retype your new password',
isDense: true,
contentPadding: EdgeInsets.symmetric(
vertical: 2, horizontal: 3),
// suffixIcon: InkWell(
// child: Icon(FontAwesomeIcons.eye),
// onTap: () {
// setState(() {
// _hideRePass = !_hideRePass;
// });
// },
// ),
),
style: TextStyle(
fontWeight: FontWeight.w700,
fontSize: 5 * _deviceBlockSize,
),
textInputAction: TextInputAction.done,
onFieldSubmitted: (_) {
_sendRePass();
},
keyboardType: TextInputType.visiblePassword,
),
SizedBox(height: 40),
Row(
children: <Widget>[
InkWell(
onTap: () => _sendRePass(),
child: Container(
width: 88 * _deviceBlockSize,
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.black,
borderRadius:
BorderRadius.circular(7),
),
child: Text(
'Save New Password',
style: TextStyle(
color: Colors.white,
fontSize: 5 * _deviceBlockSize,
),
textAlign: TextAlign.center,
),
),
),
Spacer(),
],
),
SizedBox(height: 10),
],
),
),
],
),
)
: ConnectionErrorBox(),
selector: (_, connectivity) => connectivity.conStatus,
)),
);
}
}
+2 -1
View File
@@ -372,7 +372,8 @@ class SelectionItem extends StatelessWidget {
style: TextStyle(
color: firstLineColor,
fontSize: 5 * _deviceBlockSize,
letterSpacing: 3.5,
// letterSpacing: 3.5,
fontWeight: FontWeight.w700,
),
),
Text(
+26 -4
View File
@@ -7,8 +7,10 @@ import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:provider/provider.dart';
import '../config/colors.dart';
import '../config/routes.dart';
import '../providers/auth.dart';
import 'home_screen.dart';
class MyInfoScreen extends StatefulWidget {
// static const route = '/MyInfoScreenRoute';
@@ -52,7 +54,7 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
appBar: AppBar(
titleSpacing: -10,
title: Text(
'Dashboard',
'Home',
style: TextStyle(
color: Colors.white,
),
@@ -131,8 +133,28 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
icon: FontAwesomeIcons.envelope,
inputType: TextInputType.emailAddress,
),
SizedBox(
height: 40,
SizedBox(height: 20),
SelectionItem(
firstLine: 'CHANGE PASSWORD',
secondLine: 'Set a new password',
firstLineColor: Colors.black,
backgroundColor: kLightGreyBackground,
onTap: () {
Navigator.of(context)
.popAndPushNamed(Routes.rePassScreen);
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return Consumer<Auth>(
// builder: (ctx, auth, _) {
// return MyInfoScreen();
// },
// );
// },
// ),
// )
},
),
Consumer<Auth>(builder: (context, auth, _) {
return InkWell(
@@ -140,7 +162,7 @@ class _MyInfoScreenState extends State<MyInfoScreen> {
padding: EdgeInsets.symmetric(
horizontal: 60, vertical: 10),
margin: EdgeInsets.only(
top: 50, bottom: 20),
top: 20, bottom: 20),
width: double.infinity,
decoration: BoxDecoration(
color: Colors.black,
+9 -4
View File
@@ -82,7 +82,8 @@ class Auth with ChangeNotifier {
}
}
Future<String> sendRePass(String password, String token) async {
Future<String> sendRePass(
String password, String passwordConfirmation, String token) async {
print(password);
print(token);
@@ -90,9 +91,12 @@ class Auth with ChangeNotifier {
Uri.parse(Url.sendResetPass),
body: {
'password': password,
'password_confirmation': password,
'password_confirmation': passwordConfirmation,
},
headers: {
'Authorization': User.token,
// 'X-Requested-With': 'XMLHttpRequest',
},
headers: {'Authorization': token, 'X-Requested-With': 'XMLHttpRequest'},
// headers: {'X-Requested-With': 'XMLHttpRequest'},
);
final responseData = json.decode(response.body);
@@ -102,7 +106,8 @@ class Auth with ChangeNotifier {
// return 'Done';
// }
print(responseData);
if (responseData['status'] == 'Success') {
if (responseData['status'] == 'Success' &&
responseData['message'] == 'Success Change Password') {
return 'done';
} else {
return 'error';