Files
briessenchecker/lib/pages/login_page.dart
2023-08-09 17:01:54 +02:00

114 lines
4.1 KiB
Dart

import 'package:briessenchecker/services/dbhelper.dart';
import 'package:briessenchecker/services/scaffold_messenger.dart';
import 'package:briessenchecker/widgets/password_textfield.dart';
import 'package:flutter/material.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
class LoginPage extends StatelessWidget {
const LoginPage({super.key});
static const routeName = '/login';
@override
Widget build(BuildContext context) {
final TextEditingController emailController = TextEditingController();
final TextEditingController passwordController = TextEditingController();
Size screenSize = MediaQuery.of(context).size;
double dialogWidth = screenSize.width > 300 ? 300 : screenSize.width;
return Stack(children: [
Image(
width: screenSize.width,
height: screenSize.height,
fit: BoxFit.cover,
image: const AssetImage(
'nekro_wallpaper.jpg',
),
),
Align(
alignment: Alignment.topCenter,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'BRISEN',
style: Theme.of(context).textTheme.displayLarge!.copyWith(
fontFamily: 'Cinzel',
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
const Padding(
padding: EdgeInsets.symmetric(horizontal: 20),
child: Image(
width: 200,
image: AssetImage('logo.png'),
),
),
Text(
'CHECKER',
style: Theme.of(context).textTheme.displayLarge!.copyWith(
fontFamily: 'Cinzel',
fontWeight: FontWeight.bold,
color: Colors.white,
),
)
],
)),
Scaffold(
backgroundColor: Colors.transparent,
body: Center(
child: Container(
decoration: BoxDecoration(
color: Theme.of(context).dialogBackgroundColor,
backgroundBlendMode: BlendMode.luminosity,
borderRadius: BorderRadius.circular(10),
),
height: 300,
width: dialogWidth,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
child: Form(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: emailController,
autofillHints: const [
'email',
'username',
'name',
'login',
'mail'
],
textInputAction: TextInputAction.next,
decoration: const InputDecoration(label: Text('Email')),
),
const Padding(padding: EdgeInsets.symmetric(vertical: 8.0)),
PasswordField(
controller: passwordController,
onSubmitted: () => _loginSubmitted(emailController.text,
passwordController.text, context),
),
const Padding(padding: EdgeInsets.symmetric(vertical: 8.0)),
FloatingActionButton.extended(
onPressed: () => _loginSubmitted(emailController.text,
passwordController.text, context),
label: const Text('Login'))
],
),
),
),
),
),
),
]);
}
void _loginSubmitted(String email, String password, BuildContext context) {
DbHelper.login(email, password).onError(
(AuthException error, stackTrace) =>
Messenger.showError(context, error.message),
);
}
}