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,20 +24,19 @@ class _KretenLoginScreenState extends State<KretenLoginScreen> {
controller = WebViewController() controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted) ..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(NavigationDelegate( ..setNavigationDelegate(NavigationDelegate(
onNavigationRequest: (n) async { onPageStarted: (url) async {
if (n.url.startsWith('https://mobil.e-kreta.hu')) {
setState(() { setState(() {
loadingPercentage = 0; loadingPercentage = 0;
currentUrl = n.url; currentUrl = url;
}); });
// final String instituteCode = widget.selectedSchool; // final String instituteCode = widget.selectedSchool;
// if (!n.url.startsWith( if (!url.startsWith(
// 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=')) { 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=')) {
// return; return;
// } }
List<String> requiredThings = n.url List<String> requiredThings = url
.replaceAll( .replaceAll(
'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=', 'https://mobil.e-kreta.hu/ellenorzo-student/prod/oauthredirect?code=',
'') '')
@ -54,41 +53,6 @@ class _KretenLoginScreenState extends State<KretenLoginScreen> {
// Navigator.of(context).pop(); // Navigator.of(context).pop();
// }); // });
// Navigator.of(context).pop(); // Navigator.of(context).pop();
return NavigationDecision.prevent;
} else {
return NavigationDecision.navigate;
}
},
onPageStarted: (url) async {
// setState(() {
// loadingPercentage = 0;
// 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();
}, },
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(
leading: const BackButton(),
title: const Text('e-KRÉTA Bejelentkezés'),
),
body: Stack(
children: [ children: [
WebViewWidget( // WebView that will only be visible when the loading is 100%
Visibility(
visible: loadingPercentage == 100,
maintainState: true, // Keep the WebView running in the background
child: WebViewWidget(
controller: controller, controller: controller,
), ),
),
// Show the CircularProgressIndicator while loading is not 100%
if (loadingPercentage < 100) if (loadingPercentage < 100)
LinearProgressIndicator( Center(
value: loadingPercentage / 100.0, child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircularProgressIndicator(
value: loadingPercentage /
100.0, // Shows progress as a percentage
), ),
], ],
), ),
),
],
); );
} }
} }