import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/auth/bloc/login_bloc.dart'; import 'package:syncrow_web/pages/auth/bloc/login_event.dart'; import 'package:syncrow_web/pages/auth/bloc/login_state.dart'; import 'package:syncrow_web/pages/home/view/home_page.dart'; class LoginPage extends StatelessWidget { const LoginPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Login'), ), body: BlocProvider( create: (context) => LoginBloc(), child: BlocConsumer( listener: (context, state) { if (state is LoginSuccess) { // Navigate to home screen after successful login Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const HomePage()), ); } else if (state is LoginFailure) { // Show error message ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(state.error), ), ); } }, builder: (context, state) { if (state is LoginLoading) { return const Center(child: CircularProgressIndicator()); } else { return _buildLoginForm(context); } }, ), ), ); } Widget _buildLoginForm(BuildContext context) { final loginBloc = BlocProvider.of(context); final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); return Center( child: Padding( padding: const EdgeInsets.all(20.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( width: MediaQuery.sizeOf(context).width * 0.4, child: TextField( controller: _usernameController, decoration: const InputDecoration( labelText: 'Username', ), ), ), const SizedBox(height: 20.0), SizedBox( width: MediaQuery.sizeOf(context).width * 0.4, child: TextField( controller: _passwordController, obscureText: true, decoration: const InputDecoration( labelText: 'Password', ), ), ), const SizedBox(height: 20.0), ElevatedButton( onPressed: () async { // Trigger login event loginBloc.add( LoginButtonPressed( username: _usernameController.text, password: _passwordController.text, ), ); }, child: const Text('Login'), ), ], ), ), ); } }