//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/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test_sa/app_strings/app_asset.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 'package:test_sa/views/widgets/buttons/rounded_back_button.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( backgroundColor: AppColor.background(context), body: SingleChildScrollView( child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( width: double.infinity, height: 293.toScreenHeight, padding: EdgeInsets.only(left: 16.toScreenWidth), decoration: BoxDecoration( image: DecorationImage( image: AssetImage(AppAsset.loginTopBg), fit: BoxFit.cover, // Adjusts the image to cover the entire container ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( height: 146.toScreenHeight, ), // RoundedBackButton( // icon: Icons.arrow_back_ios, // onPressed: () { // ///There is no previous screen // }, // backgroundColor: context.isDark ? AppColor.primary80 : AppColor.primary80), context.translation.signInToYour.customHeadingText(context).custom( color: AppColor.white20, ), context.translation.account.customHeadingText(context).custom( color: AppColor.white20, ), 25.height, context.translation.letSignInToAccount.customHeadingText(context).custom( color: AppColor.white20, fontWeight: FontWeight.w500, fontSize: 12, ), ], ), ), SizedBox(height: 47.toScreenHeight,), Padding( padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ AppTextFormField( initialValue: _user?.userName, //TODO add the color according to theme.... backgroundColor: AppColor.white20, validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, labelText: context.translation.username, textInputType: TextInputType.text, showWithoutDecoration: true, contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), onSaved: (value) { _user.userName = value; }, ), 18.height, AppTextFormField( initialValue: _user?.password, showWithoutDecoration: true, labelText: context.translation.password, //TODO add the color according to theme.... backgroundColor: AppColor.white20, contentPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 20.toScreenHeight), obscureText: true, validator: (value) => Validator.isValidPassword(value) ? null : value.isEmpty ? context.translation.requiredField : context.translation.passwordLengthMessage, onSaved: (value) { _user.password = value; }, ), 16.height, Align( alignment: AlignmentDirectional.centerEnd, child: InkWell( onTap: () { /// TODO [zaid] : push to another screen }, child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary10, fontWeight: FontWeight.w500), ), ), 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, ], ), 50.height, AppFilledButton(label: context.translation.signIn,buttonColor: AppColor.primary10, maxWidth: true, onPressed: _login), ], ), ), ], ), )), ); } 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); } } }