feat: add arch

This commit is contained in:
Yashar Panahi
2025-08-02 12:31:42 +03:30
parent 59c3091b2f
commit 64c4ebf0f8
12 changed files with 231 additions and 110 deletions
+71
View File
@@ -0,0 +1,71 @@
// lib/views/login_screen.dart
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../view_models/auth_view_model.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({super.key});
@override
State<LoginScreen> createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
@override
Widget build(BuildContext context) {
final authViewModel = Provider.of<AuthViewModel>(context);
return Scaffold(
appBar: AppBar(title: const Text('Login')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _emailController,
decoration: const InputDecoration(labelText: 'Email'),
),
TextField(
controller: _passwordController,
decoration: const InputDecoration(labelText: 'Password'),
obscureText: true,
),
const SizedBox(height: 20),
if (authViewModel.isLoading)
const CircularProgressIndicator()
else
ElevatedButton(
onPressed: () {
authViewModel.login(
_emailController.text,
_passwordController.text,
);
},
child: const Text('Login'),
),
if (authViewModel.errorMessage != null)
Padding(
padding: const EdgeInsets.only(top: 20),
child: Text(
authViewModel.errorMessage!,
style: const TextStyle(color: Colors.red),
),
),
if (authViewModel.loggedInUser != null)
Padding(
padding: const EdgeInsets.only(top: 20),
child: Text(
'Welcome, ${authViewModel.loggedInUser!.name}!',
style: const TextStyle(color: Colors.green),
),
),
],
),
),
);
}
}