diff --git a/lib/pages/auth/view/forget_password_web_page.dart b/lib/pages/auth/view/forget_password_web_page.dart index 9a91178c..4f2a1110 100644 --- a/lib/pages/auth/view/forget_password_web_page.dart +++ b/lib/pages/auth/view/forget_password_web_page.dart @@ -43,11 +43,26 @@ class ForgetPasswordWebPage extends StatelessWidget { } Widget _buildForm(BuildContext context, AuthState state) { + late ScrollController _scrollController; + _scrollController = ScrollController(); + void _scrollToCenter() { + final double middlePosition = _scrollController.position.maxScrollExtent / 2; + _scrollController.animateTo( + middlePosition, + duration: const Duration(seconds: 1), + curve: Curves.easeInOut, + ); + } + WidgetsBinding.instance.addPostFrameCallback((_) { + _scrollToCenter(); + }); final forgetBloc = BlocProvider.of(context); Size size = MediaQuery.of(context).size; return FirstLayer( second: Center( child: ListView( + shrinkWrap: true, + controller: _scrollController, children: [ Container( padding: EdgeInsets.all(size.width*0.02), diff --git a/lib/pages/auth/view/login_web_page.dart b/lib/pages/auth/view/login_web_page.dart index 1d92ea85..2e407e44 100644 --- a/lib/pages/auth/view/login_web_page.dart +++ b/lib/pages/auth/view/login_web_page.dart @@ -15,11 +15,18 @@ import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/pages/home/view/home_page.dart'; import 'package:syncrow_web/utils/style.dart'; -class LoginWebPage extends StatelessWidget { +class LoginWebPage extends StatefulWidget { const LoginWebPage({super.key}); + @override + State createState() => _LoginWebPageState(); +} + +class _LoginWebPageState extends State { + @override Widget build(BuildContext context) { + return Scaffold( body: BlocProvider( create: (BuildContext context) => AuthBloc(), @@ -55,9 +62,23 @@ class LoginWebPage extends StatelessWidget { Widget _buildLoginForm(BuildContext context,AuthState state) { final loginBloc = BlocProvider.of(context); Size size = MediaQuery.of(context).size; + late ScrollController _scrollController; + _scrollController = ScrollController(); + void _scrollToCenter() { + final double middlePosition = _scrollController.position.maxScrollExtent / 2; + _scrollController.animateTo( + middlePosition, + duration: const Duration(seconds: 1), + curve: Curves.easeInOut, + ); + } + WidgetsBinding.instance.addPostFrameCallback((_) { + _scrollToCenter(); + }); return FirstLayer( second: Center( child: ListView( + controller: _scrollController, shrinkWrap: true, children: [ Container( @@ -81,96 +102,96 @@ class LoginWebPage extends StatelessWidget { ), const Spacer(), Expanded( - flex: 3, - child: Container( - decoration: BoxDecoration( - color: Colors.white.withOpacity(0.1), - borderRadius: const BorderRadius.all(Radius.circular(30)), - border: Border.all(color: ColorsManager.graysColor.withOpacity(0.2))), - child: Form( - key: loginBloc.loginFormKey, - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: size.width*0.02, - vertical: size.width*0.003), - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 40), - const Text( - 'Login', - style: TextStyle( - color: Colors.white, - fontSize: 24, - fontWeight: FontWeight.bold), - ), - SizedBox(height: size.height*0.03), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - "Country/Region", - style: smallTextStyle, - ), - const SizedBox(height: 10,), - SizedBox( - child: DropdownButtonFormField( - validator:loginBloc.validateRegion , - icon: const Icon( - Icons.keyboard_arrow_down_outlined, - ), - decoration: textBoxDecoration()!.copyWith( - hintText: null,), - hint: SizedBox( - width: size.width * 0.11, - child: const Align( - alignment: Alignment.centerLeft, - child: Text( - 'Select your region/country', - textAlign: TextAlign.center, - style: TextStyle(fontSize: 14), - overflow: TextOverflow.ellipsis, - ), - ), - ), - isDense: true, - style: const TextStyle(color: Colors.black), - items:loginBloc.regions.map((String region) { - return DropdownMenuItem( - value: region, - child: Text(region), - ); - }).toList(), - onChanged: (String? value) { - print(value); - }, - ), - ) - ], - ), - const SizedBox(height: 20.0), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text("Email", - style: smallTextStyle, - ), - const SizedBox( - height: 10, - ), - SizedBox( - child: TextFormField( - validator:loginBloc.validateEmail , - controller:loginBloc.loginEmailController, - decoration: textBoxDecoration()!.copyWith(hintText: 'Enter your email'), - style: const TextStyle(color: Colors.black), - ), - ), - ], - ), + flex: 3, + child: Container( + decoration: BoxDecoration( + color: Colors.white.withOpacity(0.1), + borderRadius: const BorderRadius.all(Radius.circular(30)), + border: Border.all(color: ColorsManager.graysColor.withOpacity(0.2))), + child: Form( + key: loginBloc.loginFormKey, + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: size.width*0.02, + vertical: size.width*0.003), + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 40), + const Text( + 'Login', + style: TextStyle( + color: Colors.white, + fontSize: 24, + fontWeight: FontWeight.bold), + ), + SizedBox(height: size.height*0.03), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "Country/Region", + style: smallTextStyle, + ), + const SizedBox(height: 10,), + SizedBox( + child: DropdownButtonFormField( + validator:loginBloc.validateRegion , + icon: const Icon( + Icons.keyboard_arrow_down_outlined, + ), + decoration: textBoxDecoration()!.copyWith( + hintText: null,), + hint: SizedBox( + width: size.width * 0.11, + child: const Align( + alignment: Alignment.centerLeft, + child: Text( + 'Select your region/country', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 14), + overflow: TextOverflow.ellipsis, + ), + ), + ), + isDense: true, + style: const TextStyle(color: Colors.black), + items:loginBloc.regions.map((String region) { + return DropdownMenuItem( + value: region, + child: Text(region), + ); + }).toList(), + onChanged: (String? value) { + print(value); + }, + ), + ) + ], + ), + const SizedBox(height: 20.0), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text("Email", + style: smallTextStyle, + ), + const SizedBox( + height: 10, + ), + SizedBox( + child: TextFormField( + validator:loginBloc.validateEmail , + controller:loginBloc.loginEmailController, + decoration: textBoxDecoration()!.copyWith(hintText: 'Enter your email'), + style: const TextStyle(color: Colors.black), + ), + ), + ], + ), const SizedBox(height: 20.0), Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -254,7 +275,7 @@ class LoginWebPage extends StatelessWidget { TextSpan( text: '(Terms of Service)', style: const TextStyle( - color: Colors.black,), + color: Colors.black,), recognizer: TapGestureRecognizer() ..onTap = () { loginBloc.launchURL( @@ -304,12 +325,12 @@ class LoginWebPage extends StatelessWidget { }, ), ), - const SizedBox(height: 15.0), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ SizedBox(child: Text(loginBloc.validate, - style: const TextStyle(fontWeight: FontWeight.w700,color: ColorsManager.red ),),)],) + const SizedBox(height: 15.0), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ SizedBox(child: Text(loginBloc.validate, + style: const TextStyle(fontWeight: FontWeight.w700,color: ColorsManager.red ),),)],) ], ), ), @@ -318,7 +339,7 @@ class LoginWebPage extends StatelessWidget { const Spacer(), ], ),), - ) + ), ], ), ),