import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:seshat/routing/routes.dart'; import 'package:seshat/ui/auth/viewmodel/login_view_model.dart'; class LoginPage extends StatefulWidget { const LoginPage({super.key, required this.viewModel}); final LoginViewModel viewModel; @override State createState() => _LoginPageState(); } class _LoginPageState extends State { final TextEditingController _username = TextEditingController( text: "ueauvergne", ); final TextEditingController _password = TextEditingController( text: "ueauvergne", ); @override void initState() { super.initState(); widget.viewModel.login.addListener(_onResult); } @override void didUpdateWidget(covariant LoginPage oldWidget) { super.didUpdateWidget(oldWidget); oldWidget.viewModel.removeListener(_onResult); widget.viewModel.login.addListener(_onResult); } @override void dispose() { widget.viewModel.login.removeListener(_onResult); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ TextField(controller: _username), TextField(controller: _password), ListenableBuilder( listenable: widget.viewModel.login, builder: (context, child) { return FilledButton( onPressed: () { widget.viewModel.login.execute(( _username.value.text, _password.value.text, )); }, child: Text("Connexion"), ); }, ), ], ), ); } void _onResult() { if (widget.viewModel.login.completed) { widget.viewModel.login.clearResult(); context.go(Routes.add); } if (widget.viewModel.login.error) { widget.viewModel.login.clearResult(); ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text("Une erreur est survenue lors de la connexion."), action: SnackBarAction( label: "Réessayer", onPressed: () => widget.viewModel.login.execute(( _username.value.text, _password.value.text, )), ), ), ); } } }