import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final TextEditingController _mobileController = TextEditingController(); final _formKey = GlobalKey(); @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; return Scaffold( resizeToAvoidBottomInset: true, backgroundColor: Colors.blue, body: Stack( children: [ /// 🔹 Background image Container( width: double.infinity, height: double.infinity, decoration: const BoxDecoration( image: DecorationImage( image: AssetImage("assets/images/background_png.png"), fit: BoxFit.cover, ), ), ), /// 🔹 Main content (scrollable & keyboard-safe) SafeArea( child: LayoutBuilder( builder: (context, constraints) { return SingleChildScrollView( padding: EdgeInsets.only( bottom: MediaQuery.of(context).viewInsets.bottom, // moves up with keyboard ), child: ConstrainedBox( constraints: BoxConstraints( minHeight: constraints.maxHeight, ), child: IntrinsicHeight( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const SizedBox(height: 80), /// 🔹 Logo Row( mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox(width: 20,), SvgPicture.asset( "assets/svg/genesis_logo_2io.svg", height: 48, color: Colors.white, ), ] ), const SizedBox(height: 12), const Spacer(), Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 26, vertical: 12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "Login to", style: TextStyle( fontSize: 48, fontFamily: "PoppinsLight", fontWeight: FontWeight.w100, color: Colors.white, ), ), Text( "continue", style: TextStyle( fontSize: 48, fontWeight: FontWeight.w500, color: Colors.white, ), ), ], ), ), ], ), const SizedBox(height: 20), /// 🔹 Bottom Sheet style area Container( width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 30), decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(24), topRight: Radius.circular(24), ), ), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ const Text( "Enter Registered Mobile No.", style: TextStyle( fontSize: 14, color: Colors.black54, fontWeight: FontWeight.w500, ), ), const SizedBox(height: 10), /// 🔹 Mobile Field TextFormField( controller: _mobileController, keyboardType: TextInputType.phone, maxLength: 10, decoration: InputDecoration( hintText: "Enter Mobile No.", counterText: "", contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14), border: OutlineInputBorder( borderRadius: BorderRadius.circular(50), borderSide: BorderSide(color: Colors.grey.shade300), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(50), borderSide: const BorderSide(color: Colors.blue, width: 1.2), ), filled: true, fillColor: Colors.grey.shade100, ), validator: (value) { if (value == null || value.isEmpty) { return "Please enter mobile number"; } else if (value.length != 10) { return "Enter valid 10-digit number"; } return null; }, ), const SizedBox(height: 20), /// 🔹 Continue Button (Always visible) SizedBox( width: double.infinity, height: 50, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF0086F1), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(30), ), ), onPressed: () { if (_formKey.currentState!.validate()) { FocusScope.of(context).unfocus(); // TODO: Add API call here } }, child: const Text( "Continue", style: TextStyle( fontSize: 16, color: Colors.white, fontWeight: FontWeight.w600, ), ), ), ), ], ), ), ), ], ), ), ), ); }, ), ), ], ), ); } }