forgot password & change password enhancements.

development
Sikander Saleem 4 years ago
parent 5d4dfc529e
commit f20890b2b1

@ -52,9 +52,9 @@ class UserApiClient {
return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams); return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams);
} }
Future<GeneralResponseModel> updatePassword(String _email, int _otp, String _password) async { Future<GeneralResponseModel> updatePassword(String _email, String _currentPassword, String _password) async {
String url = "${ApiConsts.user}MobileUpdatePassword"; String url = "${ApiConsts.user}MobileChangePassword";
var postParams = {"email": _email, "opt": _otp, "newPassword": _password, "confirmPassword": _password}; var postParams = {"email": _email, "oldPassword": _currentPassword, "newPassword": _password, "confirmPassword": _password};
return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams); return await ApiClient().postJsonForObject((json) => GeneralResponseModel.fromJson(json), url, postParams);
} }

@ -33,6 +33,8 @@ class AppState {
String get token => _authenticationUser?.result?.data?.token; String get token => _authenticationUser?.result?.data?.token;
String get userEmail => _authenticationUser?.result?.data?.email;
void setAuthenticationModel(AuthenticationUserModel _authenticationUser) { void setAuthenticationModel(AuthenticationUserModel _authenticationUser) {
this._authenticationUser = _authenticationUser; this._authenticationUser = _authenticationUser;
} }

@ -1,7 +1,7 @@
class ApiConsts { class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server //static String baseUrl = "http://10.200.204.20:2801/"; // Local server
static String baseUrl = "http://20.203.25.82"; // production server static String baseUrl = "http://20.203.25.82"; // production server
// static String baseUrlServices = baseUrl + "/services/"; // production server //static String baseUrlServices = baseUrl + "/services/"; // production server
static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String authentication = baseUrlServices + "api/Authentication/"; static String authentication = baseUrlServices + "api/Authentication/";
static String tangheemUsers = baseUrlServices + "api/TangheemUsers/"; static String tangheemUsers = baseUrlServices + "api/TangheemUsers/";

@ -2,14 +2,17 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart'; import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/api/user_api_client.dart';
import 'package:tangheem/app_state/app_state.dart'; import 'package:tangheem/app_state/app_state.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/consts.dart'; import 'package:tangheem/classes/consts.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/navigation_model.dart'; import 'package:tangheem/models/navigation_model.dart';
import 'package:tangheem/models/quick_links_model.dart'; import 'package:tangheem/models/quick_links_model.dart';
import 'package:tangheem/ui/dialogs/change_password_dialog.dart';
import 'package:tangheem/ui/screens/bookmark_screen.dart'; import 'package:tangheem/ui/screens/bookmark_screen.dart';
import 'package:tangheem/ui/screens/content_info_screen.dart'; import 'package:tangheem/ui/screens/content_info_screen.dart';
import 'package:tangheem/ui/screens/forgot_password_screen.dart';
import 'package:tangheem/ui/screens/login_screen.dart'; import 'package:tangheem/ui/screens/login_screen.dart';
import 'package:tangheem/ui/screens/pdf_viewer_screen.dart'; import 'package:tangheem/ui/screens/pdf_viewer_screen.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
@ -146,6 +149,21 @@ class _CommonAppbarState extends State<CommonAppbar> {
); );
} }
void updatePassword(String email, String oldPassword, String password) async {
Utils.showLoading(context);
try {
await UserApiClient().updatePassword(email, oldPassword, password);
} catch (ex) {
Utils.handleException(ex, null);
Utils.hideLoading(context);
return;
} finally {
Utils.hideLoading(context);
}
Navigator.pop(context);
Utils.showToast("تم تغيير كلمة المرور بنجاح");
}
Widget drawerView() { Widget drawerView() {
var height = MediaQuery.of(context).padding.top; var height = MediaQuery.of(context).padding.top;
return Drawer( return Drawer(
@ -267,6 +285,37 @@ class _CommonAppbarState extends State<CommonAppbar> {
} }
Navigator.pushNamed(context, LoginScreen.routeName); Navigator.pushNamed(context, LoginScreen.routeName);
}), }),
if (AppState().isUserLogin)
Expanded(
child: PopupMenuButton(
padding: EdgeInsets.fromLTRB(0, 0, 0, 0),
onSelected: (int index) {
Navigator.pop(context);
Future.delayed(Duration(milliseconds: 200), () {
showDialog(
context: context,
barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8),
builder: (BuildContext context) => ChangePasswordDialog(
onPassword: (oldPassword, password) => updatePassword(AppState().userEmail, oldPassword, password),
),
);
});
},
icon: Icon(Icons.settings, color: ColorConsts.textGrey1),
itemBuilder: (_) => <PopupMenuItem<int>>[
PopupMenuItem(
value: 1,
padding: EdgeInsets.fromLTRB(0, 0, 0, 0),
height: 16,
child: Center(
child: Text(
'تغيير كلمة المرور',
style: TextStyle(color: ColorConsts.primaryBlack, fontSize: 12),
),
),
),
]),
),
], ],
), ),
), ),
@ -277,8 +326,9 @@ class _CommonAppbarState extends State<CommonAppbar> {
child: Row( child: Row(
children: [ children: [
for (QuickLinksData _quickLink in quickLinks) for (QuickLinksData _quickLink in quickLinks)
// commonIconButton(ApiConsts.baseUrl + _quickLink.exposeFilePath, () { for live produciton server commonIconButton(ApiConsts.baseUrl + _quickLink.exposeFilePath, () {
commonIconButton( _quickLink.exposeFilePath, () { //for live production server
// commonIconButton( _quickLink.exposeFilePath, () {
_launchURL(_quickLink.imageUrl); _launchURL(_quickLink.imageUrl);
}, size: 35, isAsset: false), }, size: 35, isAsset: false),
], ],

@ -6,7 +6,7 @@ import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/widgets/common_textfield_widget.dart'; import 'package:tangheem/widgets/common_textfield_widget.dart';
class ChangePasswordDialog extends StatefulWidget { class ChangePasswordDialog extends StatefulWidget {
final Function(String) onPassword; final Function(String, String) onPassword;
ChangePasswordDialog({Key key, this.onPassword}) : super(key: key); ChangePasswordDialog({Key key, this.onPassword}) : super(key: key);
@ -17,6 +17,7 @@ class ChangePasswordDialog extends StatefulWidget {
} }
class _ChangePasswordDialogState extends State<ChangePasswordDialog> { class _ChangePasswordDialogState extends State<ChangePasswordDialog> {
final TextEditingController _currentPasswordController = TextEditingController();
final TextEditingController _passwordController = TextEditingController(); final TextEditingController _passwordController = TextEditingController();
final TextEditingController _confirmPasswordController = TextEditingController(); final TextEditingController _confirmPasswordController = TextEditingController();
@ -57,6 +58,8 @@ class _ChangePasswordDialogState extends State<ChangePasswordDialog> {
style: TextStyle(color: Colors.white, fontSize: 22), style: TextStyle(color: Colors.white, fontSize: 22),
), ),
SizedBox(height: 16), SizedBox(height: 16),
CommonTextFieldWidget(hint: "كلمة المرور الحالية", controller: _currentPasswordController, prefixIcon: "assets/icons/password.svg"),
SizedBox(height: 8),
CommonTextFieldWidget(hint: "كلمة المرور الجديدة", controller: _passwordController, prefixIcon: "assets/icons/password.svg"), CommonTextFieldWidget(hint: "كلمة المرور الجديدة", controller: _passwordController, prefixIcon: "assets/icons/password.svg"),
SizedBox(height: 8), SizedBox(height: 8),
CommonTextFieldWidget(hint: "تأكيد كلمة المرور الجديدة", controller: _confirmPasswordController, prefixIcon: "assets/icons/password.svg"), CommonTextFieldWidget(hint: "تأكيد كلمة المرور الجديدة", controller: _confirmPasswordController, prefixIcon: "assets/icons/password.svg"),
@ -66,6 +69,10 @@ class _ChangePasswordDialogState extends State<ChangePasswordDialog> {
height: 40, height: 40,
child: TextButton( child: TextButton(
onPressed: () { onPressed: () {
if (_currentPasswordController.text.length < 1) {
Utils.showToast("يرجى إاخال كلمة المرور");
return;
}
if (_passwordController.text.length < 1) { if (_passwordController.text.length < 1) {
Utils.showToast("يرجى إاخال كلمة المرور"); Utils.showToast("يرجى إاخال كلمة المرور");
return; return;
@ -78,7 +85,7 @@ class _ChangePasswordDialogState extends State<ChangePasswordDialog> {
Utils.showToast("خطأ في تطابق كلمات المرور"); Utils.showToast("خطأ في تطابق كلمات المرور");
return; return;
} }
widget.onPassword(_passwordController.text); widget.onPassword(_currentPasswordController.text, _passwordController.text);
}, },
style: TextButton.styleFrom( style: TextButton.styleFrom(
primary: Colors.white, primary: Colors.white,

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart'; import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/consts.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/content_info_model.dart'; import 'package:tangheem/models/content_info_model.dart';
import 'package:tangheem/ui/misc/no_data_ui.dart'; import 'package:tangheem/ui/misc/no_data_ui.dart';
@ -63,7 +64,7 @@ class _ContentInfoScreenState extends State<ContentInfoScreen> {
? null ? null
: DecorationImage( : DecorationImage(
fit: BoxFit.cover, fit: BoxFit.cover,
image: NetworkImage(contentList.elementAt(index).exposeFilePath), image: NetworkImage(ApiConsts.baseUrl +contentList.elementAt(index).exposeFilePath),
), ),
borderRadius: BorderRadius.all( borderRadius: BorderRadius.all(
Radius.circular(12.0), Radius.circular(12.0),

@ -36,7 +36,7 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
await UserApiClient().forgotPassword(email); await UserApiClient().forgotPassword(email);
Utils.showToast("تم إرسال OTP"); Utils.showToast("تم إرسال الرابط إلى عنوان بريدك الإلكتروني ، يرجى تعيين كلمة مرور جديدة بالنقر فوق هذا الرابط .");
} catch (ex) { } catch (ex) {
Utils.handleException(ex, null); Utils.handleException(ex, null);
Utils.hideLoading(context); Utils.hideLoading(context);
@ -44,7 +44,7 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
} finally { } finally {
Utils.hideLoading(context); Utils.hideLoading(context);
} }
getOTP(email); //getOTP(email);
} }
void verifyOTP(String email, int otp) async { void verifyOTP(String email, int otp) async {
@ -59,13 +59,13 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
Utils.hideLoading(context); Utils.hideLoading(context);
} }
Navigator.pop(context); Navigator.pop(context);
changePassword(email, otp); //changePassword(email, otp);
} }
void updatePassword(String email, int otp, String password) async { void updatePassword(String email, int otp, String password) async {
Utils.showLoading(context); Utils.showLoading(context);
try { try {
await UserApiClient().updatePassword(email, otp, password); //await UserApiClient().updatePassword(email, otp, password);
} catch (ex) { } catch (ex) {
Utils.handleException(ex, null); Utils.handleException(ex, null);
Utils.hideLoading(context); Utils.hideLoading(context);
@ -152,23 +152,23 @@ class _ForgotPasswordScreenState extends State<ForgotPasswordScreen> {
); );
} }
void getOTP(String email) { // void getOTP(String email) {
showDialog( // showDialog(
context: context, // context: context,
barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8), // barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8),
builder: (BuildContext context) => OTPDialog( // builder: (BuildContext context) => OTPDialog(
onOTP: (otp) => verifyOTP(email, otp), // onOTP: (otp) => verifyOTP(email, otp),
), // ),
); // );
} // }
//
void changePassword(String email, int otp) { // void changePassword(String email, int otp) {
showDialog( // showDialog(
context: context, // context: context,
barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8), // barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8),
builder: (BuildContext context) => ChangePasswordDialog( // builder: (BuildContext context) => ChangePasswordDialog(
onPassword: (password) => updatePassword(email, otp, password), // onPassword: (password) => updatePassword(email, otp, password),
), // ),
); // );
} // }
} }

@ -181,7 +181,7 @@ class _HomeScreenState extends State<HomeScreen> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
"موسوعة الأداء القرآني", "موسوعة النبر و التنغيم في الأداء القرآني",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: ColorConsts.primaryBlue, height: 1), style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: ColorConsts.primaryBlue, height: 1),
), ),
SizedBox(height: 4), SizedBox(height: 4),
@ -203,8 +203,8 @@ class _HomeScreenState extends State<HomeScreen> {
builder: (context, value, child) { builder: (context, value, child) {
return CommonDropDownButton(_selectedTangheemType, hintText: "اختر الأسلوب اللغوي", list: value, onSelect: (index) { return CommonDropDownButton(_selectedTangheemType, hintText: "اختر الأسلوب اللغوي", list: value, onSelect: (index) {
if (_selectedTangheemType != index) { if (_selectedTangheemType != index) {
setState((){ setState(() {
_selectedSurah = -1; _selectedSurah = -1;
_selectedTangheemType = index; _selectedTangheemType = index;
}); });
if (_selectedSurah >= 0) { if (_selectedSurah >= 0) {

@ -562,7 +562,7 @@ class _QuranScreenState extends State<QuranScreen> {
onTap: () async { onTap: () async {
Navigator.pop(context); Navigator.pop(context);
List<AyatTangheemTypeMappedData> list = []; List<AyatTangheemTypeMappedData> list = [];
list = _ayatTangheemTypeMapped?.data?.where((element) => int.parse(element.ayahNos.split(",")[0]) == _selectedAyaForBookmark.ayahID)?.toList() ?? []; list = _ayatTangheemTypeMapped?.data?.where((element) => int.parse(element.ayahNos.split(",").last) == _selectedAyaForBookmark.ayahID)?.toList() ?? [];
if (list.isEmpty) { if (list.isEmpty) {
Utils.showToast("لا توجد أساليب تنغيم في هذه الآية"); Utils.showToast("لا توجد أساليب تنغيم في هذه الآية");
return; return;

@ -584,32 +584,33 @@ class _TangheemDetailScreenState extends State<TangheemDetailScreen> {
), ),
), ),
Container(width: double.infinity, height: 4, color: Colors.white), Container(width: double.infinity, height: 4, color: Colors.white),
Container( if ((property?.propertyValue ?? "").length > 0)
color: ColorConsts.secondaryWhite, Container(
padding: EdgeInsets.all(4), color: ColorConsts.secondaryWhite,
child: Container( padding: EdgeInsets.all(4),
color: Colors.white, child: Container(
padding: EdgeInsets.only(left: 2, right: 4), color: Colors.white,
width: double.infinity, padding: EdgeInsets.only(left: 2, right: 4),
child: Html( width: double.infinity,
data: property.propertyValue ?? "", child: Html(
style: { data: property.propertyValue ?? "",
'html': Style(textAlign: TextAlign.left), style: {
}, 'html': Style(textAlign: TextAlign.left),
), },
),
// Text( // Text(
// property.propertyValue ?? "", // property.propertyValue ?? "",
// maxLines: 1, // maxLines: 1,
// style: TextStyle( // style: TextStyle(
// fontSize: 12, // fontSize: 12,
// color: Color( // color: Color(
// Utils.stringToHex(property.textColor), // Utils.stringToHex(property.textColor),
// ), // ),
// ), // ),
// ), // ),
),
), ),
),
], ],
), ),
), ),

@ -113,7 +113,7 @@ class _TangheemScreenState extends State<TangheemScreen> {
style: TextStyle(fontSize: 12, color: ColorConsts.primaryBlue), style: TextStyle(fontSize: 12, color: ColorConsts.primaryBlue),
), ),
Text( Text(
" ${_dataList[index].ayatNumberInSurahs.split(",").toList().reversed.join(",")}", " ${_dataList[index].ayatNumberInSurahs}",
style: TextStyle(fontSize: 14, fontFamily: "BArabics", color: ColorConsts.secondaryOrange), style: TextStyle(fontSize: 14, fontFamily: "BArabics", color: ColorConsts.secondaryOrange),
), ),
], ],

Loading…
Cancel
Save