swipe improvements.

main_design2.1
Sikander Saleem 1 year ago
parent 9c4151a0fc
commit a977244034

@ -1,7 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/new_views/swipe_module/dialoge/confirm_dialog.dart';
import '../controllers/providers/settings/setting_provider.dart';
@ -13,4 +13,12 @@ extension BuildContextExtension on BuildContext {
bool get isDark => Provider.of<SettingProvider>(this).theme == "dark";
bool get isAr => Provider.of<SettingProvider>(this).language == "ar";
void showConfirmDialog(String message, {String title, VoidCallback onTap}) => showDialog(
context: this,
builder: (BuildContext cxt) => ConfirmDialog(
message: message,
onTap: onTap,
),
);
}

@ -128,6 +128,7 @@
// }
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:pinput/pinput.dart';
import 'package:provider/provider.dart';
@ -136,16 +137,16 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/forget_password_module/reset_password_view.dart';
class ForgetPasswordVerifyOtpView extends StatefulWidget {
static const String routeName = "/verify_otp";
String employeeId = '';
ForgetPasswordVerifyOtpView({Key key,this.employeeId}) : super(key: key);
ForgetPasswordVerifyOtpView({Key key, this.employeeId}) : super(key: key);
@override
State<ForgetPasswordVerifyOtpView> createState() => _ForgetPasswordVerifyOtpViewState();
@ -153,7 +154,7 @@ class ForgetPasswordVerifyOtpView extends StatefulWidget {
class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpView> {
String otp = '';
Timer _timer;
Timer _timer;
int _remainingSeconds = 180; // 3 minutes in seconds
@override
@ -225,9 +226,9 @@ class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpVie
),
),
onCompleted: (pin) {
setState(() {
otp = pin;
});
// setState(() {
otp = pin;
//});
verifyOtp();
},
),
@ -239,22 +240,20 @@ class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpVie
InkWell(
onTap: _remainingSeconds == 0
? () async {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
String employeeId = widget.employeeId;
GeneralResponseModel response = await _userProvider.sendForgetPasswordOtp(
context: context,
employeeId: employeeId,
);
print('Response of send OTP: ${response.toJson()}');
// Restart the timer
_startTimer();
}
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
String employeeId = widget.employeeId;
GeneralResponseModel response = await _userProvider.sendForgetPasswordOtp(
context: context,
employeeId: employeeId,
);
print('Response of send OTP: ${response.toJson()}');
_startTimer();
}
: null,
child: Text(
'Resend',
style: TextStyle(
color: _remainingSeconds == 0 ? AppColor.primary40 : AppColor.white10,
color: _remainingSeconds == 0 ? AppColor.blueStatus(context) : AppColor.white10,
fontWeight: FontWeight.w500,
fontSize: 16.toScreenWidth,
decorationColor: AppColor.primary30,
@ -264,8 +263,6 @@ class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpVie
),
7.width,
'$minutes:$seconds'.bodyText(context).custom(color: AppColor.neutral10),
],
),
],
@ -274,18 +271,19 @@ class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpVie
AppFilledButton(
label: context.translation.verify,
maxWidth: true,
onPressed:verifyOtp,
onPressed: verifyOtp,
),
],
).paddingOnly(start: 20, end: 20, bottom: 16),
);
}
void verifyOtp() async{
void verifyOtp() async {
if (otp.isNotEmpty) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
GeneralResponseModel generalResponseModel = await _userProvider.forgetPasswordValidateOtp(
context: context,
employeeId:widget.employeeId,
employeeId: widget.employeeId,
otp: otp,
);
if (generalResponseModel.isSuccess) {
@ -294,7 +292,3 @@ class _ForgetPasswordVerifyOtpViewState extends State<ForgetPasswordVerifyOtpVie
}
}
}

@ -5,13 +5,13 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart';
import 'package:test_sa/new_views/forget_password_module/models/update_password.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart';
import 'package:test_sa/new_views/forget_password_module/models/update_password.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
import '../../controllers/providers/api/user_provider.dart';
import '../../controllers/validator/validator.dart';
@ -26,8 +26,8 @@ class ResetPasswordView extends StatefulWidget {
class _ResetPasswordViewState extends State<ResetPasswordView> {
UserProvider _userProvider;
bool _passwordVisible =false;
bool _confirmPasswordVisible =false;
bool _passwordVisible = false;
bool _confirmPasswordVisible = false;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@ -44,11 +44,9 @@ class _ResetPasswordViewState extends State<ResetPasswordView> {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
context.translation.resetPassword.heading2(context).custom(color: AppColor.neutral80, fontWeight: FontWeight.w500),
8.height,
context.translation.pleaseEnterTheNewPassword.bodyText2(context).custom(color: AppColor.white20, fontWeight: FontWeight.w500),
32.height,
AppTextFormField(
initialValue: _userProvider.newPassword,
@ -59,9 +57,7 @@ class _ResetPasswordViewState extends State<ResetPasswordView> {
suffixIcon: IconButton(
icon: Icon(
// Based on passwordVisible state choose the icon
_passwordVisible
? Icons.visibility
: Icons.visibility_off,
_passwordVisible ? Icons.visibility : Icons.visibility_off,
color: context.isDark ? AppColor.neutral10 : AppColor.neutral20,
),
onPressed: () {
@ -92,9 +88,7 @@ class _ResetPasswordViewState extends State<ResetPasswordView> {
suffixIcon: IconButton(
icon: Icon(
// Based on passwordVisible state choose the icon
_confirmPasswordVisible
? Icons.visibility
: Icons.visibility_off,
_confirmPasswordVisible ? Icons.visibility : Icons.visibility_off,
color: context.isDark ? AppColor.neutral10 : AppColor.neutral20,
),
onPressed: () {
@ -110,7 +104,6 @@ class _ResetPasswordViewState extends State<ResetPasswordView> {
],
),
).center.expanded,
],
).paddingOnly(start: 16, end: 16, bottom: 24, top: 24),
),
@ -127,8 +120,8 @@ class _ResetPasswordViewState extends State<ResetPasswordView> {
password: _userProvider.newPassword, confirmPassword: _userProvider.confirmPassword, userId: _userProvider.verifyOtpModel.userId, token: _userProvider.verifyOtpModel.token);
GeneralResponseModel generalResponseModel = await _userProvider.updateNewPassword(context: context, updatePasswordModel: updatePasswordModel);
if (generalResponseModel.isSuccess) {
_userProvider.newPassword='';
_userProvider.confirmPassword='';
_userProvider.newPassword = '';
_userProvider.confirmPassword = '';
Navigator.of(context).pushNamedAndRemoveUntil(LoginPage.routeName, (routes) => true);
}
}

@ -1,5 +1,4 @@
import 'dart:io';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:nfc_manager/nfc_manager.dart';
@ -178,15 +177,6 @@ class _LandPageState extends State<LandPage> {
},
),
),
Visibility(
visible: !userProvider.isUserConfirmSwipe && userProvider.user != null && !userProvider.user.employeeIsHMG,
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: Container(
color: Colors.black.withOpacity(0.2), // Optional tint effect
),
),
),
if (userProvider.user != null && !userProvider.user.employeeIsHMG)
Positioned(
right: _userProvider.user.type == UsersTypes.engineer ? 20.toScreenWidth : null,
@ -213,7 +203,12 @@ class _LandPageState extends State<LandPage> {
8.height,
Text(
("${context.translation.checkIn}\n${userProvider.swipeTransactionModel != null && userProvider.swipeTransactionModel.swipeTime != null ? SwipeGeneralUtils.formatTimeOnly(userProvider.swipeTransactionModel.swipeTime) : '--:--'}"),
style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral80, fontWeight: FontWeight.w500, fontFamily: "Poppins"),
textAlign: TextAlign.center,
style: AppTextStyles.bodyText2.copyWith(
color: AppColor.neutral80,
fontWeight: FontWeight.w500,
fontFamily: "Poppins",
),
),
// (context.translation.checkIn +

@ -8,10 +8,10 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/forget_password_module/forget_passwod_verify_otp.dart';
import 'package:test_sa/new_views/forget_password_module/models/general_response_model.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import '../../controllers/providers/api/user_provider.dart';
import '../../controllers/providers/settings/setting_provider.dart';
@ -54,7 +54,7 @@ class _LoginPageState extends State<LoginPage> {
rememberMe = _settingProvider.rememberMe;
if (rememberMe) {
_user.userName = _settingProvider.username;
userNameController.text=_user.userName??'';
userNameController.text = _user.userName ?? '';
_user.password = _settingProvider.password;
}
}
@ -91,9 +91,7 @@ class _LoginPageState extends State<LoginPage> {
suffixIcon: IconButton(
icon: Icon(
// Based on passwordVisible state choose the icon
_passwordVisible
? Icons.visibility
: Icons.visibility_off,
_passwordVisible ? Icons.visibility : Icons.visibility_off,
color: context.isDark ? AppColor.neutral10 : AppColor.neutral20,
),
onPressed: () {
@ -132,17 +130,22 @@ class _LoginPageState extends State<LoginPage> {
alignment: AlignmentDirectional.centerEnd,
child: InkWell(
onTap: () async {
if(userNameController.text.isNotEmpty){
GeneralResponseModel response = await _userProvider.sendForgetPasswordOtp(context: context, employeeId: userNameController.text);
if(response.isSuccess){
Navigator.push(context, MaterialPageRoute(builder: (context)=>ForgetPasswordVerifyOtpView(employeeId:userNameController.text,)));
// Navigator.push(context, ForgetPasswordVerifyOtpView.routeName);
}else{
Fluttertoast.showToast(msg: response?.message ?? context.translation.failedToCompleteRequest);
}
}else{
Fluttertoast.showToast(msg: context.translation.employeeIdIsRequired);
}
if (userNameController.text.isNotEmpty) {
GeneralResponseModel response = await _userProvider.sendForgetPasswordOtp(context: context, employeeId: userNameController.text);
if (response.isSuccess) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ForgetPasswordVerifyOtpView(
employeeId: userNameController.text,
)));
// Navigator.push(context, ForgetPasswordVerifyOtpView.routeName);
} else {
context.showConfirmDialog(response?.message ?? context.translation.failedToCompleteRequest);
}
} else {
Fluttertoast.showToast(msg: context.translation.employeeIdIsRequired);
}
},
child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary50, fontWeight: FontWeight.w500),
),

@ -16,7 +16,6 @@ class ConfirmDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
print('message i got is $message');
return Dialog(
backgroundColor: Colors.white,
shape: const RoundedRectangleBorder(),

File diff suppressed because it is too large Load Diff

@ -2,47 +2,57 @@ import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
class SwipeSuccessView extends StatelessWidget {
static const routeName = '/swipe_success_view';
const SwipeSuccessView({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment:CrossAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
'swipe_success'.toSvgAsset(),
17.height,
'swipe_success'.toSvgAsset(height: 248, width: 248),
16.height,
context.translation.successful.heading4(context).custom(color: AppColor.neutral80),
8.height,
context.translation.youHaveSuccessfullyMarkedYourAttendance.bodyText2(context).custom(color: AppColor.white20),
context.translation.youHaveSuccessfullyMarkedYourAttendance.bodyText2(context).custom(color: AppColor.white20, align: TextAlign.center),
24.height,
AppFilledButton(
label: "Go Back",
onPressed: () {
Navigator.pop(context);
Navigator.pop(context);
},
textColor: Colors.white)
.paddingOnly(start: 24, end: 24),
],
),
).paddingAll(16),
),
);
}
}
class CircularAnimationWithProgressIndicator extends StatefulWidget {
Widget child;
CircularAnimationWithProgressIndicator({Key key, this.child}) : super(key: key);
@override
_CircularAnimationWithProgressIndicatorState createState() =>
_CircularAnimationWithProgressIndicatorState();
_CircularAnimationWithProgressIndicatorState createState() => _CircularAnimationWithProgressIndicatorState();
}
class _CircularAnimationWithProgressIndicatorState
extends State<CircularAnimationWithProgressIndicator>
with SingleTickerProviderStateMixin {
class _CircularAnimationWithProgressIndicatorState extends State<CircularAnimationWithProgressIndicator> with SingleTickerProviderStateMixin {
AnimationController _controller;
@override
void initState() {
super.initState();
@ -88,14 +98,13 @@ class _CircularAnimationWithProgressIndicatorState
),
// Static container in the center
widget.child?? const SizedBox(),
widget.child ?? const SizedBox(),
],
),
);
}
}
// ClipOval(
// child: Container(
// color: Colors.grey.withOpacity(0.2),

@ -170,21 +170,14 @@ class SwipeGeneralUtils {
static void confirmDialog(cxt, String message, {VoidCallback onTap}) {
showDialog(
context: cxt,
builder: (BuildContext cxt) => ConfirmDialog(
message: message,
onTap: onTap,
),
builder: (BuildContext cxt) => ConfirmDialog(message: message, onTap: onTap),
);
}
static void showErrorDialog({String message, @required BuildContext context}) {
showDialog(
context: context,
builder: (context) => ConfirmDialog(
message: message,
title: 'Error',
onTap: () => Navigator.pop(context),
),
builder: (context) => ConfirmDialog(message: message, title: 'Error', onTap: () => Navigator.pop(context)),
);
}
@ -399,8 +392,6 @@ class SwipeGeneralUtils {
// }
}
// general methods......
static void handleSwipeOperation({@required SwipeTypeEnum swipeType, double lat, double lang, BuildContext context}) {
switch (swipeType) {
case SwipeTypeEnum.NFC:
@ -448,7 +439,7 @@ class SwipeGeneralUtils {
if (swipeResponse.isSuccess) {
hideLoading(context);
showSuccessDialog(context: context);
Navigator.pushNamed(context, SwipeSuccessView.routeName);
} else {
hideLoading(context);
showDialog(
@ -513,7 +504,7 @@ class SwipeGeneralUtils {
if (swipeResponse.isSuccess) {
hideLoading(context);
showSuccessDialog(context: context, fromDashBoard: true);
Navigator.pushNamed(context, SwipeSuccessView.routeName);
} else {
hideLoading(context);
showErrorDialog(message: swipeResponse.message ?? "Unexpected error occurred", context: context);
@ -525,11 +516,7 @@ class SwipeGeneralUtils {
}
}
static void handleSwipe({
SwipeTypeEnum swipeType,
@required bool isEnable,
@required BuildContext context,
}) async {
static void handleSwipe({SwipeTypeEnum swipeType, @required bool isEnable, @required BuildContext context}) async {
if (!(await isGoogleServicesAvailable())) {
checkHuaweiLocationPermission(attendanceType: swipeType, context: context);
} else {
@ -606,10 +593,10 @@ class SwipeGeneralUtils {
return availableMethods;
}
static Future<void> showSwipeTypeBottomSheetSheet({@required BuildContext context, @required bool isNfcSupported}) {
static void showSwipeTypeBottomSheetSheet({@required BuildContext context, @required bool isNfcSupported}) {
UserProvider _userProvider = Provider.of<UserProvider>(context, listen: false);
return showModalBottomSheet(
showModalBottomSheet(
context: context,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
@ -636,16 +623,6 @@ class SwipeGeneralUtils {
);
}
static void showSuccessDialog({@required BuildContext context, bool fromDashBoard}) {
Navigator.pushReplacementNamed(context, SwipeSuccessView.routeName);
// showMDialog(
// context,
// backgroundColor: Colors.transparent,
// isDismissable: true,
// child: SuccessDialog(fromDashBoard),
// );
}
static void readNFc({Function(String) onRead}) {
NfcManager.instance.startSession(onDiscovered: (NfcTag tag) async {
MifareUltralight f;

Loading…
Cancel
Save