first commit
This commit is contained in:
109
lib/Screens/Authentication/Sign In/webview_login.dart
Normal file
109
lib/Screens/Authentication/Sign In/webview_login.dart
Normal file
@@ -0,0 +1,109 @@
|
||||
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)),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user