import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:e_commerce/widgets/fetch_cart.dart'; import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:webview_flutter/webview_flutter.dart'; class MidtransPay extends StatefulWidget { const MidtransPay({super.key, required this.token, required this.snapshot}); final String token; final QuerySnapshot snapshot; @override State createState() => _MidtransPayState(); } class _MidtransPayState extends State { late WebViewController controller; final midtransConfig = { 'clientKey': 'SB-Mid-client-7jg9rzEOfqKDKPKw', 'url': 'https://app.sandbox.midtrans.com/snap/snap.js', }; String _getHtmlString() { String htmlString = ''' '''; return htmlString; } void _initController() { setState(() { controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..addJavaScriptChannel('Android', onMessageReceived: androidMessage) ..setNavigationDelegate(NavigationDelegate(onNavigationRequest: (request) async { if (request.url.substring(0, 6) == 'intent') { if (request.url.contains('gopay')) { String url = request.url.replaceAll('intent://', 'gojek://'); await launchUrl(Uri.parse(url)); } return NavigationDecision.prevent; } else { return NavigationDecision.navigate; } })) ..loadRequest(Uri.dataFromString(_getHtmlString(), mimeType: 'text/html', encoding: Encoding.getByName('utf-8'))); }); } void androidMessage(JavaScriptMessage receiver) { if (receiver.message != 'undefined') { if (receiver.message == 'close' || receiver.message == 'error') { Navigator.pop(context); ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Pembayaran Gagal'))); } else { updateStock(widget.snapshot); deleteAllItems("users-cart-items"); Navigator.pop(context); ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Pembayaran Berhasil'))); } } } @override void initState() { _initController(); super.initState(); } @override Widget build(BuildContext context) { return SafeArea( child: Scaffold( body: WebViewWidget(controller: controller), ), ); } }