A Flutter plugin that allows you to add an inline webview, to use a headless webview, and to open an in-app browser window.

Overview

Flutter InAppWebView Plugin Share on Twitter Share on Facebook

Pub pub points popularity likes Awesome Flutter License

Donate to this project GitHub contributors GitHub forks GitHub stars

InAppWebView-logo

A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.

Announcement

All the configuration and info about get started with this plugin and code examples has been moved from here to the new inappwebview.dev official website Documentation page!

Articles/Resources

Showcase - Who use it

Check the Showcase page to see an open list of Apps built with Flutter and Flutter InAppWebView.

Are you using the Flutter InAppWebView plugin and would you like to add your App there?

Send a submission request to the Submit App page!

Requirements

  • Dart sdk: ">=2.12.0-0 <3.0.0"
  • Flutter: ">=1.22.2"
  • Android: minSdkVersion 17 and add support for androidx (see AndroidX Migration to migrate an existing app)
  • iOS: --ios-language swift, Xcode version >= 12

Installation

Add flutter_inappwebview as a dependency in your pubspec.yaml file.

Main Classes Overview

  • InAppWebView: Flutter Widget for adding an inline native WebView integrated into the flutter widget tree.
  • ContextMenu: This class represents the WebView context menu.
  • HeadlessInAppWebView: Class that represents a WebView in headless mode. It can be used to run a WebView in background without attaching an InAppWebView to the widget tree.
  • InAppBrowser: In-App Browser using native WebView.
  • ChromeSafariBrowser: In-App Browser using Chrome Custom Tabs on Android / SFSafariViewController on iOS.
  • InAppLocalhostServer: This class allows you to create a simple server on http://localhost:[port]/. The default port value is 8080.
  • CookieManager: This class implements a singleton object (shared instance) which manages the cookies used by WebView instances.
  • HttpAuthCredentialDatabase: This class implements a singleton object (shared instance) that manages the shared HTTP auth credentials cache.
  • WebStorageManager: This class implements a singleton object (shared instance) which manages the web storage used by WebView instances.
Comments
  • Add support for WebRTC on iOS (WKWebView)

    Add support for WebRTC on iOS (WKWebView)

    WKWebView doesn't support WebRTC natively:

    • https://forums.developer.apple.com/thread/88052
    • https://stackoverflow.com/questions/45055329/does-webkit-in-ios-11-beta-support-webrtc/49467964#49467964
    • https://stackoverflow.com/questions/54319924/access-camera-or-webcam-without-webrtc
    • https://stackoverflow.com/questions/46988450/wkwebview-or-uiwebview-in-ios-app-does-this-webview-support-webrtc

    Useful links:

    • https://stackoverflow.com/questions/39639181/add-webrtc-in-webview-in-ios
    • https://webrtc.org/native-code/ios/
    • https://webrtchacks.com/guide-to-safari-webrtc/
    • https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_ios

    How to solve this problem?

    • Taking swift code from here and make it work on this Flutter plugin: https://github.com/cordova-rtc/cordova-plugin-iosrtc
    • https://stackoverflow.com/questions/43916436/enable-camera-and-mic-access-in-wkwebview
    • https://github.com/react-native-webrtc/react-native-webrtc

    This is the unique solution I have found (this requires a lot of work).

    enhancement 
    opened by pichillilorenzo 47
  • The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility

    The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility

    After flutter upgrade, the project not building.

    Environment

    Flutter 1.12.13+hotfix.5 • channel stable • https://github.com/flutter/flutter.git Framework • revision 27321ebbad (2 days ago) • 2019-12-10 18:15:01 -0800 Engine • revision 2994f7e1e6 Tools • Dart 2.7.0

    Flutter version: **Plugin version: "2.1.0+1" Android version:
    iOS version: Xcode version:
    Device information:

    Description

    Expected behavior:

    Current behavior:

    Steps to reproduce

    Just try build.

    Images

    image

    LOG:

    Launching lib\main.dart on Android SDK built for x86 in debug mode...

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':app:preDebugBuild'.

    Android dependency 'androidx.loader:loader' has different version for the compile (1.0.0-rc01) and runtime (1.0.0) classpath. You should manually set the same version via DependencyResolution

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 23s The built failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetfier to solve the incompatibility. Building plugin flutter_inappwebview... The plugin flutter_inappwebview could not be built due to the issue above. Exited (sigterm)

    opened by akaytatsu 41
  • Build failed on Android Target SDK 33

    Build failed on Android Target SDK 33

    Environment

    | Technology | Version | | -------------------- | ------------- | | Flutter version | 3.0.2 | | Plugin version | 5.4.3+7 | | Android version | API 33 | | iOS version | Not Tested on iOS | | Xcode version | - |

    Device information:

    Description

    Break when target build version changed to 33 (Tiramisu on Android) Expected behavior: Build Complete Current behavior: Build Failed

    Steps to reproduce

    Nothing special to do. My project was able to build on targetSDK 32, but failed on targetSDK 33.

    1. Create a simple project, set target SDK and compile SDK version to 33 in Android setting.
    2. Depend on this library.

    Images

    Stacktrace/Logcat

    Launching lib/main.dart on sdk gphone64 arm64 in debug mode... /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:280: error: cannot find symbol settings.setAppCachePath(options.appCachePath); ^ symbol: method setAppCachePath(String)

    location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:494: error: cannot find symbol settings.setAppCacheEnabled(false); ^ symbol: method setAppCacheEnabled(boolean) location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:504: error: cannot find symbol settings.setAppCacheEnabled(true); ^ symbol: method setAppCacheEnabled(boolean) location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:515: error: cannot find symbol settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath()); ^ symbol: method setAppCachePath(String) location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:517: error: cannot find symbol settings.setAppCacheEnabled(true); ^ symbol: method setAppCacheEnabled(boolean) location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:521: error: cannot find symbol settings.setAppCacheEnabled(false); ^ symbol: method setAppCacheEnabled(boolean) location: variable settings of type WebSettings /Users/dararii/Dev/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_inappwebview-5.4.3+7/android/src/main/java/com/pichillilorenzo/flutter_inappwebview/in_app_webview/InAppWebView.java:767: error: cannot find symbol settings.setAppCachePath(newOptions.appCachePath); ^ symbol: method setAppCachePath(String) location: variable settings of type WebSettings

    Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 7 errors FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':flutter_inappwebview:compileDebugJavaWithJavac'.

    Compilation failed; see the compiler error output for details.

    • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

    • Get more help at https://help.gradle.org

    BUILD FAILED in 27s Exception: Gradle task assembleDebug failed with exit code 1 Exited

    bug 
    opened by Dararii 39
  • App Crashes after clicking on dropdown (Using inappwebview)

    App Crashes after clicking on dropdown (Using inappwebview)

    Environment

    Android version: Android 6.0 Device information: Emulator (Pixel 3a XL API 23)

    Description

    Expected behavior: Should open the dropdown

    Current behavior: App Crashes

    Steps to reproduce

    1. Open any HTML dropdown

    Stacktrace/Logcat

    --------- beginning of crash 11-01 22:35:30.694 2978-2978/com.vuka.vuka_app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.vuka.vuka_app, PID: 2978 android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.content.res.Resources.getValue(Resources.java:1351) at android.content.res.Resources.loadXmlResourceParser(Resources.java:2774) at android.content.res.Resources.getLayout(Resources.java:1165) at android.view.LayoutInflater.inflate(LayoutInflater.java:421) at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:378) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) at org.chromium.content.browser.input.SelectPopupAdapter.getView(SelectPopupAdapter.java:56) at android.widget.AbsListView.obtainView(AbsListView.java:2346) at android.widget.ListView.measureHeightOfChildren(ListView.java:1280) at android.widget.ListView.onMeasure(ListView.java:1188) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) at android.view.View.measure(View.java:18788) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1191) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

    Flutter doctor log

    [✓] Flutter (Channel stable, v1.9.1+hotfix.2, on Mac OS X 10.15 19A603, locale en-GB) • Flutter version 1.9.1+hotfix.2 at /Users/sayanporya/Flutter/flutter • Framework revision 2d2a1ffec9 (8 weeks ago), 2019-09-06 18:39:49 -0700 • Engine revision b863200c37 • Dart version 2.5.0

    [!] Android toolchain - develop for Android devices (Android SDK version 28.0.3) • Android SDK at /Users/sayanporya/Library/Android/sdk • Android NDK location not configured (optional; useful for native profiling support) • Platform android-29, build-tools 28.0.3 • ANDROID_HOME = /Users/sayanporya/Library/Android/sdk • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405) ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

    [!] Xcode - develop for iOS and macOS (Xcode 10.3) • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 10.3, Build version 10G8 ✗ CocoaPods not installed. CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side. Without CocoaPods, plugins will not work on iOS or macOS. For more info, see https://flutter.dev/platform-plugins To install: sudo gem install cocoapods pod setup

    [✓] Android Studio (version 3.5) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin version 39.0.3 • Dart plugin version 191.8423 • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

    [✓] IntelliJ IDEA Community Edition (version 2019.1.1) • IntelliJ at /Applications/IntelliJ IDEA CE.app • Flutter plugin version 38.2.2 • Dart plugin version 191.8369

    [✓] VS Code (version 1.38.1) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.4.1

    [✓] Connected device (1 available) • Android SDK built for x86 • emulator-5554 • android-x86 • Android 6.0 (API 23) (emulator)

    opened by eco4ndly 36
  • [InAppWebview]: window.flutter_inappwebview.callHandler is not a function

    [InAppWebview]: window.flutter_inappwebview.callHandler is not a function

    Environment

    Flutter version: 1.10.15 Plugin version: ^2.1.0+1 Android version: 9 iOS version: Xcode version:
    Device information:

    Description

    I use demo to load url, but get javascript error when click div. I/flutter (27593): Uncaught TypeError: window.flutter_inappwebview.callHandler is not a function

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            div {
                font-size: 30px;
            }
        </style>
    </head>
    <body>
        <div>click</div>
        <script>
            window.addEventListener("flutterInAppWebViewPlatformReady", function(event) {
                console.log("ready");
    
                var div = document.body.querySelector('div');
                div.addEventListener('click', function() {
                    window.flutter_inappwebview.callHandler('handleData', 1, true, ['bar', 5], {foo: 'baz'});
                });
            });
        </script>
    </body>
    </html>
    
    onLoadStop:
        (InAppWebViewController controller, String url) async {
      setState(() {
        this.url = url;
      });
    
      webView.addJavaScriptHandler(
          handlerName: 'handleData',
          callback: (args) {
            print(args);
          });
    },
    
    opened by OPY-bbt 34
  • Infinite Loading with very long repeated log

    Infinite Loading with very long repeated log

    Environment

    | Technology | Version | | -------------------- | ------------- | | Flutter version | 2.0.3 & 2.0.4 | | Plugin version | flutter_inappwebview: ^5.3.1 | | Android version | 10, 8, 7 | | iOS version | NA | | Xcode version | NA |

    Device information: Redmi, Realme, and Samsung

    Description

    I am opening some website, let assume that I have open it 10 times, out of 7 times it open normally rest like 3 times it when into infinite loading and throwing very long log message. Also, the internet speed is very good like 1/2 Mbps when it goes into infinite loading. So, there is some problem for definite.

    I have open several different website and i have same issue.

    **Video link- **- https://photos.app.goo.gl/PD5n2v7ZweHnjypB7

    Current behavior:

    • Several website should open normally even I open 1st time or 10th time.

    Steps to reproduce

    1. This
    2. Than that
    3. Then

    Images

    Stacktrace/Logcat

    I am getting repeat logs so posting few of them-

    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 6 lines
    8
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 14 lines
    2
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 7 lines
    3
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 2 lines
    9
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 8 lines
    3
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 4 lines
    2
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 4 lines
    2
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    I/chatty  (20916): uid=10618(com.example.tbo) AdWorker(Defaul identical 1 line
    6
    D/AudioManager(20916): getStreamVolume isRestricted mode = 0
    

    I also mailing you my app link on the mail for the reference

    bug 
    opened by ycv005 33
  • fix: fixed Xcode 14 build error

    fix: fixed Xcode 14 build error

    Connection with issue(s)

    Resolve issue #1216

    Connected to #1216

    Testing and Review Notes

    Screenshots or Videos

    To Do

    • [x] double check the original issue to confirm it is fully satisfied
    • [x] add testing notes and screenshots in PR description to help guide reviewers
    • [x] request the "UX" team perform a design review (if/when applicable)
    iOS 
    opened by CodeEagle 27
  • Page Keep Reloading on Keyboard Press

    Page Keep Reloading on Keyboard Press

    I am using this version flutter_inappwebview: ^3.3.0+3.

    Below is my codes. The problem is that at some times it goes directly to this page only http://.../pay.php and stopped. I want direct to go this page and send the post value which will redirect to the payement gateway page. . Secondly at times this works perfectly but when I press the keyboard example to enter credit card details the page gets reload and I can never complete the form. How do I resolve this issue of keyboard and the proper redirection ? I have even put this line resizeToAvoidBottomInset: false,

    webView.postUrl(
                          url: 'http://*.*.*.*/pay.php', 
                          postData: Uint8List.fromList(utf8.encode("detail=1&amount=200&order_id=A123&name=thiscustomer&[email protected]&phone=12345678"))
                          );
    
    class OnlinePaymentPage extends StatefulWidget {
      final String orderID;  
      final double totalPayment;  
      
      OnlinePaymentPage({
        Key key, 
        @required this.orderID,    
        @required this.totalPayment,   
      }) : super(key: key);
      @override
      _OnlinePaymentPageState createState() => new _OnlinePaymentPageState();
    }
    class _OnlinePaymentPageState extends State<OnlinePaymentPage>  {
     
      InAppWebViewController webView;
      String url = "";
      double progress = 0;
      
      @override
      void initState() {
         super.initState();
      }
    
      @override
      void dispose() {   
        super.dispose();
        
      }
      
      @override
      Widget build(BuildContext context) {
          return Scaffold(
              resizeToAvoidBottomInset: false, 
              appBar: AppBar(
                title: const Text('Online Payment'),
              ),
              body: Container(
                child: Column(children: <Widget>[
                  Container(
                    padding: EdgeInsets.all(5.0),
                    child: Text(
                        "CURRENT URL\n${(url.length > 50) ? url.substring(0, 50) + "..." : url}"),
                  ),
                  
                  Expanded(
                    child: Container(
                      margin: const EdgeInsets.all(10.0),
                      
                      child: InAppWebView(
                        initialUrl: "http://*.*.*.*/pay.php",
                        initialHeaders: {},
                        initialOptions: InAppWebViewGroupOptions(
                          crossPlatform: InAppWebViewOptions(
                              debuggingEnabled: true,
                          )
                        ),
                        onWebViewCreated: (InAppWebViewController controller) {
                        webView = controller;
                        webView.postUrl(
                          url: 'http://*.*.*.*/pay.php', 
                          postData: Uint8List.fromList(utf8.encode("detail=1&amount=200&order_id=A123&name=thiscustomer&[email protected]&phone=12345678"))
                          );
                        },
                        onLoadStart: (InAppWebViewController controller, String url) {
                          setState(() {
                            this.url = url;
                          });
                        },
                        onLoadStop: (InAppWebViewController controller, String url) async {
                          if (url.startsWith("http://*.*.*.*/pay.php")) {
                            // get your token from url
                            RegExp regExp = new RegExp("access_token=(.*)");
                            String token = regExp.firstMatch(url)?.group(1);
                            print(token);
    
                            // or using CookieManager
                            //CookieManager cookieManager = CookieManager.instance();
                            //Cookie token = await cookieManager.getCookie(url: "https://myUrl.com/auth-response", name: "access_token");
                            //print(token.value);
    
                            // or using javascript to get access_token from localStorage
                            //String token = await controller.evaluateJavascript(source: "localStorage.getItem('access_token')");
                            print(token);
                          }
                        },
                        onProgressChanged: (InAppWebViewController controller, int progress) {
                          setState(() {
                            this.progress = progress / 100;
                          });
                        },
                      ),
                    ),
                  ),
                  
              ])),
            
          );
      }
          
      }
    
    
    opened by newbieflutter 27
  • Module 'flutter_inappwebview' not found Xcode

    Module 'flutter_inappwebview' not found Xcode

    When I try to build the app it comes up with the error message: "Module 'flutter_inappwebview' not found". Can't find where this is coming from because me PodsFile says it install was installed.

    Schermafbeelding 2020-07-18 om 15 58 34

    I also indicated the Swift version in the PodsFile

    [✓] Flutter (Channel stable, v1.17.3, on Mac OS X 10.15.6 19G46c, locale nl-NL)
        • Flutter version 1.17.3 at /Users/simon/Developer/flutter
        • Framework revision b041144f83 (6 weeks ago), 2020-06-04 09:26:11 -0700
        • Engine revision ee76268252
        • Dart version 2.8.4
    
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
        • Android SDK at /Users/simon/Library/Android/sdk
        • Platform android-30, build-tools 29.0.2
        • ANDROID_HOME = /Users/simon/Library/Android/sdk
        • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
        • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
        • All Android licenses accepted.
    
    [✓] Xcode - develop for iOS and macOS (Xcode 11.5)
        • Xcode at /Applications/Xcode.app/Contents/Developer
        • Xcode 11.5, Build version 11E608c
        • CocoaPods version 1.9.3
    
    [✓] Android Studio (version 4.0)
        • Android Studio at /Applications/Android Studio.app/Contents
        • Flutter plugin version 46.0.2
        • Dart plugin version 193.7361
        • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
    
    [✓] VS Code (version 1.47.0)
        • VS Code at /Applications/Visual Studio Code.app/Contents
        • Flutter extension version 3.12.2
    
    [✓] Connected device (2 available)
        • iPhone van Simon  • 33a65f7086b3a19889fd7f2594e4e3ebf4531ad1 • ios • iOS 14.0
        • iPhone 11 Pro Max • 239DCA9C-7F87-4E39-AF31-10A4A44A1BD2     • ios • com.apple.CoreSimulator.SimRuntime.iOS-13-5 (simulator)
    

    PodsFile:

    # Uncomment this line to define a global platform for your project
    # platform :ios, '9.0'
    
    platform :ios, '10.0'
    
    
    # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
    ENV['COCOAPODS_DISABLE_STATS'] = 'true'
    
    project 'Runner', {
      'Debug' => :debug,
      'Profile' => :release,
      'Release' => :release,
    }
    
    def parse_KV_file(file, separator='=')
      file_abs_path = File.expand_path(file)
      if !File.exists? file_abs_path
        return [];
      end
      generated_key_values = {}
      skip_line_start_symbols = ["#", "/"]
      File.foreach(file_abs_path) do |line|
        next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
        plugin = line.split(pattern=separator)
        if plugin.length == 2
          podname = plugin[0].strip()
          path = plugin[1].strip()
          podpath = File.expand_path("#{path}", file_abs_path)
          generated_key_values[podname] = podpath
        else
          puts "Invalid plugin specification: #{line}"
        end
      end
      generated_key_values
    end
    
    target 'Runner' do
      use_frameworks!
      use_modular_headers!
    
      # Flutter Pod
    
      copied_flutter_dir = File.join(__dir__, 'Flutter')
      copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
      copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
      unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
        # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
        # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
        # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
    
        generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
        unless File.exist?(generated_xcode_build_settings_path)
          raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
        end
        generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
        cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
    
        unless File.exist?(copied_framework_path)
          FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
        end
        unless File.exist?(copied_podspec_path)
          FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
        end
      end
    
      
    
      # Keep pod path relative so it can be checked into Podfile.lock.
      pod 'Flutter', :path => 'Flutter'
    
      # Plugin Pods
    
      # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
      # referring to absolute paths on developers' machines.
      system('rm -rf .symlinks')
      system('mkdir -p .symlinks/plugins')
      plugin_pods = parse_KV_file('../.flutter-plugins')
      plugin_pods.each do |name, path|
        symlink = File.join('.symlinks', 'plugins', name)
        File.symlink(path, symlink)
        pod name, :path => File.join(symlink, 'ios')
      end
    end
    
    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['SWIFT_VERSION'] = '5.0'  # required by simple_permission
          config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
      end
    end
    

    Pubspec.yaml

    https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
    version: 1.0.0+1
    
    environment:
      sdk: ">=2.7.0 <3.0.0"
    
    dependencies:
      flutter:
        sdk: flutter
    
      cupertino_icons: ^0.1.3
      flutter_spinkit: ^4.1.2
      http: ^0.12.1
      intl: ^0.16.1
      flutter_vector_icons: ^0.2.1
      sticky_headers: "^0.1.8"
      google_maps_flutter: ^0.5.28+1
      map_launcher: ^0.6.0
      settings_ui: ^0.3.0
      geolocator: ^5.3.2+2
      flutter_inappwebview: ^4.0.0+4
      provider: ^4.3.1
      shared_preferences: ^0.5.8
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
    flutter:
      uses-material-design: true
      assets:
        - assets/
    
      fonts:
        - family: ProximaNova
          fonts:
            - asset: assets/fonts/ProximaNova-Regular.otf
            - asset: assets/fonts/Proxima-Nova-Bold.otf
    
    bug 
    opened by SimonRijn 25
  • is Caching working? Why won't website load faster?

    is Caching working? Why won't website load faster?

    Environment

    | Technology | Version | | -------------------- | ------------- | | Flutter version | 2.0.3 | | Plugin version | 5.1.0+4 | | Android version | 10 | | iOS version | | | Xcode version | |

    Device information: Realme 3 Pro

    Description

    Expected behavior: Website to load fast on 2nd or 3rd or above revisit.

    Current behavior: Website doesn't load fast either 2nd, 3rd, or above revisit. I have test on my devices with good internet speed.

    @pichillilorenzo Within CrossPlatform option, since the cacheEnabled is automatically set to True, I really want to know, whether it is working or not. And if it is working, then why is taking so much time. How to test caching part? Any other way to make site load faster without hampering or breaking the website.

    @tneotia Did you know any other way or solution for this ?

    Note- I have good and proper Internet speed.

    Images

    Stacktrace/Logcat

    bug 
    opened by ycv005 24
  • InAppBrowserActivity.onCreate NullPointerException - Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

    InAppBrowserActivity.onCreate NullPointerException - Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference

    Environment

    | Technology | Version | | -------------------- | ------------- | | Flutter version | 1.22.5 | | Plugin version | 5.0 (mater branch from github) | | Android version | 8.1.0 | | iOS version | NA | | Xcode version | NA |

    Device information:

    Description

    App got crash while running the app.

    Expected behavior: App shouldn't be crash.

    Current behavior:

    Here is the log from the Firebase Crashlytics-

    HIGHLIGHTED ERROR

    InAppBrowserActivity.java line 16
    com.pichillilorenzo.flutter_inappwebview.InAppBrowser.InAppBrowserActivity.onCreate
    
    Fatal Exception: java.lang.RuntimeException
    Unable to start activity ComponentInfo{com.example.app/com.pichillilorenzo.flutter_inappwebview.InAppBrowser.InAppBrowserActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
    android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2778)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
    Caused by java.lang.NullPointerException
    Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
    com.pichillilorenzo.flutter_inappwebview.InAppBrowser.InAppBrowserActivity.onCreate (InAppBrowserActivity.java:16)
    android.app.Activity.performCreate (Activity.java:7009)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
    
    ChromeCustomTabsActivity.java line 18
    com.pichillilorenzo.flutter_inappwebview.ChromeCustomTabs.ChromeCustomTabsActivity.onCreate
    
    Fatal Exception: java.lang.RuntimeException
    Unable to start activity ComponentInfo{com.example.app/com.pichillilorenzo.flutter_inappwebview.ChromeCustomTabs.ChromeCustomTabsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
    android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2778)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
    Caused by java.lang.NullPointerException
    Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
    com.pichillilorenzo.flutter_inappwebview.ChromeCustomTabs.ChromeCustomTabsActivity.onCreate (ChromeCustomTabsActivity.java:18)
    android.app.Activity.performCreate (Activity.java:7009)
    android.app.Activity.performCreate (Activity.java:7000)
    android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1214)
    android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2731)
    android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2856)
    android.app.ActivityThread.-wrap11 (ActivityThread.java)
    android.app.ActivityThread$H.handleMessage (ActivityThread.java:1589)
    android.os.Handler.dispatchMessage (Handler.java:106)
    android.os.Looper.loop (Looper.java:164)
    android.app.ActivityThread.main (ActivityThread.java:6494)
    java.lang.reflect.Method.invoke (Method.java)
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:438)
    com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
    

    If you need more info let me know.

    @pichillilorenzo please fix it before next release of the plugin. Highly appreciated for the fix

    bug 
    opened by ycv005 24
  • Fix no horizontal scroll x for context menu for pages with horizontal…

    Fix no horizontal scroll x for context menu for pages with horizontal…

    This fixes an issue that I found while working on my app lrorpilla/jidoujisho#122 where I found that when a page is horizontally scrollable (typical when there is vertical text which can be found and used by CJK languages), the custom context menu does not show because it is rendered on the edge of the screen nowhere to be seen.

    The solution is simply to add the offset so that the context menu is visible when horizontally scrolled.

    android 
    opened by lrorpilla 0
  • Release apk not download direct link video. only playing...

    Release apk not download direct link video. only playing...

    • [x] I have read the Getting Started section
    • [x] I have already searched for the same problem

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | | | Plugin version | | | Android version | | | iOS version | | | macOS version | | | Xcode version | |

    Device information:

    Description

    Expected behavior:

    Current behavior:

    Steps to reproduce

    1. This
    2. Than that
    3. Then

    Images

    Stacktrace/Logcat

    bug 
    opened by dghub-founder 1
  • [web platform] unable to load a pdf page on example project

    [web platform] unable to load a pdf page on example project

    replacing url in example project from

    https://flutter.dev

    to

    https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf

    pdf is not showed, how can I solve? thanks a lot!

    opened by dariolr 1
  • I am using the 6.0 version of flutter_inappwebview. i want to use mobile mode on my ipad

    I am using the 6.0 version of flutter_inappwebview. i want to use mobile mode on my ipad

    I am using the flutter_inappwebview: ^6.0.0-beta.18 version of flutter_inappwebview. i want to use mobile mode on my ipad.

    I am trying to use If I use initialoption to specify it, it will not be in mobile mode.

    InAppWebView(
                key: webViewKey,
                initialUrlRequest: URLRequest(url: WebUri(releasedApp)),
                initialUserScripts: UnmodifiableListView([
                  UserScript(source: """
                      window.addEventListener('DOMContentLoaded', function(event) {
                        var header = document.querySelector('header');
                        if (header != null) {
                          header.remove(); 
                        }   
                      });
                      """, injectionTime: UserScriptInjectionTime.AT_DOCUMENT_START)
                ]),
                onWebViewCreated: (controller) {
                  webViewController = controller;
                },
              ),
    
    opened by jtaxiexpress 1
  • iOS about:blank popup not loading page

    iOS about:blank popup not loading page

    • [x] I have read the Getting Started section
    • [x] I have already searched for the same problem

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3.3.9 | | Plugin version | flutter_inappwebview: ^5.7.1+1
    url_launcher: ^6.1.7 | | Android version | Android Studio Dolphin ( 2021.3.1 Patch 1 ) | | iOS version | 16.2 | | macOS version | 13.1 | | Xcode version | 14.2 |

    Device information:

    Description

    Expected behavior:

    • Show popup window with content.
    • In Android, it works

    Current behavior:

    • Empty page (iOS)

    Steps to reproduce

    Sample code

    show

    main.dart (whole)

     import 'dart:async';
    
    import 'package:flutter/material.dart';
    import 'package:flutter_inappwebview/flutter_inappwebview.dart';
    import 'package:url_launcher/url_launcher.dart';
    
    void main() {
      runApp(const MyApp());
    }
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'iOS about_blank Sample',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: const MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key});
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
    
      InAppWebViewController? _inAppWebViewController;
    
      final Completer<InAppWebViewController> _controller =
      Completer<InAppWebViewController>();
    
      String initUrl = 'https://postcode.map.daum.net/guide';
    
      InAppWebViewGroupOptions options = InAppWebViewGroupOptions(
        crossPlatform: InAppWebViewOptions(
          preferredContentMode: UserPreferredContentMode.MOBILE,
          cacheEnabled: true,
          mediaPlaybackRequiresUserGesture: true,
          javaScriptEnabled: true,
          javaScriptCanOpenWindowsAutomatically: true,
          useShouldOverrideUrlLoading: true,
        ),
        android: AndroidInAppWebViewOptions(
          useHybridComposition: false,
          supportMultipleWindows: true,
          domStorageEnabled: true,
          databaseEnabled: true,
          cacheMode: AndroidCacheMode.LOAD_CACHE_ELSE_NETWORK,
          mixedContentMode: AndroidMixedContentMode
              .MIXED_CONTENT_ALWAYS_ALLOW,
        ),
        ios: IOSInAppWebViewOptions(
          applePayAPIEnabled: true,
          allowsInlineMediaPlayback: true,
          ignoresViewportScaleLimits: true,
          sharedCookiesEnabled: true,
        ),
      );
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: InAppWebView(
            initialUrlRequest: URLRequest(url: Uri.parse(initUrl)),
            initialOptions: options,
            onWebViewCreated: (InAppWebViewController controller) {
              _controller.future.then((value) => _inAppWebViewController = value);
              _controller.complete(controller);
            },
            onLoadStart: (controller, url) {
              print("@Parent onLoadStart() $url");
            },
            onLoadStop: (controller, url) {
              print('@Parent onLoadStop() $url');
            },
            onLoadError: (controller, url, code, message) { /* do nothing */ },
            onLoadHttpError: (controller, url, code, message) { /* do nothing */ },
            onProgressChanged: (controller, progress) { /* do nothing */ },
            onCreateWindow: (controller, createWindowRequest) async {
              print("@Parent onCreateWindow(), $createWindowRequest");
              await _showPopUpWindow(context, createWindowRequest, controller);
              return true;
            },
            onCloseWindow: (controller) {
              print('@Parent onCloseWindow()');
              closeInAppWebView();
            },
          ),
        );
      }
    
      _showPopUpWindow(BuildContext context, CreateWindowAction createWindowRequest, InAppWebViewController controller) async {
        showDialog(
          barrierDismissible: true,
          context: context,
          builder: (context) {
            return Scaffold(
              body: Stack(
                children: [
                  InAppWebView(
                    windowId: createWindowRequest.windowId,
                    initialOptions: options,
                    onWebViewCreated: (controller) {
                      _inAppWebViewController = controller;
                    },
                    onCreateWindow: (controller, windowAction) async {
                      print("#popup onCreateWindow()");
                      return true;
                    },
                    onLoadStart: (controller, url) {
                      print('#popup onLoadStart() $url');
                    },
                    onLoadError: (controller, url, code, message) {
                      /* do nothing */
                    },
                    onLoadHttpError: (controller, url, code, message) {
                      /* do nothing */
                    },
                    onLoadStop: (controller, url) {
                      print("#popup onLoadStop() $url");
                    },
                    onCloseWindow: (controller) async {
                      print('#popup onCloseWindow()');
                      await _controller.future
                          .then((value) => _inAppWebViewController = value);
                      Navigator.pop(context, null);
                    },
                  ),
                  Positioned(
                    top: 5,
                    right: 10,
                    child: IconButton(
                      icon: const Icon(Icons.cancel, color: Colors.black),
                      onPressed: () {
                        _inAppWebViewController = controller;
                        Navigator.pop(context, null);
                      },
                    ),
                  ),
                ],
              ),
            );
          },
        );
      }
    }
    


    1. Run sample code
    2. Scroll down to below page
    3. click [우편번호 찾기](red box) button
    4. Webview shows popup window without any contents.

    Stacktrace/Logcat

    • Android
    I/flutter ( 2141): @Parent onLoadStart() https://postcode.map.daum.net/guide
    I/flutter ( 2141): @Parent onLoadStop() https://postcode.map.daum.net/guide
    I/flutter ( 2141): @Parent onCreateWindow(), {request: { ... } ... }
    
    • iOS
    flutter: @Parent onLoadStart() https://postcode.map.daum.net/guide
    flutter: @Parent onLoadStop() https://postcode.map.daum.net/guide
    flutter: @Parent onCreateWindow(), {request: { ... } ... }
    flutter: #popup onLoadStart()
    flutter: #popup onLoadStop() about:blank
    
    bug 
    opened by xxunghee 2
Releases(v6.0.0-beta.22)
  • v6.0.0-beta.22(Dec 15, 2022)

    • Updated window.flutter_inappwebview.callHandler implementation: if there is an error/exception on Flutter/Dart side, the callHandler will reject the JavaScript promise with the error/exception message, so you can catch it also on JavaScript side
    • Fixed Android Web Storage Manager deleteAllData and deleteOrigin methods implementation
    • Fixed "Xiaomi store - Conflict of Privacy Permissions, android.permission.MY_READ_INSTALLED_PACKAGES" #1462
    • Fixed "Flutter 3.0.5 compilation issue" #1475
    Source code(tar.gz)
    Source code(zip)
  • v5.7.2+3(Dec 15, 2022)

  • v6.0.0-beta.21(Dec 6, 2022)

  • v6.0.0-beta.20(Dec 3, 2022)

    • Using Android WebViewClientCompat for Chromium-based WebView if the WebView package major version is >= 73 (https://bugs.chromium.org/p/chromium/issues/detail?id=925887)
    • Updated code docs
    • Fixed "Unexpected addWebMessageListener behaviour" #1422
    Source code(tar.gz)
    Source code(zip)
  • v5.7.2+2(Dec 3, 2022)

  • v6.0.0-beta.19(Nov 30, 2022)

  • v5.7.2+1(Nov 30, 2022)

  • v6.0.0-beta.18(Nov 28, 2022)

  • v6.0.0-beta.17(Nov 25, 2022)

  • v6.0.0-beta.16(Nov 23, 2022)

  • v5.7.2(Nov 23, 2022)

  • v6.0.0-beta.15(Nov 22, 2022)

    • Automatically infer useShouldOverrideUrlLoading, useOnLoadResource, useOnDownloadStart, useShouldInterceptAjaxRequest, useShouldInterceptFetchRequest, useShouldInterceptRequest, useOnRenderProcessGone, useOnNavigationResponse settings if their value is null and the corresponding event is implemented by the WebView (InAppWebView and HeadlessInAppWebView, not InAppBrowser) before it's native initialization

    BREAKING CHANGES

    • All PrintJobSettings properties are optionals
    • All PullToRefreshSettings properties are optionals
    • All WebAuthenticationSessionSettings properties are optionals
    Source code(tar.gz)
    Source code(zip)
  • v5.7.1+2(Nov 18, 2022)

  • v6.0.0-beta.14(Nov 16, 2022)

  • v5.7.1+1(Nov 16, 2022)

  • v6.0.0-beta.13(Nov 15, 2022)

    • Added ContentBlockerActionType.BLOCK_COOKIES and ContentBlockerActionType.IGNORE_PREVIOUS_RULES for iOS and macOS platforms
    • Updated ContentBlockerTrigger.urlFilterIsCaseSensitive for Android
    • Fixed Android ContentBlockerActionType.CSS_DISPLAY_NONE usage
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta.12(Nov 2, 2022)

    6.0.0-beta.12

    • Removed willSuppressErrorPage WebView Android setting in favor of disableDefaultErrorPage.
    • Added isMultiProcessEnabled static method on InAppWebViewController for Android
    • Added onContentSizeChanged WebView event for iOS
    • Added onPermissionRequestCanceled, onRequestFocus WebView events for Android
    • Added defaultVideoPoster WebView setting for Android
    • Added TracingController for Android WebViews

    BREAKING CHANGES

    • Removed willSuppressErrorPage WebView Android setting. Use disableDefaultErrorPage instead.
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta.11(Oct 27, 2022)

  • v6.0.0-beta.10(Oct 27, 2022)

    • Created WebUri class to replace Uri dart core type. Related to:
      • "Uri.tryParse will make the host to be lowercase" #1402
      • "An error occurs when using a specific intent" #1328
      • "Android shouldOverrideUrlLoading not working" #1350

    BREAKING CHANGES

    • Replaced the usage of Uri type with the new WebUri type
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta.9(Oct 26, 2022)

    • Added headers, otherLikelyURLs, referrer arguments on ChromeSafariBrowser.open method for Android
    • Added onNavigationEvent, onServiceConnected, onRelationshipValidationResult events on ChromeSafariBrowser for Android
    • Added mayLaunchUrl, launchUrl, updateActionButton, validateRelationship, setSecondaryToolbar, updateSecondaryToolbar methods on ChromeSafariBrowser for Android
    • Added startAnimations, exitAnimations, navigationBarColor, navigationBarDividerColor, secondaryToolbarColor, alwaysUseBrowserUI ChromeSafariBrowser settings for Android
    • Added ChromeSafariBrowserMenuItem.image property for iOS
    • Added didLoadSuccessfully optional argument on ChromeSafariBrowser.onCompletedInitialLoad event for iOS
    • Added onInitialLoadDidRedirect, onWillOpenInBrowser events on ChromeSafariBrowser for iOS
    • Added activityButton, eventAttribution ChromeSafariBrowser settings for iOS
    • Added clearWebsiteData, prewarmConnections, invalidatePrewarmingToken, getMaxToolbarItems static methods on ChromeSafariBrowser for iOS
    • Added getVariationsHeader WebView static method

    BREAKING CHANGES

    • ChromeSafariBrowser.onCompletedInitialLoad event has an optional argument
    • ChromeSafariBrowserMenuItem.action and ChromeSafariBrowserActionButton.action can be null
    • All ChromeSafariBrowserSettings properties are optionals
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta.8(Oct 24, 2022)

  • v5.7.1(Oct 24, 2022)

  • v6.0.0-beta.7(Oct 22, 2022)

  • v6.0.0-beta.6(Oct 22, 2022)

    • Added InAppWebViewSettings.allowBackgroundAudioPlaying for Android
    • Added WebViewAssetLoader and InAppWebViewSettings.webViewAssetLoader for Android

    BREAKING CHANGES

    • WebResourceResponse.contentType and WebResourceResponse.contentEncoding properties can be null
    Source code(tar.gz)
    Source code(zip)
  • v5.7.0(Oct 22, 2022)

  • v5.6.0+2(Oct 22, 2022)

  • v5.6.0+1(Oct 22, 2022)

  • v6.0.0-beta.5(Oct 20, 2022)

  • v6.0.0-beta.4(Oct 20, 2022)

  • v5.6.0(Oct 22, 2022)

    • Fixed "URLCredential.fromMap returns null for username" #1205
    • Fixed "Compare to webview_flutter, inappwebview is significant frame dropped while page scrolling" #1386
    • Merged "Fix hybrid composition laggy" #1387 (thanks to Doflatango)
    • Converted all Uri.parse into Uri.tryParse where possible
    Source code(tar.gz)
    Source code(zip)
Owner
Lorenzo Pichilli
I'm a Heroku Architecture Designer and a Software Engineer mostly focused on Web (FullStack) and Mobile Development. JavaScript, TypeScript & Flutter 💙.
Lorenzo Pichilli
A Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed apps.

Flutter AppAvailability Plugin A Flutter plugin that allows you to check if an app is installed/enabled, launch an app and get the list of installed a

Lorenzo Pichilli 89 Dec 2, 2022
Use dynamic and beautiful card view pagers to help you create great apps.

Use dynamic and beautiful card view pagers to help you create great apps. Preview New Feature v1.3.0 Change Alignment Left Center(Default) Right v1.4.

Jeongtae Kim 84 Dec 6, 2022
Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

On most operating systems, permissions aren't just granted to apps at install time. Rather, developers have to ask the user for permissions while the

Baseflow 1.7k Jan 3, 2023
Flutter Downloader - A plugin for creating and managing download tasks. Supports iOS and Android. Maintainer: @hnvn

Flutter Downloader A plugin for creating and managing download tasks. Supports iOS and Android. This plugin is based on WorkManager in Android and NSU

Flutter Community 789 Jan 3, 2023
Plugin to retrieve a persistent UDID across app reinstalls on iOS and Android.

flutter_udid Plugin to retrieve a persistent UDID across app reinstalls on iOS and Android. Getting Started import 'package:flutter_udid/flutter_udid.

Leon Kukuk 183 Dec 21, 2022
File picker plugin for Flutter, compatible with both iOS & Android and desktop (go-flutter).

File Picker A package that allows you to use the native file explorer to pick single or multiple files, with extensions filtering support. Currently s

Miguel Ruivo 985 Jan 5, 2023
A Flutter plugin to easily handle realtime location in iOS and Android. Provides settings for optimizing performance or battery.

Flutter Location Plugin This plugin for Flutter handles getting location on Android and iOS. It also provides callbacks when location is changed. Gett

Guillaume Bernos 953 Dec 22, 2022
Flutter geolocation plugin for Android and iOS.

geolocation Flutter geolocation plugin for Android API 16+ and iOS 9+. Features: Manual and automatic location permission management Current one-shot

Loup 221 Dec 27, 2022
A Flutter plugin for displaying local notifications on Android, iOS and macOS

Flutter Local Notifications plugin This repository consists hosts the following packages flutter_local_notifications: code for the cross-platform faci

Michael Bui 2.1k Dec 30, 2022
Android and iOS Geolocation plugin for Flutter

Flutter Geolocator Plugin A Flutter geolocation plugin which provides easy access to platform specific location services (FusedLocationProviderClient

Baseflow 1k Jan 5, 2023
Flutter Plugin for AR (Augmented Reality) - Supports ARKit on iOS and ARCore on Android devices

ar_flutter_plugin Flutter Plugin for AR (Augmented Reality) - Supports ARKit for iOS and ARCore for Android devices. Many thanks to Oleksandr Leuschen

Lars Carius 222 Jan 4, 2023
A lightweight Flutter plugin for making payments and printing on MyPos

my_poster ?? my_poster is in beta - please provide feedback (and/or contribute) if you find issues ??️ A lightweight Flutter plugin for making payment

Antonio Mentone 3 Oct 10, 2022
Telegram stickers importing Flutter plugin for iOS and Android

TelegramStickersImport — Telegram stickers importing Flutter plugin for iOS and Android TelegramStickersImport helps your users import third-party pro

Iurii Dorofeev 20 Dec 3, 2022
Plugin to access VPN service for Flutter | Flutter 的 VPN 插件

Flutter VPN plugin This plugin help developers to access VPN service in their flutter app. 本插件帮助开发者在自己的应用内调用 VPN 服务。 The Android part was implemented

Xdea 277 Dec 28, 2022
Support to update the app badge on the launcher (both for Android and iOS)

Flutter App Badger plugin This plugin for Flutter adds the ability to change the badge of the app in the launcher. It supports iOS and some Android de

Edouard Marquez 258 Dec 25, 2022
Flutter library for iOS Widgets Extensions. Integrate a Widget into your App 🍏📱

flutter_widgetkit Flutter Library for the iOS ?? WidgetKit framework and Widget Communication Table of Contents ?? Introduction ??‍?? Installation ??‍

Fasky 227 Dec 31, 2022
A Flutter plugin that allows you to add an inline WebView.

native_webview A Flutter plugin that allows you to add an inline WebView. Motivation There is already a useful library for working with WebViews in Fl

hisaichi5518 46 Dec 14, 2022
Community WebView Plugin - Allows Flutter to communicate with a native WebView.

NOTICE We are working closely with the Flutter Team to integrate all the Community Plugin features in the Official WebView Plugin. We will try our bes

Flutter Community 1.4k Jan 7, 2023
Community WebView Plugin - Allows Flutter to communicate with a native WebView.

NOTICE We are working closely with the Flutter Team to integrate all the Community Plugin features in the Official WebView Plugin. We will try our bes

Flutter Community 1.4k Dec 22, 2022
A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by the flutter_inappwebview plugin.

Flutter Browser App A Full-Featured Mobile Browser App (such as the Google Chrome mobile browser) created using Flutter and the features offered by th

Lorenzo Pichilli 270 Jan 2, 2023