forked from eatvio/eatvio_app
98 lines
2.8 KiB
Dart
98 lines
2.8 KiB
Dart
import 'dart:convert';
|
|
import 'dart:developer';
|
|
|
|
import 'package:eatvio_app/core/const.dart';
|
|
import 'package:eatvio_app/core/locator_service.dart';
|
|
import 'package:eatvio_app/features/auth/presentation/bloc/auth_cubit/auth_cubit.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
|
|
class WebViewRegistrationScreen extends StatefulWidget {
|
|
const WebViewRegistrationScreen({super.key});
|
|
|
|
@override
|
|
State<WebViewRegistrationScreen> createState() => _WebViewRegistrationScreenState();
|
|
}
|
|
|
|
class _WebViewRegistrationScreenState extends State<WebViewRegistrationScreen> {
|
|
late final WebViewController _controller;
|
|
late final AuthCubit authCubit;
|
|
String? email;
|
|
String? password;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
authCubit = sl<AuthCubit>();
|
|
_controller = WebViewController()
|
|
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
|
..addJavaScriptChannel(
|
|
'flutter_inject',
|
|
onMessageReceived: (JavaScriptMessage message) {
|
|
final data = jsonDecode(message.message);
|
|
if (data['type'] == 'email') {
|
|
email = data['value'];
|
|
log("Email: $email");
|
|
} else if (data['type'] == 'password') {
|
|
password = data['value'];
|
|
log("Password: $password");
|
|
}
|
|
},
|
|
)
|
|
..setNavigationDelegate(
|
|
NavigationDelegate(
|
|
onNavigationRequest: (NavigationRequest request) {
|
|
if (request.url.contains('profile')) {
|
|
authCubit.getTokenByCredentials(
|
|
email!,
|
|
password!,
|
|
);
|
|
}
|
|
return NavigationDecision.navigate;
|
|
},
|
|
),
|
|
)
|
|
..loadRequest(Uri.parse('$baseUrl/registration/step1'));
|
|
|
|
_injectJavaScript();
|
|
}
|
|
|
|
void _injectJavaScript() async {
|
|
await Future.delayed(const Duration(seconds: 2));
|
|
_controller.runJavaScript('''
|
|
function sendMessageToFlutter(data) {
|
|
window.flutter_inject.postMessage(JSON.stringify(data));
|
|
}
|
|
|
|
function trackInputChanges() {
|
|
let emailField = document.getElementById('inputEmail');
|
|
let passwordField = document.getElementById('inputPassword');
|
|
|
|
if (emailField && passwordField) {
|
|
emailField.addEventListener('input', function() {
|
|
sendMessageToFlutter({ type: 'email', value: emailField.value });
|
|
});
|
|
|
|
passwordField.addEventListener('input', function() {
|
|
sendMessageToFlutter({ type: 'password', value: passwordField.value });
|
|
});
|
|
}
|
|
}
|
|
|
|
trackInputChanges();
|
|
''');
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
toolbarHeight: 0,
|
|
),
|
|
body: SafeArea(
|
|
child: WebViewWidget(controller: _controller),
|
|
),
|
|
);
|
|
}
|
|
}
|