---
title: Flutter
description: 'inappwebview के माध्यम से Flutter में कार्ड नॉट प्रेजेंट सत्यापन कैप्चर एक्सपीरियंस को मैनेज करना: webview खोलना, URL परिवर्तनों की निगरानी करना, और कैमरा अनुमति।'
canonical: https://developer.unico.io/hi/dual-api/developers/regional-solutions/card-not-present-verification/integration/controlling-the-experience/mobile/flutter
locale: hi
generated_by: markdown-export
---

Flutter का उपयोग करने वाले use case के लिए, **inappwebview** का उपयोग करने की सलाह दी जाती है।

लेनदेन बनाने और लेनदेन का लिंक प्राप्त करने के बाद, निम्नलिखित इम्प्लीमेंटेशन की सलाह दी जाती है:

- अपने सामान्य फ्लो में (जिसमें कार्ड नॉट प्रेजेंट सत्यापन शामिल है), आप API के माध्यम से जनरेट किए गए लिंक के साथ **inappwebview** खोलेंगे;
- आप अपने एप्लिकेशन की आवश्यकता के अनुसार इस ओपनिंग को कस्टमाइज़ कर सकते हैं;
- आप निगरानी करेंगे कि URL बदलता है या नहीं (**redirectUrl** में) और फिर **inappwebview** को बंद करेंगे।

एक **inappwebview** खोलने और URL परिवर्तनों को कंट्रोल करने के लिए, आप इसे इस तरह कर सकते हैं:

```dart
  import 'package:flutter_inappwebview/flutter_inappwebview.dart';
  import 'package:unico_poc_id_pay_inappwebview/RedirectScreen.dart';
  import 'package:unico_poc_id_pay_inappwebview/service.dart';

  Widget setWebView(String URL_TO_LOAD) {
    InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
        crossPlatform: InAppWebViewOptions(
          useShouldOverrideUrlLoading: true,
          mediaPlaybackRequiresUserGesture: false,
        ),
        android: AndroidInAppWebViewOptions(
          useHybridComposition: true,
        ),
        ios: IOSInAppWebViewOptions(
          allowsInlineMediaPlayback: true,
        ));

    return Expanded(
      child: InAppWebView(
        initialUrlRequest: URLRequest(
          url: Uri.parse(URL_TO_LOAD),
        ),
        initialOptions: options,
        androidOnPermissionRequest: (controller, origin, resources) async {
          return PermissionRequestResponse(
              resources: resources,
              action: PermissionRequestResponseAction.GRANT);
        },
        onWebViewCreated: (controller) {
          setState(() {
            _inAppWebViewController = controller;
          });
        },
        onLoadStart: (controller, url) {
          print('LOADING');
          setState(() {
            _link = url.toString();
          });
        },
        onProgressChanged: (controller, progress) {
          setState(() {
            progress == 100 ? _isLoading = false : _isLoading = true;
          });
        },
        onLoadStop: (controller, url) {
          print('LOADED');
          setState(() {
            _link = url.toString();
          });
        },
        shouldOverrideUrlLoading: (controller, navigationAction) async {
          var uri = navigationAction.request.url;
          if (uri == Uri.parse("<URL_TO_OBSERVER>")) {
            setState(() {
              _link = "";
            });

            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => const RedirectScreen(),
              ),
            );
            return NavigationActionPolicy.CANCEL;
          }
          return NavigationActionPolicy.ALLOW;
        },
      ),
    );
  }
```

कैमरा अनुमति प्राप्त करने के लिए, आप इसे इस तरह कर सकते हैं:

```dart
  import 'package:permission_handler/permission_handler.dart';

  void requestPermission() async {
    var status = await Permission.camera.status;
    if (status.isDenied) {
      if (await Permission.camera.request().isGranted) {
        print("ok");
      }
    }
  }
```

:::note
सही ढंग से कार्य करने के लिए निम्नलिखित अनुमतियां आवश्यक हैं, जैसे कि:
- कैमरा
- जियोलोकेशन
:::

अधिक जानकारी के लिए, हम आधिकारिक [`flutter_inappwebview` दस्तावेज़](https://pub.dev/packages/flutter_inappwebview) पढ़ने की सलाह देते हैं।