From 0a06ad9fe3992b750be24ebf27a5cb6821cd7fad Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 26 Feb 2025 10:34:30 +0300 Subject: [PATCH] privacy policy check added. --- lib/new_views/pages/login_page.dart | 180 ++++++---------------------- 1 file changed, 38 insertions(+), 142 deletions(-) diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index d572344b..53ac8d78 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -1,143 +1,4 @@ -//older code... - -// import 'package:flutter/material.dart'; -// import 'package:fluttertoast/fluttertoast.dart'; -// import 'package:provider/provider.dart'; -// import 'package:shared_preferences/shared_preferences.dart'; -// import 'package:test_sa/controllers/providers/settings/app_settings.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/pages/land_page/land_page.dart'; -// -// import '../../controllers/providers/api/user_provider.dart'; -// import '../../controllers/providers/settings/setting_provider.dart'; -// import '../../controllers/validator/validator.dart'; -// import '../../models/user.dart'; -// import '../common_widgets/app_filled_button.dart'; -// import '../common_widgets/app_text_form_field.dart'; -// -// class LoginPage extends StatefulWidget { -// static const String routeName = "/login_page"; -// -// const LoginPage({Key? key}) : super(key: key); -// -// @override -// State createState() => _LoginPageState(); -// } -// -// class _LoginPageState extends State { -// final User _user = User(); -// UserProvider _userProvider; -// SettingProvider _settingProvider; -// final GlobalKey _formKey = GlobalKey(); -// -// bool rememberMe = false; -// -// @override -// Widget build(BuildContext context) { -// _userProvider = Provider.of(context); -// if (_settingProvider == null) { -// _settingProvider = Provider.of(context); -// rememberMe = _settingProvider.rememberMe; -// if (rememberMe) { -// _user.userName = _settingProvider.username; -// _user.password = _settingProvider.password; -// } -// } -// -// return Form( -// key: _formKey, -// child: Scaffold( -// body: Column( -// children: [ -// SingleChildScrollView( -// child: Column( -// mainAxisAlignment: MainAxisAlignment.center, -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Hero(tag: "logo", child: "logo".toSvgAsset(height: 64)), -// 64.height, -// context.translation.login.heading2(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.primary50 : AppColor.neutral50), -// context.translation.enterCredsToLogin.heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), -// 32.height, -// AppTextFormField( -// initialValue: _user?.userName, -// validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, -// labelText: context.translation.username, -// textInputType: TextInputType.text, -// onSaved: (value) { -// _user.userName = value; -// }, -// ), -// 16.height, -// AppTextFormField( -// initialValue: _user?.password, -// labelText: context.translation.password, -// obscureText: true, -// validator: (value) => Validator.isValidPassword(value) -// ? null -// : value.isEmpty -// ? context.translation.requiredField -// : context.translation.passwordLengthMessage, -// onSaved: (value) { -// _user.password = value; -// }, -// ), -// 8.height, -// Row( -// children: [ -// Checkbox( -// value: rememberMe, -// activeColor: AppColor.blueStatus(context), -// onChanged: (value) { -// setState(() { -// rememberMe = value; -// }); -// }), -// "Remember Me".bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral50).expanded, -// ], -// ), -// 16.height, -// Align( -// alignment: AlignmentDirectional.centerEnd, -// child: InkWell( -// onTap: () { -// /// TODO [zaid] : push to another screen -// }, -// child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary50, fontWeight: FontWeight.w500), -// ), -// ), -// ], -// ), -// ).center.expanded, -// AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: _login), -// ], -// ).paddingOnly(start: 16, end: 16, bottom: 24, top: 24), -// ), -// ); -// } -// -// Future _login() async { -// if (!_formKey.currentState.validate()) return; -// _formKey.currentState.save(); -// int status = await _userProvider.login(context: context, user: _user); -// if (status >= 200 && status < 300 && _userProvider.user.isAuthenticated ?? false) { -// await _settingProvider.setUser(_userProvider.user); -// (await SharedPreferences.getInstance()).remove(ASettings.localAuth); -// await _settingProvider.setRememberMe(_user.userName, _user.password, rememberMe); -// -// /// The below line for the new design -// // Navigator.pushNamed(context, LandPage.routeName); -// Navigator.pushNamed(context, LandPage.routeName); -// } else { -// Fluttertoast.showToast(msg: _userProvider.user?.message ?? context.translation.failedToCompleteRequest); -// } -// } -// } - +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; @@ -147,12 +8,14 @@ import 'package:test_sa/controllers/notification/firebase_notification_manger.da import 'package:test_sa/controllers/providers/settings/app_settings.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/new_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/forget_passwod_verify_otp.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; +import 'package:url_launcher/url_launcher.dart'; import '../../controllers/providers/api/user_provider.dart'; import '../../controllers/providers/settings/setting_provider.dart'; @@ -178,6 +41,7 @@ class _LoginPageState extends State { TextEditingController userNameController = TextEditingController(); bool _passwordVisible = false; bool rememberMe = false; + bool privacyPolicyChecked = false; @override void initState() { @@ -228,7 +92,6 @@ class _LoginPageState extends State { context.translation.signInToYour.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), context.translation.account.customHeadingText(context).custom(color: Colors.white, fontSize: 27, fontWeight: FontWeight.w500), 15.height, - // context.translation.letSignInToAccount.customHeadingText(context).custom(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 12), ], ), ), @@ -320,7 +183,35 @@ class _LoginPageState extends State { "Remember Me".bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral50).expanded, ], ), - 50.height, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Checkbox( + value: privacyPolicyChecked, + activeColor: AppColor.blueStatus(context), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + onChanged: (value) { + if (value == null) return; + privacyPolicyChecked = value; + setState(() {}); + }), + RichText( + text: TextSpan(text: "I have read and agree to ", style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.primary50 : AppColor.neutral50), children: [ + TextSpan( + text: "Privacy Policy", + style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context), decoration: TextDecoration.underline), + recognizer: TapGestureRecognizer() + ..onTap = () async { + Uri uri = Uri.parse("https://cloudsolutions.com.sa/en/privacy-policy"); + try { + launchUrl(uri); + } catch (ex) {} + }), + ]), + ).expanded, + ], + ), + 16.height, AppFilledButton(label: context.translation.signIn, buttonColor: AppColor.primary10, maxWidth: true, onPressed: _login), ], ), @@ -333,6 +224,11 @@ class _LoginPageState extends State { Future _login() async { if (!_formKey.currentState!.validate()) return; + + if (privacyPolicyChecked == false) { + "You must agree privacy policy".showToast; + return; + } _formKey.currentState!.save(); int status = await _userProvider.login(context: context, user: _user); if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) {