This commit is contained in:
Zypherift 2024-08-22 20:57:56 +02:00
parent 89adf5a26f
commit d426d4866a

View File

@ -3,17 +3,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart'; import 'package:webview_flutter/webview_flutter.dart';
class KretenLoginScreen extends StatefulWidget { class KretenLoginWidget extends StatefulWidget {
const KretenLoginScreen({super.key, required this.onLogin}); const KretenLoginWidget({super.key, required this.onLogin});
// final String selectedSchool; // final String selectedSchool;
final void Function(String code) onLogin; final void Function(String code) onLogin;
@override @override
State<KretenLoginScreen> createState() => _KretenLoginScreenState(); State<KretenLoginWidget> createState() => _KretenLoginWidgetState();
} }
class _KretenLoginScreenState extends State<KretenLoginScreen> { class _KretenLoginWidgetState extends State<KretenLoginWidget> {
late final WebViewController controller; late final WebViewController controller;
var loadingPercentage = 0; var loadingPercentage = 0;
var currentUrl = ''; var currentUrl = '';
@ -24,71 +24,35 @@ class _KretenLoginScreenState extends State<KretenLoginScreen> {
controller = WebViewController() controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted) ..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(NavigationDelegate( ..setNavigationDelegate(NavigationDelegate(
onNavigationRequest: (n) async {
if (n.url.startsWith('https://mobil.e-kreta.hu')) {
setState(() {
loadingPercentage = 0;
currentUrl = n.url;
});
// final String instituteCode = widget.selectedSchool;
// if (!n.url.startsWith(
// 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=')) {
// return;
// }
List<String> requiredThings = n.url
.replaceAll(
'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=',
'')
.replaceAll(
'&scope=openid%20email%20offline_access%20kreta-ellenorzo-webapi.public%20kreta-eugyintezes-webapi.public%20kreta-fileservice-webapi.public%20kreta-mobile-global-webapi.public%20kreta-dkt-webapi.public%20kreta-ier-webapi.public&state=refilc_student_mobile&session_state=',
':')
.split(':');
String code = requiredThings[0];
// String sessionState = requiredThings[1];
widget.onLogin(code);
// Future.delayed(const Duration(milliseconds: 500), () {
// Navigator.of(context).pop();
// });
// Navigator.of(context).pop();
return NavigationDecision.prevent;
} else {
return NavigationDecision.navigate;
}
},
onPageStarted: (url) async { onPageStarted: (url) async {
// setState(() { setState(() {
// loadingPercentage = 0; loadingPercentage = 0;
// currentUrl = url; currentUrl = url;
});
// final String instituteCode = widget.selectedSchool;
if (!url.startsWith(
'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=')) {
return;
}
List<String> requiredThings = url
.replaceAll(
'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=',
'')
.replaceAll(
'&scope=openid%20email%20offline_access%20kreta-ellenorzo-webapi.public%20kreta-eugyintezes-webapi.public%20kreta-fileservice-webapi.public%20kreta-mobile-global-webapi.public%20kreta-dkt-webapi.public%20kreta-ier-webapi.public&state=refilc_student_mobile&session_state=',
':')
.split(':');
String code = requiredThings[0];
// String sessionState = requiredThings[1];
widget.onLogin(code);
// Future.delayed(const Duration(milliseconds: 500), () {
// Navigator.of(context).pop();
// }); // });
// Navigator.of(context).pop();
// // final String instituteCode = widget.selectedSchool;
// if (!url.startsWith(
// 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=')) {
// return;
// }
// List<String> requiredThings = url
// .replaceAll(
// 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=',
// '')
// .replaceAll(
// '&scope=openid%20email%20offline_access%20kreta-ellenorzo-webapi.public%20kreta-eugyintezes-webapi.public%20kreta-fileservice-webapi.public%20kreta-mobile-global-webapi.public%20kreta-dkt-webapi.public%20kreta-ier-webapi.public&state=refilc_student_mobile&session_state=',
// ':')
// .split(':');
// String code = requiredThings[0];
// // String sessionState = requiredThings[1];
// widget.onLogin(code);
// // Future.delayed(const Duration(milliseconds: 500), () {
// // Navigator.of(context).pop();
// // });
// // Navigator.of(context).pop();
}, },
onProgress: (progress) { onProgress: (progress) {
setState(() { setState(() {
@ -107,6 +71,7 @@ class _KretenLoginScreenState extends State<KretenLoginScreen> {
); );
} }
// Future<void> loadLoginUrl() async {
// String nonceStr = await Provider.of<KretaClient>(context, listen: false) // String nonceStr = await Provider.of<KretaClient>(context, listen: false)
// .getAPI(KretaAPI.nonce, json: false); // .getAPI(KretaAPI.nonce, json: false);
@ -115,22 +80,30 @@ class _KretenLoginScreenState extends State<KretenLoginScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Stack(
appBar: AppBar( children: [
leading: const BackButton(), // WebView that will only be visible when the loading is 100%
title: const Text('e-KRÉTA Bejelentkezés'), Visibility(
), visible: loadingPercentage == 100,
body: Stack( maintainState: true, // Keep the WebView running in the background
children: [ child: WebViewWidget(
WebViewWidget(
controller: controller, controller: controller,
), ),
if (loadingPercentage < 100) ),
LinearProgressIndicator( // Show the CircularProgressIndicator while loading is not 100%
value: loadingPercentage / 100.0, if (loadingPercentage < 100)
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
value: loadingPercentage /
100.0, // Shows progress as a percentage
),
],
), ),
], ),
), ],
); );
} }
} }