import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:webview_flutter/webview_flutter.dart'; // Enum for SSO types enum SsoType { forTicket, forEnsat, forCourses } class SsoLoginWebView extends StatefulWidget { final String? url; final String? jwtToken; final SsoType ssoType; const SsoLoginWebView({Key? key, required this.url, this.jwtToken, required this.ssoType}) : super(key: key); @override State createState() => _SsoLoginWebViewState(); } class _SsoLoginWebViewState extends State { late final WebViewController _controller; String? url; @override void initState() { super.initState(); url = widget.url ?? ""; _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..setNavigationDelegate( NavigationDelegate( onProgress: (int progress) { print("WebView is loading (progress: $progress%)"); if (widget.ssoType == SsoType.forEnsat && progress == 100) { Utils.hideLoading(context); } }, onPageStarted: (String url) { print("Page started loading: $url"); }, onPageFinished: (String url) { print("Page finished loading: $url"); }, onHttpError: (HttpResponseError error) { print("HTTP error: ${error.toString()} for URL: ${error.response!.statusCode}"); }, onWebResourceError: (WebResourceError error) { print("Web resource error: ${error.description} for URL: ${error.errorType}"); }, ), ); // Load content based on SSO type if (widget.ssoType == SsoType.forEnsat) { // For ENSAT, just load the URL directly (GET request) _controller.loadRequest(Uri.parse(url!)); } else { // For Paxes (Ticket, Courses), use HTML form POST _controller.loadHtmlString(_buildHtmlContent()); } } // Build HTML content for the SSO form String _buildHtmlContent() { String formAction = url ?? "https://www.paxes.com/sso/hmg"; return '''

'''; } @override Widget build(BuildContext context) { return Scaffold(appBar: null, body: SafeArea(child: WebViewWidget(controller: _controller))); } }