Files
kulakpos_app/lib/Screens/Authentication/Sign In/webview_login.dart
2026-02-07 15:57:09 +07:00

110 lines
3.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:mobile_pos/generated/l10n.dart' as l;
import '../../../../Repository/constant_functions.dart'; // Adjust path accordingly
import '../../../../currency.dart'; // Adjust path accordingly
import '../../Home/home.dart';
import '../profile_setup_screen.dart'; // Adjust path accordingly
class WebViewLogin extends StatefulWidget {
final String loginUrl;
const WebViewLogin({super.key, required this.loginUrl});
@override
_WebViewLoginState createState() => _WebViewLoginState();
}
class _WebViewLoginState extends State<WebViewLogin> {
@override
void initState() {
super.initState();
EasyLoading.show(status: l.S.of(context).loading);
}
void _handleRedirect(String url) async {
if (url.contains('/app-login-or-signup')) {
final uri = Uri.parse(url);
final queryParams = uri.queryParameters;
final token = queryParams['token'];
final isSetup = queryParams['is_setup'] == '1';
final status = queryParams['status'];
final currency = queryParams['currency'] ?? queryParams['currency_id'];
if (status == 'success' && token != null) {
await saveUserData(token: token); // Save token
if (currency != null) {
try {
await CurrencyMethods().saveCurrencyDataInLocalDatabase(
selectedCurrencySymbol: currency,
selectedCurrencyName: currency,
);
} catch (e) {
print('Error saving currency: $e');
}
}
if (mounted) {
if (isSetup) {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (_) => const Home()),
);
} else {
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (_) => const ProfileSetup()),
);
}
}
} else {
if (mounted) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(l.S.of(context).loginFailedPleaseTryAgain),
));
Navigator.pop(context); // Close WebView
}
}
}
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: WebViewWidget(
controller: WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
// Intercept all navigation requests and load within WebView
onNavigationRequest: (request) {
return NavigationDecision.navigate;
},
onPageFinished: (url) {
EasyLoading.dismiss();
},
onPageStarted: (url) {
_handleRedirect(url);
},
onWebResourceError: (error) {
EasyLoading.dismiss();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(l.S.of(context).someThingWithWrongWithTheWebPage)),
);
},
),
)
// Set user agent to mimic a browser
..setUserAgent(
'Mozilla/5.0 (Linux; Android 10; Mobile) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36')
..loadRequest(Uri.parse(widget.loginUrl)),
),
),
);
}
}