import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_login/flutter_login.dart'; import 'package:provider/provider.dart'; import '../../api/marianumcloud/talk/room/getRoom.dart'; import '../../api/marianumcloud/talk/room/getRoomParams.dart'; import '../../model/accountData.dart'; import '../../model/accountModel.dart'; class Login extends StatefulWidget { const Login({super.key}); @override State createState() => _LoginState(); } class _LoginState extends State { bool displayDisclaimerText = true; String? _checkInput(value)=> (value ?? '').length == 0 ? 'Eingabe erforderlich' : null; Future _login(LoginData data) async { await AccountData().removeData(); try { await AccountData().setData(data.name.toLowerCase(), data.password); await GetRoom( GetRoomParams( includeStatus: false, ), ).run().then((value) async { await AccountData().setData(data.name.toLowerCase(), data.password); setState(() { displayDisclaimerText = false; }); }); } catch(e) { await AccountData().removeData(); log(e.toString()); return 'Benutzername oder Password falsch! (${e.toString()})'; } await Future.delayed(const Duration(seconds: 1)); return null; } Future _resetPassword(String name) => Future.delayed(Duration.zero).then((_) => 'Diese Funktion steht nicht zur Verfügung!'); @override Widget build(BuildContext context) => FlutterLogin( logo: Image.asset('assets/logo/icon.png').image, userValidator: _checkInput, passwordValidator: _checkInput, onSubmitAnimationCompleted: () => Provider.of(context, listen: false).setState(AccountModelState.loggedIn), onLogin: _login, onSignup: null, onRecoverPassword: _resetPassword, hideForgotPasswordButton: true, theme: LoginTheme( primaryColor: Theme.of(context).primaryColor, accentColor: Colors.white, errorColor: Theme.of(context).primaryColor, footerBottomPadding: 10, textFieldStyle: const TextStyle( fontWeight: FontWeight.w500 ), cardTheme: const CardTheme( elevation: 10, ), ), messages: LoginMessages( loginButton: 'Anmelden', userHint: 'Nutzername', passwordHint: 'Passwort', ), disableCustomPageTransformer: true, headerWidget: Padding( padding: const EdgeInsets.only(bottom: 30), child: Center( child: Visibility( visible: displayDisclaimerText, child: const Text( 'Dies ist ein Inoffizieller Nextcloud & Webuntis Client und wird nicht vom Marianum selbst betrieben.\nKeinerlei Gewähr für Vollständigkeit, Richtigkeit und Aktualität!', textAlign: TextAlign.center, ), ), ), ), footer: 'Marianum Fulda - Die persönliche Schule', title: 'Marianum Fulda', userType: LoginUserType.name, ); }