Files
kulakpos_app/lib/Screens/payment getway/payment_getway_screen.dart

128 lines
3.4 KiB
Dart
Raw Permalink Normal View History

2026-02-07 15:57:09 +07:00
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:mobile_pos/generated/l10n.dart' as lang;
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import '../../Const/api_config.dart';
class PaymentScreen extends StatefulWidget {
const PaymentScreen({super.key, required this.planId, required this.businessId});
final String planId;
final String businessId;
@override
PaymentScreenState createState() => PaymentScreenState();
}
String paymentUrl = '${APIConfig.domain}payments-gateways/plan_id/business_id?platform=app';
const String successUrl = 'order-status?status=success';
const String failureUrl = 'order-status?status=failed';
class PaymentScreenState extends State<PaymentScreen> {
late WebViewController controller;
final ImagePicker _imagePicker = ImagePicker();
@override
void initState() {
// TODO: implement initState
super.initState();
paymentUrl = paymentUrl.replaceAll(APIConfig.domain, APIConfig.domain).replaceAll('plan_id', widget.planId).replaceAll('business_id', widget.businessId);
controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onPageStarted: (String url) {
if (url.contains(successUrl)) {
Navigator.pop(context, true);
return;
}
if (url.contains(failureUrl)) {
Navigator.pop(context, false);
return;
}
},
),
)
..loadRequest(Uri.parse(paymentUrl));
// For image picker
if (Platform.isAndroid) {
final androidController = controller.platform as AndroidWebViewController;
androidController.setOnShowFileSelector(_androidImagePicker);
}
}
Future<List<String>> _androidImagePicker(FileSelectorParams params) async {
final XFile? pickedFile = await _imagePicker.pickImage(
source: ImageSource.gallery,
);
if (pickedFile != null) {
String filePath = pickedFile.path;
final fileUri = Uri.file(filePath);
return [fileUri.toString()];
}
return [];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
lang.S.of(context).paymentGateway,
// 'Payment Gateway'
),
),
body: WebViewWidget(
controller: controller,
),
);
}
}
class SuccessScreen extends StatelessWidget {
const SuccessScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
lang.S.of(context).paymentSuccess,
// 'Payment Success'
),
),
body: Center(
child: Text(
lang.S.of(context).paymentWasSuccessful,
// 'Payment was successful!'
),
),
);
}
}
class FailureScreen extends StatelessWidget {
const FailureScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(lang.S.of(context).paymentFailed),
),
body: Center(
child: Text(
lang.S.of(context).paymentFailedPleaseTryAgain,
),
),
);
}
}