72 lines
2.3 KiB
Dart
72 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:rogapp/features/home/home_page.dart';
|
|
import 'package:rogapp/features/services/auth_repo.dart';
|
|
import 'package:rogapp/features/state/user_state.dart';
|
|
|
|
class LoginPage extends ConsumerStatefulWidget {
|
|
@override
|
|
_LoginScreenState createState() => _LoginScreenState();
|
|
}
|
|
|
|
class _LoginScreenState extends ConsumerState<LoginPage> {
|
|
final TextEditingController _emailController = TextEditingController();
|
|
final TextEditingController _passwordController = TextEditingController();
|
|
bool _isLoading = false; // Track loading state
|
|
|
|
void _login() {
|
|
setState(() {
|
|
_isLoading = true; // Start loading
|
|
});
|
|
String email = _emailController.text.trim();
|
|
String password = _passwordController.text;
|
|
|
|
ref.read(authProvider("$email|$password").future).then((user) {
|
|
setState(() {
|
|
_isLoading = false; // Stop loading
|
|
});
|
|
if (user != null) {
|
|
ref.read(userNotifierProvider.notifier).setUser(user);
|
|
Navigator.of(context).pushReplacement(MaterialPageRoute(
|
|
builder: (context) => const HomePage(),
|
|
));
|
|
} else {
|
|
ScaffoldMessenger.of(context)
|
|
.showSnackBar(const SnackBar(content: Text('Login failed')));
|
|
}
|
|
}).catchError((error) {
|
|
ScaffoldMessenger.of(context)
|
|
.showSnackBar(SnackBar(content: Text('Error: $error')));
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(title: const Text('Login')),
|
|
body: Padding(
|
|
padding: const EdgeInsets.all(16.0),
|
|
child: Column(
|
|
children: [
|
|
TextFormField(
|
|
controller: _emailController,
|
|
decoration: const InputDecoration(labelText: 'Email'),
|
|
),
|
|
TextFormField(
|
|
controller: _passwordController,
|
|
decoration: const InputDecoration(labelText: 'Password'),
|
|
obscureText: true,
|
|
),
|
|
_isLoading
|
|
? CircularProgressIndicator()
|
|
: ElevatedButton(
|
|
onPressed: _login,
|
|
child: const Text('Login'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|