114 lines
3.1 KiB
Dart
114 lines
3.1 KiB
Dart
|
|
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<Login> createState() => _LoginState();
|
|
}
|
|
|
|
class _LoginState extends State<Login> {
|
|
bool displayDisclaimerText = true;
|
|
|
|
String? _checkInput(value){
|
|
return (value ?? '').length == 0 ? 'Eingabe erforderlich' : null;
|
|
}
|
|
|
|
Future<String?> _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<String> _resetPassword(String name) {
|
|
return Future.delayed(Duration.zero).then((_) {
|
|
return 'Diese Funktion steht nicht zur Verfügung!';
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return FlutterLogin(
|
|
logo: Image.asset('assets/logo/icon.png').image,
|
|
|
|
userValidator: _checkInput,
|
|
passwordValidator: _checkInput,
|
|
onSubmitAnimationCompleted: () => Provider.of<AccountModel>(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,
|
|
);
|
|
}
|
|
}
|