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
  • The video is full screen. When the direction changes, the layout does not change.

    The video is full screen. When the direction changes, the layout does not change.

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

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3.3.8 | | Plugin version | 6.0.0-beta.14 | | iOS version | 15-16 | | Xcode version | 14 |

    Device information:

    Description

    Expected behavior: When the screen is vertical, let the video be full screen, then turn off the full screen and rotate it to landscape screen. At this time, the page should be laid out in landscape screen. When the screen is horizontal, the video will be closed in full screen, and rotated to vertical screen, and the page will still be in vertical screen layout.

    Current behavior: When the screen is vertical, let the video be full screen, then turn off the full screen and rotate it to landscape screen, and the page layout is still vertical screen. When the screen is horizontal, the full screen of the video is closed, rotated to portrait screen, and the page is still horizontal.

    Steps to reproduce

    1. Open video full screen
    2. Exit full screen
    3. Rotate the screen direction

    Images

    Simulator Screen Shot - iPhone 14 Pro Max - 2022-11-19 at 15 05 39

    bug 
    opened by biner88 3
  • inappwebview shutdown trying to access files on device only on android

    inappwebview shutdown trying to access files on device only on android

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

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3.3.7 | | Plugin version | 5.7.1 | | Android version | 12 and 7.0 |

    Device information:

    Description

    Expected behavior:

    Current behavior:

    Steps to reproduce

    1. This
    2. Than that
    3. Then

    Images

    Stacktrace/Logcat

    bug 
    opened by wanoghoco 2
  • Changing pages without providing http or https explicitly

    Changing pages without providing http or https explicitly

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

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3.3.7 | | Plugin version | 5.7.1 | | Android version | n/a | | iOS version | 16.0 | | macOS version | n/a | | Xcode version | |

    Device information:

    Description

    Expected behavior: How to allow navigating to another page without providing http or https in the text field? Is there some kind of override that will allow me to do so? Current behavior: When i try to navigate to a different page without explicitly typing http or https, e.g. google.com, the plugin won't allow me to load the desired page and instead reloads the default page

    Steps to reproduce

    Here is the video:

    https://user-images.githubusercontent.com/54116985/201629297-be3c2dba-548c-4651-8c60-0c257e6654e2.mov

    bug 
    opened by gidrokolbaska 1
  • Getting issue in injecting js on Macos

    Getting issue in injecting js on Macos

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

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3+ | | Plugin version | 6+ | | macOS version | 12+ | | Xcode version | |

    Device information:

    Description

    Expected behavior: trying to inject a script in JS , but getting error

    Current behavior: Error : {messageLevel: 3, message: SyntaxError: Invalid regular expression: invalid group specifier name}

    Steps to reproduce

    Script which am trying to inject : https://github.com/wppconnect-team/wa-js/releases/latest/download/wppconnect-wa.js

    working fine in Android and IOS

    bug 
    opened by rohitsangwan01 1
  • Unexpected addWebMessageListener behaviour

    Unexpected addWebMessageListener behaviour

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

    Environment

    | Technology | Version | |-----------------| ------------- | | Flutter version | 3.3.7 | | Plugin version | 5.4.3+7 & 5.7.1 | | Android version | Any | | iOS version | Any | | macOS version | - | | Xcode version | 13.1 |

    Device information:

    Description

    I have a main screen with one InAppWebView. The main screen navigates to another screen with a simple list. From the list, it can navigate to another screen with one InAppWebView. addWebMessageListener is called twice using the same name in two places.

    Expected behavior: The main screen should still receive web messages when my another screen goes back to the list and returns to the main screen.

    Current behavior: The main screen can no longer receive any web messages. All messages are sent to the other screen, but it should be gone due to navigation.

    The assert fails because the webview sees that the listener is already there. However, this is not true.

    [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: 'package:flutter_inappwebview/src/in_app_webview/in_app_webview_controller.dart': Failed assertion: line 2497 pos 9: '!_webMessageListenerObjNames.contains(webMessageListener.jsObjectName)': jsObjectName mobileTarget was already added.
    #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
    #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
    #2      InAppWebViewController.addWebMessageListener (package:flutter_inappwebview/src/in_app_webview/in_app_webview_controller.dart:2497:9)
    

    This also freezes the iOS app in release.

    bug 
    opened by HenryQuan 3
Releases(v5.7.1+2)
  • 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)
  • v5.5.0+5(Oct 20, 2022)

    • Fixed HeadlessInAppWebView default size on Android
    • Fixed "🐞[Android] execution of the workmanager destroys in_app_webview library's platform channel" #1348
    • Fixed "HeadlessInAppWebView called from WorkManager background task triggers NullPointerException on missing context" #912
    Source code(tar.gz)
    Source code(zip)
  • v5.5.0+4(Oct 20, 2022)

  • v6.0.0-beta.3(Oct 19, 2022)

    • Added MacOS support
    • Added windowType, windowAlphaValue, windowStyleMask, windowTitlebarSeparatorStyle, windowFrame for MacOS InAppBrowserSettings
    • Added PrintJobInfo.printer
    • Added getContentWidth WebView method

    BREAKING CHANGES

    • Removed PrintJobInfo.printerId
    • All InAppWebViewSettings, InAppBrowserSettings properties are optionals
    • InAppBrowser.webViewController can be null
    Source code(tar.gz)
    Source code(zip)
  • v5.5.0+3(Oct 19, 2022)

    • Fixed iOS toolbarTopTintColor InAppBrowser option
    • Fixed iOS InAppBrowserOptions.hideProgressBar when getting options
    • Fixed missing implementation InAppBrowser.isHidden method on Android and iOS
    • Fixed "Attempt to invoke virtual method 'java.lang.String android.webkit.WebView.getUrl()' on a null object reference" #1324
    • Fixed "(Crash) NullPointerException at in_app_browser.InAppBrowserActivity.close' on a null object reference" #1278
    • Fixed "ios system version parser error" #1355
    • Removed unnamed constructors for all Singleton classes to avoid incorrect usage
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta.2(Oct 14, 2022)

  • v6.0.0-beta.1(Oct 14, 2022)

    • Deprecated old classes/properties/methods to make them eventually compatible with other Platforms and WebView engines.
    • Added Web support
    • Added ProxyController for Android
    • Added PrintJobController to manage print jobs
    • Added WebAuthenticationSession for iOS
    • Added FindInteractionController for Android and iOS
    • Added pauseAllMediaPlayback, setAllMediaPlaybackSuspended, closeAllMediaPresentations, requestMediaPlaybackState, isInFullscreen, getCameraCaptureState, setCameraCaptureState, getMicrophoneCaptureState, setMicrophoneCaptureState, loadSimulatedRequest WebView controller methods
    • Added underPageBackgroundColor, isTextInteractionEnabled, isSiteSpecificQuirksModeEnabled, upgradeKnownHostsToHTTPS, forceDarkStrategy, willSuppressErrorPage, algorithmicDarkeningAllowed, requestedWithHeaderMode, enterpriseAuthenticationAppLinkPolicyEnabled, isElementFullscreenEnabled, isFindInteractionEnabled, minimumViewportInset, maximumViewportInset WebView settings
    • Added onCameraCaptureStateChanged, onMicrophoneCaptureStateChanged WebView events
    • Added support for onPermissionRequest event on iOS 15.0+
    • Added debugLoggingSettings static property for WebView and ChromeSafariBrowser
    • Added WebViewFeature.DOCUMENT_START_SCRIPT Android feature support
    • Added getRequestedWithHeaderMode, setRequestedWithHeaderMode ServiceWorkerController methods
    • Added ContentBlockerTrigger.ifFrameUrl and ContentBlockerTrigger.loadContext properties
    • Added PullToRefreshController.isEnabled method
    • Updated getMetaThemeColor on iOS 15.0+
    • Deprecated onLoadError for onReceivedError. onReceivedError will be called also for subframes
    • Deprecated onLoadHttpError for onReceivedError. onReceivedHttpError will be called also for subframes

    BREAKING CHANGES

    • Updated Android minSdkVersion to 19
    • Updated minimum iOS version to 9.0
    • On Android, the InAppWebView widget uses hybrid composition by default (useHybridComposition: true)
    • All properties of GeolocationPermissionShowPromptResponse cannot be null
    • Removed URLProtectionSpace.iosIsProxy property
    • historyUrl and baseUrl of InAppWebViewInitialData can be null
    Source code(tar.gz)
    Source code(zip)
  • v5.5.0+1(Oct 14, 2022)

  • v5.5.0(Oct 13, 2022)

    5.5.0

    • Added Android direct camera capture feature
    • Fixed missing PullToRefreshController.isRefreshing iOS implementation
    • Fixed Android PullToRefreshController.setEnabled at runtime
    • Fixed iOS findNext
    • Fixed Android RendererPriorityPolicy.waivedWhenNotVisible type 'Null' is not a subtype of type 'bool'
    • Fixed iOS 14.0 crash when calling callAsyncJavaScript method
    • Merged "Android fix leaking MethodChannel through anonymous class" #1201 (thanks to emakar)
    • Merged "Fix RangeError: Maximum call stack size exceeded" #1208 (thanks to liasica)
    • Merged "fix: try to open with Chrome if default browser app does not support custom tabs" #1233 (thanks to addie9000)
    • Merged "fix: Prevent Android java.lang.NullPointerException in InAppWebViewCl…" #1237 (thanks to kamilpowalowski)
    • Merged "Android - Load client certificate from local storage" #1241 (thanks to akioyamamoto1977)
    • Merged "fix Theme_AppCompat_Dialog_Alert not found" #1262 (thanks to mohenaxiba)
    • Merged "Allow a cookie without a domain to be set on Android" #1295 (thanks to bagedevimo)
    • Merged "Catch and ignore utf8 format exception in getFavicons()" #1302 (thanks to Doflatango)
    • Merged "Disable exporting activity definitions for Android" #1313 (thanks to daanporon)
    • Merged "Add directoryIndex and documentRoot to InAppLocalhostServer option" #1319 (thanks to fa0311)
    • Merged "fix(ios): invoke onBrowserCreated when viewDidLoad is called with win…" #1344 (thanks to perffecto)

    BREAKING CHANGES

    • CookieManager.getCookie, CookieManager.deleteCookie and CookieManager.deleteCookies have the domain argument optional and without a default value
    Source code(tar.gz)
    Source code(zip)
  • v5.4.4+3(Oct 6, 2022)

  • v5.4.4+2(Oct 4, 2022)

  • v5.4.4(Oct 4, 2022)

  • v5.4.3+8(Oct 3, 2022)

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 88 Oct 6, 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 85 Nov 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 Nov 22, 2022
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 771 Nov 16, 2022
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 180 Nov 15, 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 964 Nov 18, 2022
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 948 Nov 24, 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 220 Oct 11, 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 Nov 20, 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 Nov 20, 2022
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 208 Nov 19, 2022
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 19 Oct 14, 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 270 Nov 19, 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 257 Oct 24, 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 221 Oct 30, 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 44 Nov 22, 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 Nov 24, 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 Nov 10, 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 257 Nov 26, 2022