|
|
|
|
@ -1,5 +1,6 @@
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/classes/utils.dart';
|
|
|
|
|
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
|
|
|
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
|
|
|
|
|
|
|
|
// Enum for SSO types
|
|
|
|
|
@ -19,6 +20,19 @@ class SsoLoginWebView extends StatefulWidget {
|
|
|
|
|
class _SsoLoginWebViewState extends State<SsoLoginWebView> {
|
|
|
|
|
late final WebViewController _controller;
|
|
|
|
|
String? url;
|
|
|
|
|
bool _isTicketLoadingVisible = false;
|
|
|
|
|
|
|
|
|
|
void _showTicketLoading() {
|
|
|
|
|
if (widget.ssoType != SsoType.forTicket || _isTicketLoadingVisible || !mounted) return;
|
|
|
|
|
_isTicketLoadingVisible = true;
|
|
|
|
|
Utils.showLoading(context);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _hideTicketLoading() {
|
|
|
|
|
if (widget.ssoType != SsoType.forTicket || !_isTicketLoadingVisible || !mounted) return;
|
|
|
|
|
_isTicketLoadingVisible = false;
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
@ -39,15 +53,19 @@ class _SsoLoginWebViewState extends State<SsoLoginWebView> {
|
|
|
|
|
},
|
|
|
|
|
onPageStarted: (String url) {
|
|
|
|
|
print("Page started loading: $url");
|
|
|
|
|
_showTicketLoading();
|
|
|
|
|
},
|
|
|
|
|
onPageFinished: (String url) {
|
|
|
|
|
print("Page finished loading: $url");
|
|
|
|
|
_hideTicketLoading();
|
|
|
|
|
},
|
|
|
|
|
onHttpError: (HttpResponseError error) {
|
|
|
|
|
print("HTTP error: ${error.toString()} for URL: ${error.response!.statusCode}");
|
|
|
|
|
_hideTicketLoading();
|
|
|
|
|
},
|
|
|
|
|
onWebResourceError: (WebResourceError error) {
|
|
|
|
|
print("Web resource error: ${error.description} for URL: ${error.errorType}");
|
|
|
|
|
_hideTicketLoading();
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
@ -57,6 +75,11 @@ class _SsoLoginWebViewState extends State<SsoLoginWebView> {
|
|
|
|
|
// For ENSAT, just load the URL directly (GET request)
|
|
|
|
|
_controller.loadRequest(Uri.parse(url!));
|
|
|
|
|
} else {
|
|
|
|
|
if (widget.ssoType == SsoType.forTicket) {
|
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
|
|
|
_showTicketLoading();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// For Paxes (Ticket, Courses), use HTML form POST
|
|
|
|
|
_controller.loadHtmlString(_buildHtmlContent());
|
|
|
|
|
}
|
|
|
|
|
@ -64,8 +87,12 @@ class _SsoLoginWebViewState extends State<SsoLoginWebView> {
|
|
|
|
|
|
|
|
|
|
// Build HTML content for the SSO form
|
|
|
|
|
String _buildHtmlContent() {
|
|
|
|
|
String formAction = url ?? "https://www.paxes.com/sso/hmg";
|
|
|
|
|
|
|
|
|
|
String formAction;
|
|
|
|
|
if (widget.ssoType == SsoType.forTicket) {
|
|
|
|
|
formAction = "https://www.paxes.com/sso/hmg";
|
|
|
|
|
} else {
|
|
|
|
|
formAction = url ?? "";
|
|
|
|
|
}
|
|
|
|
|
return '''
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html>
|
|
|
|
|
@ -78,8 +105,14 @@ class _SsoLoginWebViewState extends State<SsoLoginWebView> {
|
|
|
|
|
</html>''';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void dispose() {
|
|
|
|
|
_hideTicketLoading();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
return Scaffold(appBar: null, body: SafeArea(child: WebViewWidget(controller: _controller)));
|
|
|
|
|
return Scaffold(appBar: AppBarWidget(context, title: "MoheM", showWorkListSettingButton: false), body: SafeArea(child: WebViewWidget(controller: _controller)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|