diff --git a/.ci.yaml b/.ci.yaml index c5edcecf6d50..94780f2513cb 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -31,7 +31,7 @@ platform_properties: {"dependency": "android_sdk", "version": "version:33v6"}, {"dependency": "open_jdk", "version": "version:17"}, {"dependency": "curl", "version": "version:7.64.0"}, - {"dependency": "avd_cipd_version", "version": "build_id:8759428741582061553"} + {"dependency": "avd_cipd_version", "version": "build_id:8739520057779466577"} ] linux_android_legacy: properties: @@ -44,7 +44,7 @@ platform_properties: {"dependency": "open_jdk", "version": "version:17"}, {"dependency": "curl", "version": "version:7.64.0"}, {"dependency": "android_virtual_device", "version": "generic_android22.textpb"}, - {"dependency": "avd_cipd_version", "version": "build_id:8759428741582061553"} + {"dependency": "avd_cipd_version", "version": "build_id:8739520057779466577"} ] linux_desktop: properties: diff --git a/.ci/flutter_master.version b/.ci/flutter_master.version index b1c0bfa3b026..d4cb57680f8f 100644 --- a/.ci/flutter_master.version +++ b/.ci/flutter_master.version @@ -1 +1 @@ -cc13cd1f11916857ec5adbe43ce4e747fb07a5d5 +e7da16df76cd239ec9ed07f0d0caf78154e63986 diff --git a/.github/labeler.yml b/.github/labeler.yml index d44cb1298ec0..c1a7a366025d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -108,6 +108,11 @@ - any-glob-to-any-file: - packages/in_app_purchase/**/* +'p: interactive_media_ads': + - changed-files: + - any-glob-to-any-file: + - packages/interactive_media_ads/**/* + 'p: ios_platform_images': - changed-files: - any-glob-to-any-file: diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml deleted file mode 100644 index 8bf508c7c201..000000000000 --- a/.github/workflows/scorecards-analysis.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Scorecards supply-chain security -on: - push: - branches: - - main - -# Declare default permissions as read only. -permissions: read-all - -jobs: - analysis: - name: Scorecards analysis - runs-on: ubuntu-latest - permissions: - # Needed to upload the results to code-scanning dashboard. - security-events: write - actions: read - contents: read - # Needed to access OIDC token. - id-token: write - - steps: - - name: "Checkout code" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v2.4.0 - with: - persist-credentials: false - - - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.0.3 - with: - results_file: results.sarif - results_format: sarif - # Read-only PAT token. To create it, - # follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation. - repo_token: ${{ secrets.SCORECARD_READ_TOKEN }} - # Publish the results to enable scorecard badges. For more details, see - # https://github.com/ossf/scorecard-action#publishing-results. - # For private repositories, `publish_results` will automatically be set to `false`, - # regardless of the value entered here. - publish_results: true - - # Upload the results as artifacts (optional). - - name: "Upload artifact" - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v2.3.1 - with: - name: SARIF file - path: results.sarif - retention-days: 5 - - # Upload the results to GitHub's code scanning dashboard. - - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v1.0.26 - with: - sarif_file: results.sarif diff --git a/README.md b/README.md index 494f828b91a2..08507abcb9f2 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Release Status](https://github.com/flutter/packages/actions/workflows/release.yml/badge.svg)](https://github.com/flutter/packages/actions/workflows/release.yml) [![Flutter CI Status](https://flutter-dashboard.appspot.com/api/public/build-status-badge?repo=packages)](https://flutter-dashboard.appspot.com/#/build?repo=packages) -[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/flutter/packages/badge)](https://deps.dev/project/github/flutter%2Fpackages) This repo is a companion repo to the main [flutter repo]( https://github.com/flutter/flutter). It contains the source code for Flutter's diff --git a/packages/animations/example/android/build.gradle b/packages/animations/example/android/build.gradle index d13ef556e261..491936f2fbef 100644 --- a/packages/animations/example/android/build.gradle +++ b/packages/animations/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/animations/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/animations/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/animations/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/animations/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/animations/test/open_container_test.dart b/packages/animations/test/open_container_test.dart index 4b7f2f854671..5d4ae9614180 100644 --- a/packages/animations/test/open_container_test.dart +++ b/packages/animations/test/open_container_test.dart @@ -37,7 +37,7 @@ void main() { )); // Closed container has the expected properties. - final StatefulElement srcMaterialElement = tester.firstElement( + final Element srcMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), @@ -62,7 +62,7 @@ void main() { await tester.pump(); // On the first frame of the animation everything still looks like before. - final StatefulElement destMaterialElement = tester.firstElement( + final Element destMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), @@ -162,7 +162,7 @@ void main() { await tester.pump(const Duration(milliseconds: 1)); expect(find.text('Closed'), findsNothing); // No longer in the tree. expect(find.text('Open'), findsOneWidget); - final StatefulElement finalMaterialElement = tester.firstElement( + final Element finalMaterialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -213,7 +213,7 @@ void main() { // Open container has the expected properties. expect(find.text('Closed'), findsNothing); expect(find.text('Open'), findsOneWidget); - final StatefulElement initialMaterialElement = tester.firstElement( + final Element initialMaterialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -237,7 +237,7 @@ void main() { expect(find.text('Closed'), findsOneWidget); expect(find.text('Open'), findsOneWidget); - final StatefulElement materialElement = tester.firstElement( + final Element materialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -328,7 +328,7 @@ void main() { await tester.pump(const Duration(milliseconds: 1)); expect(find.text('Open'), findsNothing); // No longer in the tree. expect(find.text('Closed'), findsOneWidget); - final StatefulElement finalMaterialElement = tester.firstElement( + final Element finalMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), @@ -380,7 +380,7 @@ void main() { )); // Closed container has the expected properties. - final StatefulElement srcMaterialElement = tester.firstElement( + final Element srcMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), @@ -405,7 +405,7 @@ void main() { await tester.pump(); // On the first frame of the animation everything still looks like before. - final StatefulElement destMaterialElement = tester.firstElement( + final Element destMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), @@ -509,7 +509,7 @@ void main() { await tester.pump(const Duration(milliseconds: 1)); expect(find.text('Closed'), findsNothing); // No longer in the tree. expect(find.text('Open'), findsOneWidget); - final StatefulElement finalMaterialElement = tester.firstElement( + final Element finalMaterialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -558,7 +558,7 @@ void main() { // Open container has the expected properties. expect(find.text('Closed'), findsNothing); expect(find.text('Open'), findsOneWidget); - final StatefulElement initialMaterialElement = tester.firstElement( + final Element initialMaterialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -583,7 +583,7 @@ void main() { expect(find.text('Closed'), findsOneWidget); expect(find.text('Open'), findsOneWidget); - final StatefulElement materialElement = tester.firstElement( + final Element materialElement = tester.firstElement( find.ancestor( of: find.text('Open'), matching: find.byType(Material), @@ -684,7 +684,7 @@ void main() { await tester.pump(const Duration(milliseconds: 1)); expect(find.text('Open'), findsNothing); // No longer in the tree. expect(find.text('Closed'), findsOneWidget); - final StatefulElement finalMaterialElement = tester.firstElement( + final Element finalMaterialElement = tester.firstElement( find.ancestor( of: find.text('Closed'), matching: find.byType(Material), diff --git a/packages/camera/camera/example/android/build.gradle b/packages/camera/camera/example/android/build.gradle index cec92de922cf..6104b2634228 100644 --- a/packages/camera/camera/example/android/build.gradle +++ b/packages/camera/camera/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/camera/camera/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/camera/camera_android_camerax/CHANGELOG.md b/packages/camera/camera_android_camerax/CHANGELOG.md index 7c6d8a695303..a6daff8fbbdf 100644 --- a/packages/camera/camera_android_camerax/CHANGELOG.md +++ b/packages/camera/camera_android_camerax/CHANGELOG.md @@ -1,8 +1,20 @@ -## 0.6.7+3 +## 0.6.8+3 * Removes dependency on org.jetbrains.kotlin:kotlin-bom. * Updates minimum supported SDK version to Flutter 3.24/Dart 3.5. +## 0.6.8+2 + +* Marks uses of `Camera2Interop` with `@OptIn` annotation. + +## 0.6.8+1 + +* Re-lands support for Impeller. + +## 0.6.8 + +* Updates Guava version to 33.3.0. + ## 0.6.7+2 * Updates lint checks to ignore NewerVersionAvailable. diff --git a/packages/camera/camera_android_camerax/android/build.gradle b/packages/camera/camera_android_camerax/android/build.gradle index d9d5aca2827f..15c0e47bd004 100644 --- a/packages/camera/camera_android_camerax/android/build.gradle +++ b/packages/camera/camera_android_camerax/android/build.gradle @@ -66,7 +66,7 @@ dependencies { implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" implementation "androidx.camera:camera-video:${camerax_version}" - implementation 'com.google.guava:guava:33.2.1-android' + implementation 'com.google.guava:guava:33.3.0-android' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:5.0.0' testImplementation 'androidx.test:core:1.4.0' diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlHostApiImpl.java index 8d10005f7d75..300310d6c9d4 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraControlHostApiImpl.java @@ -10,6 +10,7 @@ import androidx.annotation.VisibleForTesting; import androidx.camera.camera2.interop.Camera2CameraControl; import androidx.camera.camera2.interop.CaptureRequestOptions; +import androidx.camera.camera2.interop.ExperimentalCamera2Interop; import androidx.camera.core.CameraControl; import androidx.core.content.ContextCompat; import com.google.common.util.concurrent.FutureCallback; @@ -134,6 +135,7 @@ public void addCaptureRequestOptions( * Retrieves the {@link Camera2CameraControl} instance associated with the specified {@code * identifier}. */ + @OptIn(markerClass = ExperimentalCamera2Interop.class) private Camera2CameraControl getCamera2CameraControlInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoFlutterApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoFlutterApiImpl.java index 398fc38049a4..58769ab400fa 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoFlutterApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoFlutterApiImpl.java @@ -6,7 +6,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.OptIn; import androidx.camera.camera2.interop.Camera2CameraInfo; +import androidx.camera.camera2.interop.ExperimentalCamera2Interop; import io.flutter.plugin.common.BinaryMessenger; import io.flutter.plugins.camerax.GeneratedCameraXLibrary.Camera2CameraInfoFlutterApi; @@ -19,6 +21,7 @@ public Camera2CameraInfoFlutterApiImpl( this.instanceManager = instanceManager; } + @OptIn(markerClass = ExperimentalCamera2Interop.class) void create(@NonNull Camera2CameraInfo camera2CameraInfo, @Nullable Reply reply) { if (!instanceManager.containsInstance(camera2CameraInfo)) { create(instanceManager.addHostCreatedInstance(camera2CameraInfo), reply); diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoHostApiImpl.java index 76606b43efc0..983e9e0c674c 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/Camera2CameraInfoHostApiImpl.java @@ -84,6 +84,7 @@ public Camera2CameraInfoHostApiImpl( this.proxy = proxy; } + @OptIn(markerClass = ExperimentalCamera2Interop.class) @Override @NonNull public Long createFrom(@NonNull Long cameraInfoIdentifier) { @@ -115,6 +116,7 @@ public Long getSensorOrientation(@NonNull Long identifier) { return proxy.getSensorOrientation(getCamera2CameraInfoInstance(identifier)); } + @OptIn(markerClass = ExperimentalCamera2Interop.class) private Camera2CameraInfo getCamera2CameraInfoInstance(@NonNull Long identifier) { return Objects.requireNonNull(instanceManager.getInstance(identifier)); } diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java index af7fdc36a721..e749940200a6 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/CameraXProxy.java @@ -5,9 +5,7 @@ package io.flutter.plugins.camerax; import android.app.Activity; -import android.graphics.SurfaceTexture; import android.util.Size; -import android.view.Surface; import androidx.annotation.NonNull; import androidx.camera.core.CameraSelector; import androidx.camera.core.ImageAnalysis; @@ -51,11 +49,6 @@ public class CameraXProxy { return new Preview.Builder(); } - /** Creates a {@link Surface} instance from the specified {@link SurfaceTexture}. */ - public @NonNull Surface createSurface(@NonNull SurfaceTexture surfaceTexture) { - return new Surface(surfaceTexture); - } - /** * Creates an instance of the {@link SystemServicesFlutterApiImpl}. * diff --git a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java index 7b1ba1214cdb..81d47936bcaf 100644 --- a/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java +++ b/packages/camera/camera_android_camerax/android/src/main/java/io/flutter/plugins/camerax/PreviewHostApiImpl.java @@ -4,7 +4,6 @@ package io.flutter.plugins.camerax; -import android.graphics.SurfaceTexture; import android.util.Size; import android.view.Surface; import androidx.annotation.NonNull; @@ -25,7 +24,7 @@ public class PreviewHostApiImpl implements PreviewHostApi { private final TextureRegistry textureRegistry; @VisibleForTesting public @NonNull CameraXProxy cameraXProxy = new CameraXProxy(); - @VisibleForTesting public @Nullable TextureRegistry.SurfaceTextureEntry flutterSurfaceTexture; + @VisibleForTesting public @Nullable TextureRegistry.SurfaceProducer flutterSurfaceProducer; public PreviewHostApiImpl( @NonNull BinaryMessenger binaryMessenger, @@ -62,12 +61,11 @@ public void create( @Override public @NonNull Long setSurfaceProvider(@NonNull Long identifier) { Preview preview = getPreviewInstance(identifier); - flutterSurfaceTexture = textureRegistry.createSurfaceTexture(); - SurfaceTexture surfaceTexture = flutterSurfaceTexture.surfaceTexture(); - Preview.SurfaceProvider surfaceProvider = createSurfaceProvider(surfaceTexture); + flutterSurfaceProducer = textureRegistry.createSurfaceProducer(); + Preview.SurfaceProvider surfaceProvider = createSurfaceProvider(flutterSurfaceProducer); preview.setSurfaceProvider(surfaceProvider); - return flutterSurfaceTexture.id(); + return flutterSurfaceProducer.id(); } /** @@ -76,13 +74,32 @@ public void create( */ @VisibleForTesting public @NonNull Preview.SurfaceProvider createSurfaceProvider( - @NonNull SurfaceTexture surfaceTexture) { + @NonNull TextureRegistry.SurfaceProducer surfaceProducer) { return new Preview.SurfaceProvider() { @Override public void onSurfaceRequested(@NonNull SurfaceRequest request) { - surfaceTexture.setDefaultBufferSize( + // Set callback for surfaceProducer to invalidate Surfaces that it produces when they + // get destroyed. + surfaceProducer.setCallback( + new TextureRegistry.SurfaceProducer.Callback() { + @Override + public void onSurfaceCreated() { + // Do nothing. The Preview.SurfaceProvider will handle this whenever a new + // Surface is needed. + } + + @Override + public void onSurfaceDestroyed() { + // Invalidate the SurfaceRequest so that CameraX knows to to make a new request + // for a surface. + request.invalidate(); + } + }); + + // Provide surface. + surfaceProducer.setSize( request.getResolution().getWidth(), request.getResolution().getHeight()); - Surface flutterSurface = cameraXProxy.createSurface(surfaceTexture); + Surface flutterSurface = surfaceProducer.getSurface(); request.provideSurface( flutterSurface, Executors.newSingleThreadExecutor(), @@ -133,8 +150,8 @@ String getProvideSurfaceErrorDescription(int resultCode) { */ @Override public void releaseFlutterSurfaceTexture() { - if (flutterSurfaceTexture != null) { - flutterSurfaceTexture.release(); + if (flutterSurfaceProducer != null) { + flutterSurfaceProducer.release(); } } diff --git a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java index 81b455d7a867..0b475b7a1dc6 100644 --- a/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java +++ b/packages/camera/camera_android_camerax/android/src/test/java/io/flutter/plugins/camerax/PreviewTest.java @@ -11,9 +11,9 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; -import android.graphics.SurfaceTexture; import android.util.Size; import android.view.Surface; import androidx.camera.core.Preview; @@ -83,37 +83,67 @@ public void create_createsPreviewWithCorrectConfiguration() { } @Test - public void setSurfaceProviderTest_createsSurfaceProviderAndReturnsTextureEntryId() { + public void setSurfaceProvider_createsSurfaceProviderAndReturnsTextureEntryId() { final PreviewHostApiImpl previewHostApi = spy(new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry)); - final TextureRegistry.SurfaceTextureEntry mockSurfaceTextureEntry = - mock(TextureRegistry.SurfaceTextureEntry.class); - final SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); + final TextureRegistry.SurfaceProducer mockSurfaceProducer = + mock(TextureRegistry.SurfaceProducer.class); final Long previewIdentifier = 5L; - final Long surfaceTextureEntryId = 120L; + final Long surfaceProducerEntryId = 120L; previewHostApi.cameraXProxy = mockCameraXProxy; testInstanceManager.addDartCreatedInstance(mockPreview, previewIdentifier); - when(mockTextureRegistry.createSurfaceTexture()).thenReturn(mockSurfaceTextureEntry); - when(mockSurfaceTextureEntry.surfaceTexture()).thenReturn(mockSurfaceTexture); - when(mockSurfaceTextureEntry.id()).thenReturn(surfaceTextureEntryId); + when(mockTextureRegistry.createSurfaceProducer()).thenReturn(mockSurfaceProducer); + when(mockSurfaceProducer.id()).thenReturn(surfaceProducerEntryId); final ArgumentCaptor surfaceProviderCaptor = ArgumentCaptor.forClass(Preview.SurfaceProvider.class); - final ArgumentCaptor surfaceCaptor = ArgumentCaptor.forClass(Surface.class); // Test that surface provider was set and the surface texture ID was returned. - assertEquals(previewHostApi.setSurfaceProvider(previewIdentifier), surfaceTextureEntryId); + assertEquals(previewHostApi.setSurfaceProvider(previewIdentifier), surfaceProducerEntryId); verify(mockPreview).setSurfaceProvider(surfaceProviderCaptor.capture()); - verify(previewHostApi).createSurfaceProvider(mockSurfaceTexture); + verify(previewHostApi).createSurfaceProvider(mockSurfaceProducer); + } + + @Test + public void createSurfaceProducer_setsExpectedSurfaceProducerCallback() { + final PreviewHostApiImpl previewHostApi = + new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry); + final TextureRegistry.SurfaceProducer mockSurfaceProducer = + mock(TextureRegistry.SurfaceProducer.class); + final SurfaceRequest mockSurfaceRequest = mock(SurfaceRequest.class); + final ArgumentCaptor callbackCaptor = + ArgumentCaptor.forClass(TextureRegistry.SurfaceProducer.Callback.class); + + when(mockSurfaceRequest.getResolution()).thenReturn(new Size(5, 6)); + when(mockSurfaceProducer.getSurface()).thenReturn(mock(Surface.class)); + + Preview.SurfaceProvider previewSurfaceProvider = + previewHostApi.createSurfaceProvider(mockSurfaceProducer); + previewSurfaceProvider.onSurfaceRequested(mockSurfaceRequest); + + verify(mockSurfaceProducer).setCallback(callbackCaptor.capture()); + + TextureRegistry.SurfaceProducer.Callback callback = callbackCaptor.getValue(); + + // Verify callback's onSurfaceDestroyed invalidates SurfaceRequest. + callback.onSurfaceDestroyed(); + verify(mockSurfaceRequest).invalidate(); + + reset(mockSurfaceRequest); + + // Verify callback's onSurfaceCreated does not interact with the SurfaceRequest. + callback.onSurfaceCreated(); + verifyNoMoreInteractions(mockSurfaceRequest); } @Test public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() { final PreviewHostApiImpl previewHostApi = new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry); - final SurfaceTexture mockSurfaceTexture = mock(SurfaceTexture.class); + final TextureRegistry.SurfaceProducer mockSurfaceProducer = + mock(TextureRegistry.SurfaceProducer.class); final Surface mockSurface = mock(Surface.class); final SurfaceRequest mockSurfaceRequest = mock(SurfaceRequest.class); final SurfaceRequest.Result mockSurfaceRequestResult = mock(SurfaceRequest.Result.class); @@ -121,13 +151,14 @@ public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() { mock(SystemServicesFlutterApiImpl.class); final int resolutionWidth = 200; final int resolutionHeight = 500; + final Long surfaceProducerEntryId = 120L; previewHostApi.cameraXProxy = mockCameraXProxy; - when(mockCameraXProxy.createSurface(mockSurfaceTexture)).thenReturn(mockSurface); when(mockSurfaceRequest.getResolution()) .thenReturn(new Size(resolutionWidth, resolutionHeight)); when(mockCameraXProxy.createSystemServicesFlutterApiImpl(mockBinaryMessenger)) .thenReturn(mockSystemServicesFlutterApi); + when(mockSurfaceProducer.getSurface()).thenReturn(mockSurface); final ArgumentCaptor surfaceCaptor = ArgumentCaptor.forClass(Surface.class); @SuppressWarnings("unchecked") @@ -135,10 +166,10 @@ public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() { ArgumentCaptor.forClass(Consumer.class); Preview.SurfaceProvider previewSurfaceProvider = - previewHostApi.createSurfaceProvider(mockSurfaceTexture); + previewHostApi.createSurfaceProvider(mockSurfaceProducer); previewSurfaceProvider.onSurfaceRequested(mockSurfaceRequest); - verify(mockSurfaceTexture).setDefaultBufferSize(resolutionWidth, resolutionHeight); + verify(mockSurfaceProducer).setSize(resolutionWidth, resolutionHeight); verify(mockSurfaceRequest) .provideSurface(surfaceCaptor.capture(), any(Executor.class), consumerCaptor.capture()); @@ -189,13 +220,13 @@ public void createSurfaceProvider_createsExpectedPreviewSurfaceProvider() { public void releaseFlutterSurfaceTexture_makesCallToReleaseFlutterSurfaceTexture() { final PreviewHostApiImpl previewHostApi = new PreviewHostApiImpl(mockBinaryMessenger, testInstanceManager, mockTextureRegistry); - final TextureRegistry.SurfaceTextureEntry mockSurfaceTextureEntry = - mock(TextureRegistry.SurfaceTextureEntry.class); + final TextureRegistry.SurfaceProducer mockSurfaceProducer = + mock(TextureRegistry.SurfaceProducer.class); - previewHostApi.flutterSurfaceTexture = mockSurfaceTextureEntry; + previewHostApi.flutterSurfaceProducer = mockSurfaceProducer; previewHostApi.releaseFlutterSurfaceTexture(); - verify(mockSurfaceTextureEntry).release(); + verify(mockSurfaceProducer).release(); } @Test diff --git a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java index 5e4454de80d3..fe15629b6d72 100644 --- a/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java +++ b/packages/camera/camera_android_camerax/example/android/app/src/androidTest/java/io/flutter/plugins/cameraxexample/InstanceManagerTest.java @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package io.flutter.plugins.cameraexample; +package io.flutter.plugins.cameraxexample; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/packages/camera/camera_android_camerax/example/android/app/src/main/AndroidManifest.xml b/packages/camera/camera_android_camerax/example/android/app/src/main/AndroidManifest.xml index 2a0066ccab4e..1a0da4432332 100644 --- a/packages/camera/camera_android_camerax/example/android/app/src/main/AndroidManifest.xml +++ b/packages/camera/camera_android_camerax/example/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + isPreviewPreTransformed( {BinaryMessenger? binaryMessenger}) { - // TODO(camsim99): Make call to Java host to determine true value when - // Impeller support is re-landed. - // https://github.com/flutter/flutter/issues/149294 - return Future.value(true); + final SystemServicesHostApi api = + SystemServicesHostApi(binaryMessenger: binaryMessenger); + return api.isPreviewPreTransformed(); } } diff --git a/packages/camera/camera_android_camerax/pubspec.yaml b/packages/camera/camera_android_camerax/pubspec.yaml index e7d477d43cbd..9a845bfc1810 100644 --- a/packages/camera/camera_android_camerax/pubspec.yaml +++ b/packages/camera/camera_android_camerax/pubspec.yaml @@ -2,7 +2,7 @@ name: camera_android_camerax description: Android implementation of the camera plugin using the CameraX library. repository: https://github.com/flutter/packages/tree/main/packages/camera/camera_android_camerax issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+camera%22 -version: 0.6.7+3 +version: 0.6.8+3 environment: sdk: ^3.5.0 diff --git a/packages/camera/camera_android_camerax/test/system_services_test.dart b/packages/camera/camera_android_camerax/test/system_services_test.dart index 1d5d00ee7169..d1725515e2f8 100644 --- a/packages/camera/camera_android_camerax/test/system_services_test.dart +++ b/packages/camera/camera_android_camerax/test/system_services_test.dart @@ -87,6 +87,14 @@ void main() { }); test('isPreviewPreTransformed returns expected answer', () async { + final MockTestSystemServicesHostApi mockApi = + MockTestSystemServicesHostApi(); + TestSystemServicesHostApi.setup(mockApi); + const bool isPreviewPreTransformed = true; + + when(mockApi.isPreviewPreTransformed()).thenReturn(isPreviewPreTransformed); + expect(await SystemServices.isPreviewPreTransformed(), isTrue); + verify(mockApi.isPreviewPreTransformed()); }); } diff --git a/packages/espresso/example/android/build.gradle b/packages/espresso/example/android/build.gradle index 3b4e5d087a42..1365397dabbf 100644 --- a/packages/espresso/example/android/build.gradle +++ b/packages/espresso/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/espresso/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/extension_google_sign_in_as_googleapis_auth/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/extension_google_sign_in_as_googleapis_auth/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/extension_google_sign_in_as_googleapis_auth/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/extension_google_sign_in_as_googleapis_auth/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/file_selector/file_selector/example/android/app/build.gradle b/packages/file_selector/file_selector/example/android/app/build.gradle index 4728b6c2863a..bac5035778be 100644 --- a/packages/file_selector/file_selector/example/android/app/build.gradle +++ b/packages/file_selector/file_selector/example/android/app/build.gradle @@ -47,7 +47,7 @@ android { applicationId "dev.flutter.plugins.file_selector_example" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion 19 + minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/packages/file_selector/file_selector/example/android/build.gradle b/packages/file_selector/file_selector/example/android/build.gradle index fdf447f8a7e6..491936f2fbef 100644 --- a/packages/file_selector/file_selector/example/android/build.gradle +++ b/packages/file_selector/file_selector/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/file_selector/file_selector/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/file_selector/file_selector/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/file_selector/file_selector/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/file_selector/file_selector/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/flutter_adaptive_scaffold/CHANGELOG.md b/packages/flutter_adaptive_scaffold/CHANGELOG.md index 5d65f72a5efe..8b4782b0d345 100644 --- a/packages/flutter_adaptive_scaffold/CHANGELOG.md +++ b/packages/flutter_adaptive_scaffold/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.2.1 + +* Add `Breakpoint.activeBreakpointOf(context)` to find the currently active breakpoint. +* Don't check for height on Desktop platforms. + ## 0.2.0 * Add breakpoints for mediumLarge and extraLarge. diff --git a/packages/flutter_adaptive_scaffold/example/test/main_test.dart b/packages/flutter_adaptive_scaffold/example/test/main_test.dart index e7b11ec00fb5..26e03899e1b6 100644 --- a/packages/flutter_adaptive_scaffold/example/test/main_test.dart +++ b/packages/flutter_adaptive_scaffold/example/test/main_test.dart @@ -38,11 +38,11 @@ void main() { await tester.pumpAndSettle(); } - testWidgets('dislays correct item of config based on screen width', + testWidgets('displays correct item of config based on screen width', (WidgetTester tester) async { await updateScreen(300, tester); expect(smallBody, findsOneWidget); - expect(sBody, findsNothing); + expect(body, findsNothing); expect(mediumLargeBody, findsNothing); expect(largeBody, findsNothing); expect(extraLargeBody, findsNothing); @@ -60,7 +60,7 @@ void main() { await updateScreen(800, tester); expect(smallBody, findsNothing); - expect(sBody, findsOneWidget); + expect(body, findsOneWidget); expect(mediumLargeBody, findsNothing); expect(largeBody, findsNothing); expect(extraLargeBody, findsNothing); @@ -78,7 +78,7 @@ void main() { await updateScreen(1100, tester); expect(smallBody, findsNothing); - expect(sBody, findsNothing); + expect(body, findsNothing); expect(mediumLargeBody, findsOneWidget); expect(largeBody, findsNothing); expect(extraLargeBody, findsNothing); @@ -96,7 +96,7 @@ void main() { await updateScreen(1400, tester); expect(smallBody, findsNothing); - expect(sBody, findsNothing); + expect(body, findsNothing); expect(mediumLargeBody, findsNothing); expect(largeBody, findsOneWidget); expect(extraLargeBody, findsNothing); @@ -114,7 +114,7 @@ void main() { await updateScreen(1800, tester); expect(smallBody, findsNothing); - expect(sBody, findsNothing); + expect(body, findsNothing); expect(mediumLargeBody, findsNothing); expect(largeBody, findsNothing); expect(extraLargeBody, findsOneWidget); diff --git a/packages/flutter_adaptive_scaffold/lib/src/breakpoints.dart b/packages/flutter_adaptive_scaffold/lib/src/breakpoints.dart index aa8e744b344d..286a49811f10 100644 --- a/packages/flutter_adaptive_scaffold/lib/src/breakpoints.dart +++ b/packages/flutter_adaptive_scaffold/lib/src/breakpoints.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; +import '../flutter_adaptive_scaffold.dart'; + /// A group of standard breakpoints built according to the material /// specifications for screen width size. /// @@ -193,6 +195,7 @@ class Breakpoint { bool isActive(BuildContext context) { final TargetPlatform host = Theme.of(context).platform; final bool isRightPlatform = platform?.contains(host) ?? true; + final bool isDesktop = Breakpoint.desktop.contains(host); final double width = MediaQuery.sizeOf(context).width; final double height = MediaQuery.sizeOf(context).height; @@ -208,11 +211,92 @@ class Breakpoint { ? width >= lowerBoundWidth : width >= lowerBoundWidth && width < upperBoundWidth; - final bool isHeightActive = (orientation == Orientation.landscape && + final bool isHeightActive = isDesktop || + orientation == Orientation.portrait || + (orientation == Orientation.landscape && height >= lowerBoundHeight && - height < upperBoundHeight) || - orientation == Orientation.portrait; + height < upperBoundHeight); return isWidthActive && isHeightActive && isRightPlatform; } + + /// Returns the currently active [Breakpoint] based on the [SlotLayout] in the + /// context. + static Breakpoint? maybeActiveBreakpointFromSlotLayout(BuildContext context) { + final SlotLayout? slotLayout = + context.findAncestorWidgetOfExactType(); + Breakpoint? fallbackBreakpoint; + + if (slotLayout != null) { + for (final MapEntry config + in slotLayout.config.entries) { + if (config.key.isActive(context)) { + if (config.key.platform != null) { + return config.key; + } else { + fallbackBreakpoint ??= config.key; + } + } + } + } + return fallbackBreakpoint; + } + + /// Returns the default [Breakpoint] based on the [BuildContext]. + static Breakpoint defaultBreakpointOf(BuildContext context) { + final TargetPlatform host = Theme.of(context).platform; + final bool isDesktop = Breakpoint.desktop.contains(host); + final bool isMobile = Breakpoint.mobile.contains(host); + + for (final Breakpoint breakpoint in [ + Breakpoints.small, + Breakpoints.medium, + Breakpoints.mediumLarge, + Breakpoints.large, + Breakpoints.extraLarge, + ]) { + if (breakpoint.isActive(context)) { + if (isDesktop) { + switch (breakpoint) { + case Breakpoints.small: + return Breakpoints.smallDesktop; + case Breakpoints.medium: + return Breakpoints.mediumDesktop; + case Breakpoints.mediumLarge: + return Breakpoints.mediumLargeDesktop; + case Breakpoints.large: + return Breakpoints.largeDesktop; + case Breakpoints.extraLarge: + return Breakpoints.extraLargeDesktop; + default: + return Breakpoints.standard; + } + } else if (isMobile) { + switch (breakpoint) { + case Breakpoints.small: + return Breakpoints.smallMobile; + case Breakpoints.medium: + return Breakpoints.mediumMobile; + case Breakpoints.mediumLarge: + return Breakpoints.mediumLargeMobile; + case Breakpoints.large: + return Breakpoints.largeMobile; + case Breakpoints.extraLarge: + return Breakpoints.extraLargeMobile; + default: + return Breakpoints.standard; + } + } else { + return breakpoint; + } + } + } + return Breakpoints.standard; + } + + /// Returns the currently active [Breakpoint]. + static Breakpoint activeBreakpointOf(BuildContext context) { + return maybeActiveBreakpointFromSlotLayout(context) ?? + defaultBreakpointOf(context); + } } diff --git a/packages/flutter_adaptive_scaffold/lib/src/slot_layout.dart b/packages/flutter_adaptive_scaffold/lib/src/slot_layout.dart index 38789fb86603..07cfea33a9d6 100644 --- a/packages/flutter_adaptive_scaffold/lib/src/slot_layout.dart +++ b/packages/flutter_adaptive_scaffold/lib/src/slot_layout.dart @@ -15,16 +15,29 @@ class SlotLayout extends StatefulWidget { /// Creates a [SlotLayout] widget. const SlotLayout({required this.config, super.key}); - /// Given a context and a config, it returns the [SlotLayoutConfig] that will g + /// Given a context and a config, it returns the [SlotLayoutConfig] that will /// be chosen from the config under the context's conditions. static SlotLayoutConfig? pickWidget( BuildContext context, Map config) { SlotLayoutConfig? chosenWidget; - config.forEach((Breakpoint breakpoint, SlotLayoutConfig? pickedWidget) { + + for (final Breakpoint breakpoint in config.keys) { if (breakpoint.isActive(context)) { - chosenWidget = pickedWidget; + final SlotLayoutConfig? pickedWidget = config[breakpoint]; + if (pickedWidget != null) { + if (breakpoint.platform != null) { + // Prioritize platform-specific breakpoints. + return pickedWidget; + } else { + // Fallback to non-platform-specific. + chosenWidget = pickedWidget; + } + } else { + chosenWidget = null; + } } - }); + } + return chosenWidget; } diff --git a/packages/flutter_adaptive_scaffold/pubspec.yaml b/packages/flutter_adaptive_scaffold/pubspec.yaml index 504f5257c9a0..a4b7215af985 100644 --- a/packages/flutter_adaptive_scaffold/pubspec.yaml +++ b/packages/flutter_adaptive_scaffold/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_adaptive_scaffold description: Widgets to easily build adaptive layouts, including navigation elements. -version: 0.2.0 +version: 0.2.1 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_adaptive_scaffold%22 repository: https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold diff --git a/packages/flutter_adaptive_scaffold/test/breakpoint_test.dart b/packages/flutter_adaptive_scaffold/test/breakpoint_test.dart index e990b3a7f911..cbef74c570ee 100644 --- a/packages/flutter_adaptive_scaffold/test/breakpoint_test.dart +++ b/packages/flutter_adaptive_scaffold/test/breakpoint_test.dart @@ -99,6 +99,171 @@ void main() { await tester.pumpAndSettle(); expect(DummyWidget.built, isFalse); }); + +// Test the `maybeActiveBreakpointFromSlotLayout` method. + group('maybeActiveBreakpointFromSlotLayout', () { + testWidgets('returns correct breakpoint from SlotLayout on mobile devices', + (WidgetTester tester) async { + // Small layout on mobile. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout( + tester.element(find.byKey(const Key('Breakpoints.smallMobile')))), + Breakpoints.smallMobile); + + // Medium layout on mobile. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout(tester + .element(find.byKey(const Key('Breakpoints.mediumMobile')))), + Breakpoints.mediumMobile); + + // Large layout on mobile. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout( + tester.element(find.byKey(const Key('Breakpoints.largeMobile')))), + Breakpoints.largeMobile); + }, variant: TargetPlatformVariant.mobile()); + + testWidgets('returns correct breakpoint from SlotLayout on desktop devices', + (WidgetTester tester) async { + // Small layout on desktop. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout(tester + .element(find.byKey(const Key('Breakpoints.smallDesktop')))), + Breakpoints.smallDesktop); + + // Medium layout on desktop. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout(tester + .element(find.byKey(const Key('Breakpoints.mediumDesktop')))), + Breakpoints.mediumDesktop); + + // Large layout on desktop. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.maybeActiveBreakpointFromSlotLayout(tester + .element(find.byKey(const Key('Breakpoints.largeDesktop')))), + Breakpoints.largeDesktop); + }, variant: TargetPlatformVariant.desktop()); + }); + + // Test the `defaultBreakpointOf` method. + group('defaultBreakpointOf', () { + testWidgets('returns correct default breakpoint on mobile devices', + (WidgetTester tester) async { + // Small layout on mobile. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect(Breakpoint.defaultBreakpointOf(tester.element(find.byType(Theme))), + Breakpoints.smallMobile); + + // Medium layout on mobile. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect(Breakpoint.defaultBreakpointOf(tester.element(find.byType(Theme))), + Breakpoints.mediumMobile); + + // Large layout on mobile. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect(Breakpoint.defaultBreakpointOf(tester.element(find.byType(Theme))), + Breakpoints.largeMobile); + }, variant: TargetPlatformVariant.mobile()); + + testWidgets('returns correct default breakpoint on desktop devices', + (WidgetTester tester) async { + // Small layout on desktop. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.defaultBreakpointOf( + tester.element(find.byType(Directionality))), + Breakpoints.smallDesktop); + + // Medium layout on desktop. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.defaultBreakpointOf( + tester.element(find.byType(Directionality))), + Breakpoints.mediumDesktop); + + // Large layout on desktop. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.defaultBreakpointOf( + tester.element(find.byType(Directionality))), + Breakpoints.largeDesktop); + }, variant: TargetPlatformVariant.desktop()); + }); + + // Test the `activeBreakpointOf` method. + group('activeBreakpointOf', () { + testWidgets('returns correct active breakpoint on mobile devices', + (WidgetTester tester) async { + // Small layout on mobile. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf( + tester.element(find.byKey(const Key('Breakpoints.smallMobile')))), + Breakpoints.smallMobile); + + // Medium layout on mobile. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf(tester + .element(find.byKey(const Key('Breakpoints.mediumMobile')))), + Breakpoints.mediumMobile); + + // Large layout on mobile. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf( + tester.element(find.byKey(const Key('Breakpoints.largeMobile')))), + Breakpoints.largeMobile); + }, variant: TargetPlatformVariant.mobile()); + + testWidgets('returns correct active breakpoint on desktop devices', + (WidgetTester tester) async { + // Small layout on desktop. + await tester.pumpWidget(SimulatedLayout.small.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf(tester + .element(find.byKey(const Key('Breakpoints.smallDesktop')))), + Breakpoints.smallDesktop); + + // Medium layout on desktop. + await tester.pumpWidget(SimulatedLayout.medium.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf(tester + .element(find.byKey(const Key('Breakpoints.mediumDesktop')))), + Breakpoints.mediumDesktop); + + // Large layout on desktop. + await tester.pumpWidget(SimulatedLayout.large.slot(tester)); + await tester.pumpAndSettle(); + expect( + Breakpoint.activeBreakpointOf(tester + .element(find.byKey(const Key('Breakpoints.largeDesktop')))), + Breakpoints.largeDesktop); + }, variant: TargetPlatformVariant.desktop()); + }); } class DummyWidget extends StatelessWidget { diff --git a/packages/flutter_image/example/android/build.gradle b/packages/flutter_image/example/android/build.gradle index fdf447f8a7e6..491936f2fbef 100644 --- a/packages/flutter_image/example/android/build.gradle +++ b/packages/flutter_image/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/flutter_image/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/flutter_image/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/flutter_image/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/flutter_image/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md index 3d464723ee69..aec197ddc233 100644 --- a/packages/flutter_plugin_android_lifecycle/CHANGELOG.md +++ b/packages/flutter_plugin_android_lifecycle/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.22 + +* Bumps `com.android.tools.build:gradle` from 7.2.1 to 8.5.1. + ## 2.0.21 * Updates lint checks to ignore NewerVersionAvailable. diff --git a/packages/flutter_plugin_android_lifecycle/android/build.gradle b/packages/flutter_plugin_android_lifecycle/android/build.gradle index 1c72879d8e8a..db628b0ba8ba 100644 --- a/packages/flutter_plugin_android_lifecycle/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.1' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/flutter_plugin_android_lifecycle/example/android/build.gradle b/packages/flutter_plugin_android_lifecycle/example/android/build.gradle index ce8d2392c8c7..8b9850381421 100644 --- a/packages/flutter_plugin_android_lifecycle/example/android/build.gradle +++ b/packages/flutter_plugin_android_lifecycle/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/flutter_plugin_android_lifecycle/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/flutter_plugin_android_lifecycle/pubspec.yaml b/packages/flutter_plugin_android_lifecycle/pubspec.yaml index 958a482e60b5..15cae9679fb2 100644 --- a/packages/flutter_plugin_android_lifecycle/pubspec.yaml +++ b/packages/flutter_plugin_android_lifecycle/pubspec.yaml @@ -2,7 +2,7 @@ name: flutter_plugin_android_lifecycle description: Flutter plugin for accessing an Android Lifecycle within other plugins. repository: https://github.com/flutter/packages/tree/main/packages/flutter_plugin_android_lifecycle issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+flutter_plugin_android_lifecycle%22 -version: 2.0.21 +version: 2.0.22 environment: sdk: ^3.4.0 diff --git a/packages/go_router/CHANGELOG.md b/packages/go_router/CHANGELOG.md index 80b1a17e2845..519e547189ef 100644 --- a/packages/go_router/CHANGELOG.md +++ b/packages/go_router/CHANGELOG.md @@ -1,6 +1,15 @@ -## NEXT +## 14.2.6 -* Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. +- Fixes replace and pushReplacement uri when only one route match in current route match list. + +## 14.2.5 + +- Fixes an issue where android back button pops pages in the wrong order. + +## 14.2.4 + +- Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. +- Fix GoRouter configuration in `upgrading.md` ## 14.2.3 diff --git a/packages/go_router/doc/upgrading.md b/packages/go_router/doc/upgrading.md index 72af6b91137f..418c994e412b 100644 --- a/packages/go_router/doc/upgrading.md +++ b/packages/go_router/doc/upgrading.md @@ -3,6 +3,7 @@ home screen and creating a GoRoute for each screen you would like to be deep-linkable. # Upgrade an app that uses Navigator + To upgrade an app that is already using the Navigator for routing, start with a single route for the home screen: @@ -37,6 +38,7 @@ aren't deep-linkable. You can gradually add more routes to the GoRouter configuration. # Upgrade an app that uses named routes + An app that uses named routes can be migrated to go_router by changing each entry in the map to a GoRoute object and changing any calls to `Navigator.of(context).pushNamed` to `context.go()`. @@ -57,7 +59,7 @@ Then the GoRouter configuration would look like this: ```dart GoRouter( - initialRoute: '/details', + initialLocation: '/details', routes: [ GoRoute( path: '/', diff --git a/packages/go_router/lib/src/delegate.dart b/packages/go_router/lib/src/delegate.dart index eba3ef0c8011..06e4f08184f4 100644 --- a/packages/go_router/lib/src/delegate.dart +++ b/packages/go_router/lib/src/delegate.dart @@ -52,21 +52,7 @@ class GoRouterDelegate extends RouterDelegate @override Future popRoute() async { - NavigatorState? state = navigatorKey.currentState; - if (state == null) { - return false; - } - if (!state.canPop()) { - state = null; - } - RouteMatchBase walker = currentConfiguration.matches.last; - while (walker is ShellRouteMatch) { - if (walker.navigatorKey.currentState?.canPop() ?? false) { - state = walker.navigatorKey.currentState; - } - walker = walker.matches.last; - } - assert(walker is RouteMatch); + final NavigatorState? state = _findCurrentNavigator(); if (state != null) { return state.maybePop(); } @@ -75,7 +61,8 @@ class GoRouterDelegate extends RouterDelegate if (lastRoute.onExit != null && navigatorKey.currentContext != null) { return !(await lastRoute.onExit!( navigatorKey.currentContext!, - walker.buildState(_configuration, currentConfiguration), + currentConfiguration.last + .buildState(_configuration, currentConfiguration), )); } return false; @@ -98,21 +85,33 @@ class GoRouterDelegate extends RouterDelegate /// Pops the top-most route. void pop([T? result]) { + final NavigatorState? state = _findCurrentNavigator(); + if (state == null) { + throw GoError('There is nothing to pop'); + } + state.pop(result); + } + + NavigatorState? _findCurrentNavigator() { NavigatorState? state; if (navigatorKey.currentState?.canPop() ?? false) { state = navigatorKey.currentState; } RouteMatchBase walker = currentConfiguration.matches.last; while (walker is ShellRouteMatch) { - if (walker.navigatorKey.currentState?.canPop() ?? false) { + final NavigatorState potentialCandidate = + walker.navigatorKey.currentState!; + if (!ModalRoute.of(potentialCandidate.context)!.isCurrent) { + // There is a pageless route on top of the shell route. it needs to be + // popped first. + break; + } + if (potentialCandidate.canPop()) { state = walker.navigatorKey.currentState; } walker = walker.matches.last; } - if (state == null) { - throw GoError('There is nothing to pop'); - } - state.pop(result); + return state; } void _debugAssertMatchListNotEmpty() { diff --git a/packages/go_router/lib/src/parser.dart b/packages/go_router/lib/src/parser.dart index b4115a1fca19..72f944b0c5a7 100644 --- a/packages/go_router/lib/src/parser.dart +++ b/packages/go_router/lib/src/parser.dart @@ -160,7 +160,6 @@ class GoRouteInformationParser extends RouteInformationParser { location = safeRoute.matches.uri.toString(); } } - return RouteInformation( uri: Uri.parse(location ?? configuration.uri.toString()), state: _routeMatchListCodec.encode(configuration), @@ -194,22 +193,30 @@ class GoRouteInformationParser extends RouteInformationParser { ); case NavigatingType.pushReplacement: final RouteMatch routeMatch = baseRouteMatchList!.last; - return baseRouteMatchList.remove(routeMatch).push( - ImperativeRouteMatch( - pageKey: _getUniqueValueKey(), - completer: completer!, - matches: newMatchList, - ), - ); + baseRouteMatchList = baseRouteMatchList.remove(routeMatch); + if (baseRouteMatchList.isEmpty) { + return newMatchList; + } + return baseRouteMatchList.push( + ImperativeRouteMatch( + pageKey: _getUniqueValueKey(), + completer: completer!, + matches: newMatchList, + ), + ); case NavigatingType.replace: final RouteMatch routeMatch = baseRouteMatchList!.last; - return baseRouteMatchList.remove(routeMatch).push( - ImperativeRouteMatch( - pageKey: routeMatch.pageKey, - completer: completer!, - matches: newMatchList, - ), - ); + baseRouteMatchList = baseRouteMatchList.remove(routeMatch); + if (baseRouteMatchList.isEmpty) { + return newMatchList; + } + return baseRouteMatchList.push( + ImperativeRouteMatch( + pageKey: routeMatch.pageKey, + completer: completer!, + matches: newMatchList, + ), + ); case NavigatingType.go: return newMatchList; case NavigatingType.restore: diff --git a/packages/go_router/lib/src/router.dart b/packages/go_router/lib/src/router.dart index dc6d88057eb0..2bc2057a3bbe 100644 --- a/packages/go_router/lib/src/router.dart +++ b/packages/go_router/lib/src/router.dart @@ -199,7 +199,7 @@ class GoRouter implements RouterConfig { setLogging(enabled: debugLogDiagnostics); WidgetsFlutterBinding.ensureInitialized(); - navigatorKey ??= GlobalKey(); + navigatorKey ??= GlobalKey(debugLabel: 'root'); _routingConfig.addListener(_handleRoutingConfigChanged); configuration = RouteConfiguration( diff --git a/packages/go_router/pubspec.yaml b/packages/go_router/pubspec.yaml index 3209ed782ec7..bef70c82d06b 100644 --- a/packages/go_router/pubspec.yaml +++ b/packages/go_router/pubspec.yaml @@ -1,7 +1,7 @@ name: go_router description: A declarative router for Flutter based on Navigation 2 supporting deep linking, data-driven routes and more -version: 14.2.3 +version: 14.2.6 repository: https://github.com/flutter/packages/tree/main/packages/go_router issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+go_router%22 diff --git a/packages/go_router/test/extension_test.dart b/packages/go_router/test/extension_test.dart index 0f314edbf66e..c13a47de002f 100644 --- a/packages/go_router/test/extension_test.dart +++ b/packages/go_router/test/extension_test.dart @@ -38,9 +38,7 @@ void main() { final GoRouter router = await createGoRouter(tester); await tester.tap(find.text('Settings')); await tester.pumpAndSettle(); - final ImperativeRouteMatch routeMatch = router - .routerDelegate.currentConfiguration.last as ImperativeRouteMatch; - expect(routeMatch.matches.uri.toString(), + expect(router.routerDelegate.currentConfiguration.uri.toString(), '/page-0/settings?search=notification'); }); }); diff --git a/packages/go_router/test/go_router_test.dart b/packages/go_router/test/go_router_test.dart index f395faf906fd..10e6bb58d5bd 100644 --- a/packages/go_router/test/go_router_test.dart +++ b/packages/go_router/test/go_router_test.dart @@ -68,6 +68,28 @@ void main() { expect(find.byType(DummyScreen), findsOneWidget); }); + testWidgets('pushReplacement and replace when only one matches', + (WidgetTester tester) async { + final List routes = [ + GoRoute(name: '1', path: '/', builder: dummy), + GoRoute(name: '2', path: '/a', builder: dummy), + GoRoute(name: '3', path: '/b', builder: dummy), + ]; + + final GoRouter router = await createRouter(routes, tester); + expect(router.routerDelegate.currentConfiguration.uri.path, '/'); + + router.replace('/a'); + await tester.pumpAndSettle(); + // When the imperative match is the only match in the route match list, + // it should update the uri. + expect(router.routerDelegate.currentConfiguration.uri.path, '/a'); + + router.pushReplacement('/b'); + await tester.pumpAndSettle(); + expect(router.routerDelegate.currentConfiguration.uri.path, '/b'); + }); + test('empty path', () { expect(() { GoRoute(path: ''); @@ -398,6 +420,67 @@ void main() { expect(find.byKey(settings), findsOneWidget); }); + testWidgets('android back button pop in correct order', + (WidgetTester tester) async { + // Regression test for https://github.com/flutter/flutter/issues/141906. + final List routes = [ + GoRoute( + path: '/', + builder: (_, __) => const Text('home'), + routes: [ + ShellRoute( + builder: ( + BuildContext context, + GoRouterState state, + Widget child, + ) { + return Column( + children: [ + const Text('shell'), + child, + ], + ); + }, + routes: [ + GoRoute( + path: 'page', + builder: (BuildContext context, __) { + return TextButton( + onPressed: () { + Navigator.of(context, rootNavigator: true).push( + MaterialPageRoute( + builder: (BuildContext context) { + return const Text('pageless'); + }), + ); + }, + child: const Text('page'), + ); + }, + ), + ], + ), + ]), + ]; + final GoRouter router = + await createRouter(routes, tester, initialLocation: '/page'); + expect(find.text('shell'), findsOneWidget); + expect(find.text('page'), findsOneWidget); + + await tester.tap(find.text('page')); + await tester.pumpAndSettle(); + expect(find.text('shell'), findsNothing); + expect(find.text('page'), findsNothing); + expect(find.text('pageless'), findsOneWidget); + + final bool result = await router.routerDelegate.popRoute(); + expect(result, isTrue); + await tester.pumpAndSettle(); + expect(find.text('shell'), findsOneWidget); + expect(find.text('page'), findsOneWidget); + expect(find.text('pageless'), findsNothing); + }); + testWidgets('can correctly pop stacks of repeated pages', (WidgetTester tester) async { // Regression test for https://github.com/flutter/flutter/issues/#132229. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md index d9649c412566..7c21eb457258 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md +++ b/packages/google_maps_flutter/google_maps_flutter_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.14.2 + +* Bumps `com.android.tools.build:gradle` from 7.3.1 to 8.5.1. + ## 2.14.1 * Converts `PlatformCircle` and `PlatformMarker` to pigeon. diff --git a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle index 1577558d0c6e..5ba3e34c0416 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.3.1' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle b/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle index c7727bf531bb..c4687fc5d3bc 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml index 9f3931140f67..d73d83d7a0e5 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/example/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: dev_dependencies: build_runner: ^2.1.10 - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml index 204de6405720..01d954168299 100644 --- a/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml +++ b/packages/google_maps_flutter/google_maps_flutter_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter_android description: Android implementation of the google_maps_flutter plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_maps_flutter/google_maps_flutter_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+maps%22 -version: 2.14.1 +version: 2.14.2 environment: sdk: ^3.4.0 diff --git a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md index c60f181f54a2..daa33d98b1af 100644 --- a/packages/google_sign_in/google_sign_in_android/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.1.29 + +* Updates Guava to version 33.3.0. + ## 6.1.28 * Updates lint checks to ignore NewerVersionAvailable. diff --git a/packages/google_sign_in/google_sign_in_android/android/build.gradle b/packages/google_sign_in/google_sign_in_android/android/build.gradle index bac55d2a870a..a918961b8733 100644 --- a/packages/google_sign_in/google_sign_in_android/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/android/build.gradle @@ -60,7 +60,7 @@ android { dependencies { implementation 'com.google.android.gms:play-services-auth:21.0.0' - implementation 'com.google.guava:guava:33.2.1-android' + implementation 'com.google.guava:guava:33.3.0-android' testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito:mockito-inline:5.0.0' } diff --git a/packages/google_sign_in/google_sign_in_android/example/android/build.gradle b/packages/google_sign_in/google_sign_in_android/example/android/build.gradle index dc46ed04d80d..ba8a335002e2 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/build.gradle +++ b/packages/google_sign_in/google_sign_in_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/google_sign_in/google_sign_in_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml index 11b6f0742725..5d96707b4082 100644 --- a/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/example/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: http: ">=0.13.0 <2.0.0" dev_dependencies: - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/google_sign_in/google_sign_in_android/pubspec.yaml b/packages/google_sign_in/google_sign_in_android/pubspec.yaml index da1ef5b458be..e176285ffcf2 100644 --- a/packages/google_sign_in/google_sign_in_android/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in_android/pubspec.yaml @@ -2,7 +2,7 @@ name: google_sign_in_android description: Android implementation of the google_sign_in plugin. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 6.1.28 +version: 6.1.29 environment: sdk: ^3.4.0 diff --git a/packages/image_picker/image_picker_android/example/android/build.gradle b/packages/image_picker/image_picker_android/example/android/build.gradle index facf61d83e68..7f029821ad3d 100755 --- a/packages/image_picker/image_picker_android/example/android/build.gradle +++ b/packages/image_picker/image_picker_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/image_picker/image_picker_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/image_picker/image_picker_android/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/image_picker/image_picker_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/image_picker/image_picker_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index 5190c6a8ec31..180cff67ed3c 100644 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: dev_dependencies: build_runner: ^2.1.10 - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md index 348eb83a1efa..fd5167e8702c 100644 --- a/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md +++ b/packages/in_app_purchase/in_app_purchase_android/CHANGELOG.md @@ -1,8 +1,12 @@ -## 0.3.6+7 +## 0.3.6+8 * Removes dependency on org.jetbrains.kotlin:kotlin-bom. * Updates minimum supported SDK version to Flutter 3.24/Dart 3.5. +## 0.3.6+7 + +* Sets `android.buildFeatures.buildConfig` to true for compatibility with AGP 8.0+. + ## 0.3.6+6 * Bumps androidx.annotation:annotation from 1.8.1 to 1.8.2. diff --git a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle index 8824f9ee4e3e..87cb5dbe0f19 100644 --- a/packages/in_app_purchase/in_app_purchase_android/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/android/build.gradle @@ -22,6 +22,10 @@ rootProject.allprojects { apply plugin: 'com.android.library' android { + buildFeatures { + buildConfig true + } + // Conditional for compatibility with AGP <4.2. if (project.android.hasProperty("namespace")) { namespace 'io.flutter.plugins.inapppurchase' diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle index bde7e79aa948..bb2a63600c80 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/in_app_purchase/in_app_purchase_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index f6310e8c27fd..33c46a6965d2 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,8 +1,12 @@ -## 0.1.2+1 +## 0.1.2+2 * Removes dependency on org.jetbrains.kotlin:kotlin-bom. * Updates minimum supported SDK version to Flutter 3.24/Dart 3.5. +## 0.1.2+1 + +* Updates README to clarify supported features and link to issues tracker. + ## 0.1.2 * Adds support for all `AdEventType`s and ad data. See `AdEvent.adData`. diff --git a/packages/interactive_media_ads/README.md b/packages/interactive_media_ads/README.md index 4b585e746a8e..94d996a2f950 100644 --- a/packages/interactive_media_ads/README.md +++ b/packages/interactive_media_ads/README.md @@ -13,7 +13,11 @@ a separate video player positioned on top of the app's content video player. |-------------|---------|-------| | **Support** | SDK 21+ | 12.0+ | -**This package is still in development.** +**NOTE:** +* The initial release for this package supports linear pre-roll video ads on iOS and Android +* platforms. +* Companion ads, Background Audio ads and Google Dynamic Ad Insertion methods are currently not +* supported. ## IMA client-side overview diff --git a/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties index 7bb2df6ba6ea..3c85cfe057a1 100644 --- a/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/interactive_media_ads/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/interactive_media_ads/example/android/settings.gradle b/packages/interactive_media_ads/example/android/settings.gradle index 5ddc15765cb3..b766503aa369 100644 --- a/packages/interactive_media_ads/example/android/settings.gradle +++ b/packages/interactive_media_ads/example/android/settings.gradle @@ -30,7 +30,7 @@ buildscript { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.0" apply false + id "com.android.application" version "8.5.1" apply false id "org.jetbrains.kotlin.android" version "1.7.10" apply false } diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index 61d9a0a34f8a..bf8ce6d5a487 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -16,7 +16,7 @@ dependencies: video_player: ^2.8.6 dev_dependencies: - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index 429393dda5c5..5d76d718c81a 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.1.2" + static let pluginVersion = "0.1.2+1" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/local_auth/local_auth_android/example/android/build.gradle b/packages/local_auth/local_auth_android/example/android/build.gradle index 1019f64db81a..1c47c2c444a5 100644 --- a/packages/local_auth/local_auth_android/example/android/build.gradle +++ b/packages/local_auth/local_auth_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties index a4f684d08a81..155a12c6d657 100644 --- a/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/local_auth/local_auth_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/path_provider/path_provider_android/example/android/build.gradle b/packages/path_provider/path_provider_android/example/android/build.gradle index fe7f3663afc0..5fefb8194a06 100644 --- a/packages/path_provider/path_provider_android/example/android/build.gradle +++ b/packages/path_provider/path_provider_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/path_provider/path_provider_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/pigeon/example/app/android/build.gradle b/packages/pigeon/example/app/android/build.gradle index fdf447f8a7e6..491936f2fbef 100644 --- a/packages/pigeon/example/app/android/build.gradle +++ b/packages/pigeon/example/app/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/pigeon/example/app/android/gradle/wrapper/gradle-wrapper.properties b/packages/pigeon/example/app/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/pigeon/example/app/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/pigeon/example/app/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/build.gradle b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/build.gradle index 18a1d3ccb472..0b4ac7621f18 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/build.gradle +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/build.gradle b/packages/pigeon/platform_tests/test_plugin/example/android/build.gradle index 29f83a737883..b7ab9808de13 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/build.gradle +++ b/packages/pigeon/platform_tests/test_plugin/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/pigeon/platform_tests/test_plugin/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/quick_actions/quick_actions_android/example/android/build.gradle b/packages/quick_actions/quick_actions_android/example/android/build.gradle index 70fe6649bb0e..08062b9baa32 100644 --- a/packages/quick_actions/quick_actions_android/example/android/build.gradle +++ b/packages/quick_actions/quick_actions_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties index e1ca574ef017..3c85cfe057a1 100644 --- a/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/quick_actions/quick_actions_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/quick_actions/quick_actions_android/example/pubspec.yaml b/packages/quick_actions/quick_actions_android/example/pubspec.yaml index 632624f697f4..18511d536148 100644 --- a/packages/quick_actions/quick_actions_android/example/pubspec.yaml +++ b/packages/quick_actions/quick_actions_android/example/pubspec.yaml @@ -18,7 +18,7 @@ dependencies: path: ../ dev_dependencies: - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/rfw/example/local/android/build.gradle b/packages/rfw/example/local/android/build.gradle index 8a2e9e183dd7..fa0c3b56c2a4 100644 --- a/packages/rfw/example/local/android/build.gradle +++ b/packages/rfw/example/local/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties b/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/rfw/example/local/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/shared_preferences/shared_preferences/CHANGELOG.md b/packages/shared_preferences/shared_preferences/CHANGELOG.md index 1485ff0369a2..31879ef3f25d 100644 --- a/packages/shared_preferences/shared_preferences/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.3.2 +* Removes outdated testing information from README. * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. diff --git a/packages/shared_preferences/shared_preferences/README.md b/packages/shared_preferences/shared_preferences/README.md index 3fe18448dd3b..520de19323cc 100644 --- a/packages/shared_preferences/shared_preferences/README.md +++ b/packages/shared_preferences/shared_preferences/README.md @@ -183,18 +183,6 @@ If you have been using `SharedPreferences` with the default prefix but wish to c to a new prefix, you will need to transform your current preferences manually to add the new prefix otherwise the old preferences will be inaccessible. -### Testing - -In tests, you can replace the standard `SharedPreferences` implementation with -a mock implementation with initial values. This implementation is in-memory -only, and will not persist values to the usual preference store. - - -```dart -final Map values = {'counter': 1}; -SharedPreferences.setMockInitialValues(values); -``` - ### Storage location by platform | Platform | SharedPreferences | SharedPreferencesAsync/WithCache | diff --git a/packages/shared_preferences/shared_preferences/pubspec.yaml b/packages/shared_preferences/shared_preferences/pubspec.yaml index 091c7548292d..cbe53e8d2bef 100644 --- a/packages/shared_preferences/shared_preferences/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android. repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.3.1 +version: 2.3.2 environment: sdk: ^3.4.0 diff --git a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md index e37c4f051d28..0dfd2204031d 100644 --- a/packages/shared_preferences/shared_preferences_android/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.3.2 + +* Bumps `com.android.tools.build:gradle` from 7.2.2 to 8.5.1. + ## 2.3.1 * Fixes `getStringList` returning immutable list. diff --git a/packages/shared_preferences/shared_preferences_android/android/build.gradle b/packages/shared_preferences/shared_preferences_android/android/build.gradle index 11095a1352f0..589ad7411735 100644 --- a/packages/shared_preferences/shared_preferences_android/android/build.gradle +++ b/packages/shared_preferences/shared_preferences_android/android/build.gradle @@ -9,7 +9,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/shared_preferences/shared_preferences_android/example/android/build.gradle b/packages/shared_preferences/shared_preferences_android/example/android/build.gradle index af575c8b5cd9..bd044999632d 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/build.gradle +++ b/packages/shared_preferences/shared_preferences_android/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties index c48e7025d19f..b9150adbf128 100644 --- a/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/shared_preferences/shared_preferences_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Wed Jan 17 19:21:34 PST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/packages/shared_preferences/shared_preferences_android/pubspec.yaml b/packages/shared_preferences/shared_preferences_android/pubspec.yaml index f86a08afdc6d..80c9466ab063 100644 --- a/packages/shared_preferences/shared_preferences_android/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_android/pubspec.yaml @@ -2,7 +2,7 @@ name: shared_preferences_android description: Android implementation of the shared_preferences plugin repository: https://github.com/flutter/packages/tree/main/packages/shared_preferences/shared_preferences_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+shared_preferences%22 -version: 2.3.1 +version: 2.3.2 environment: sdk: ^3.4.0 diff --git a/packages/url_launcher/url_launcher_android/example/android/build.gradle b/packages/url_launcher/url_launcher_android/example/android/build.gradle index 0c2fe43da28f..9507fa86d992 100644 --- a/packages/url_launcher/url_launcher_android/example/android/build.gradle +++ b/packages/url_launcher/url_launcher_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties index 067458b986d5..c677a74b9e70 100644 --- a/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/url_launcher/url_launcher_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/video_player/video_player_android/example/android/build.gradle b/packages/video_player/video_player_android/example/android/build.gradle index d82420470065..658815b35e23 100644 --- a/packages/video_player/video_player_android/example/android/build.gradle +++ b/packages/video_player/video_player_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/video_player/video_player_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player_android/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/video_player/video_player_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/video_player/video_player_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/webview_flutter/webview_flutter_android/example/android/build.gradle b/packages/webview_flutter/webview_flutter_android/example/android/build.gradle index 32742c718a0f..6b83e7f42f60 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/build.gradle +++ b/packages/webview_flutter/webview_flutter_android/example/android/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.5.1' } } diff --git a/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties index aeaff6f869f3..7aeeb11c6ee5 100644 --- a/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/packages/webview_flutter/webview_flutter_android/example/android/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip diff --git a/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml b/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml index a79d03efb4c4..cee9594f0972 100644 --- a/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_android/example/pubspec.yaml @@ -20,7 +20,7 @@ dependencies: webview_flutter_platform_interface: ^2.10.0 dev_dependencies: - espresso: ^0.2.0 + espresso: ^0.4.0 flutter_test: sdk: flutter integration_test: diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index dc31c2d32a92..a552402d0592 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,6 +1,6 @@ -## NEXT +## 3.15.0 -* Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. +* Adds macOS support. ## 3.14.0 @@ -92,7 +92,7 @@ * Introduces `NSError.toString` for better diagnostics. -## 3.6.2 +## 3.6.2 * Fixes unawaited_futures violations. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFDataConvertersTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFDataConvertersTests.m similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFDataConvertersTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFDataConvertersTests.m index a4ff58a47ea5..642c138d14ba 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFDataConvertersTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFDataConvertersTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFDataConvertersTests : XCTestCase @@ -61,8 +66,8 @@ - (void)testFWFWKNavigationActionDataFromNavigationAction { OCMStub([mockNavigationAction navigationType]).andReturn(WKNavigationTypeReload); - NSURLRequest *request = - [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.flutter.dev/"]]; + NSURL *testURL = [NSURL URLWithString:@"https://www.flutter.dev/"]; + NSURLRequest *request = [NSURLRequest requestWithURL:testURL]; OCMStub([mockNavigationAction request]).andReturn(request); WKFrameInfo *mockFrameInfo = OCMClassMock([WKFrameInfo class]); @@ -76,8 +81,8 @@ - (void)testFWFWKNavigationActionDataFromNavigationAction { } - (void)testFWFNSUrlRequestDataFromNSURLRequest { - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.flutter.dev/"]]; + NSURL *testURL = [NSURL URLWithString:@"https://www.flutter.dev/"]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:testURL]; request.HTTPMethod = @"POST"; request.HTTPBody = [@"aString" dataUsingEncoding:NSUTF8StringEncoding]; request.allHTTPHeaderFields = @{@"a" : @"field"}; @@ -137,7 +142,7 @@ - (void)testFWFWKSecurityOriginDataFromWKSecurityOrigin { XCTAssertEqualObjects(data.protocol, @"protocol"); } -- (void)testFWFWKPermissionDecisionFromData API_AVAILABLE(ios(15.0)) { +- (void)testFWFWKPermissionDecisionFromData API_AVAILABLE(ios(15.0), macos(12)) { XCTAssertEqual(FWFNativeWKPermissionDecisionFromData( [FWFWKPermissionDecisionData makeWithValue:FWFWKPermissionDecisionDeny]), WKPermissionDecisionDeny); @@ -149,7 +154,7 @@ - (void)testFWFWKPermissionDecisionFromData API_AVAILABLE(ios(15.0)) { WKPermissionDecisionPrompt); } -- (void)testFWFWKMediaCaptureTypeDataFromWKMediaCaptureType API_AVAILABLE(ios(15.0)) { +- (void)testFWFWKMediaCaptureTypeDataFromWKMediaCaptureType API_AVAILABLE(ios(15.0), macos(12)) { XCTAssertEqual( FWFWKMediaCaptureTypeDataFromNativeWKMediaCaptureType(WKMediaCaptureTypeCamera).value, FWFWKMediaCaptureTypeCamera); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFErrorTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFErrorTests.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFErrorTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFErrorTests.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFHTTPCookieStoreHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFHTTPCookieStoreHostApiTests.m similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFHTTPCookieStoreHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFHTTPCookieStoreHostApiTests.m index 478e4fedef01..eb1e6f250ff8 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFHTTPCookieStoreHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFHTTPCookieStoreHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFHTTPCookieStoreHostApiTests : XCTestCase @@ -47,9 +52,8 @@ - (void)testSetCookie { completion:^(FlutterError *error) { blockError = error; }]; - OCMVerify([mockHttpCookieStore - setCookie:[NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName : @"hello"}] - completionHandler:OCMOCK_ANY]); + NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:@{NSHTTPCookieName : @"hello"}]; + OCMVerify([mockHttpCookieStore setCookie:cookie completionHandler:OCMOCK_ANY]); XCTAssertNil(blockError); } @end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFInstanceManagerTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFInstanceManagerTests.m similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFInstanceManagerTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFInstanceManagerTests.m index 24769e182f29..710dcb791b2a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFInstanceManagerTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFInstanceManagerTests.m @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import +@import XCTest; @import webview_flutter_wkwebview; #if __has_include() diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFNavigationDelegateHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFNavigationDelegateHostApiTests.m similarity index 97% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFNavigationDelegateHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFNavigationDelegateHostApiTests.m index 829d27643bfb..4bd8337070b4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFNavigationDelegateHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFNavigationDelegateHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFNavigationDelegateHostApiTests : XCTestCase @@ -117,8 +122,8 @@ - (void)testDecidePolicyForNavigationAction { [instanceManager addDartCreatedInstance:mockWebView withIdentifier:1]; WKNavigationAction *mockNavigationAction = OCMClassMock([WKNavigationAction class]); - OCMStub([mockNavigationAction request]) - .andReturn([NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.flutter.dev"]]); + NSURL *testURL = [NSURL URLWithString:@"https://www.flutter.dev"]; + OCMStub([mockNavigationAction request]).andReturn([NSURLRequest requestWithURL:testURL]); WKFrameInfo *mockFrameInfo = OCMClassMock([WKFrameInfo class]); OCMStub([mockFrameInfo isMainFrame]).andReturn(YES); @@ -258,10 +263,10 @@ - (void)testDidReceiveAuthenticationChallenge { NSURLCredential *__block callbackCredential; [mockDelegate webView:mockWebView didReceiveAuthenticationChallenge:mockChallenge - completionHandler:^(NSURLSessionAuthChallengeDisposition disposition, - NSURLCredential *credential) { - callbackDisposition = disposition; - callbackCredential = credential; + completionHandler:^(NSURLSessionAuthChallengeDisposition dispositionArg, + NSURLCredential *credentialArg) { + callbackDisposition = dispositionArg; + callbackCredential = credentialArg; }]; XCTAssertEqual(callbackDisposition, NSURLSessionAuthChallengeCancelAuthenticationChallenge); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFObjectHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFObjectHostApiTests.m similarity index 92% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFObjectHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFObjectHostApiTests.m index 8c0b90850a82..4b4f576ffeef 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFObjectHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFObjectHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFObjectHostApiTests : XCTestCase @@ -139,8 +144,10 @@ - (void)testObserveValueForKeyPath { return value[0].value == FWFNSKeyValueChangeKeyEnumOldValue; }] changeValues:[OCMArg checkWithBlock:^BOOL(id value) { - FWFObjectOrIdentifier *object = (FWFObjectOrIdentifier *)value[0]; - return !object.isIdentifier && [@"key" isEqual:object.value]; + FWFObjectOrIdentifier *changeObject = + (FWFObjectOrIdentifier *)value[0]; + return !changeObject.isIdentifier && + [@"key" isEqual:changeObject.value]; }] completion:OCMOCK_ANY]); } @@ -173,8 +180,10 @@ - (void)testObserveValueForKeyPathWithIdentifier { return value[0].value == FWFNSKeyValueChangeKeyEnumOldValue; }] changeValues:[OCMArg checkWithBlock:^BOOL(id value) { - FWFObjectOrIdentifier *object = (FWFObjectOrIdentifier *)value[0]; - return object.isIdentifier && [@(2) isEqual:object.value]; + FWFObjectOrIdentifier *changeObject = + (FWFObjectOrIdentifier *)value[0]; + return changeObject.isIdentifier && + [@(2) isEqual:changeObject.value]; }] completion:OCMOCK_ANY]); } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFPreferencesHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFPreferencesHostApiTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFPreferencesHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFPreferencesHostApiTests.m index dcbe75bf58fb..f0f919619788 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFPreferencesHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFPreferencesHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFPreferencesHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScriptMessageHandlerHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScriptMessageHandlerHostApiTests.m similarity index 98% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScriptMessageHandlerHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScriptMessageHandlerHostApiTests.m index fb9958726286..30064b5dfaa0 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScriptMessageHandlerHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScriptMessageHandlerHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFScriptMessageHandlerHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewDelegateHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewDelegateHostApiTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewDelegateHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewDelegateHostApiTests.m index 02e89aa6cec1..21a6f4e70201 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewDelegateHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewDelegateHostApiTests.m @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "TargetConditionals.h" + +// The scroll view delegate does not exist on macOS. +#if !TARGET_OS_OSX + @import Flutter; @import XCTest; @import webview_flutter_wkwebview; @@ -80,3 +85,5 @@ - (void)testOnScrollViewDidScrollForDelegateWithIdentifier { completion:OCMOCK_ANY]); } @end + +#endif // !TARGET_OS_OSX diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewHostApiTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewHostApiTests.m index 306fc8f9dfc4..17512ce4b5c6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFScrollViewHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFScrollViewHostApiTests.m @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "TargetConditionals.h" + +// Scroll view APIs do not existing on macOS. +#if !TARGET_OS_OSX + @import Flutter; @import XCTest; @import webview_flutter_wkwebview; @@ -79,3 +84,5 @@ - (void)testSetDelegateForScrollView { XCTAssertNil(error); } @end + +#endif // !TARGET_OS_OSX diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIDelegateHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIDelegateHostApiTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIDelegateHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIDelegateHostApiTests.m index 1c9b5f6b8a69..792d65da669e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIDelegateHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIDelegateHostApiTests.m @@ -2,13 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; #if __has_include() @import webview_flutter_wkwebview.Test; #endif +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFUIDelegateHostApiTests : XCTestCase @@ -77,8 +82,8 @@ - (void)testOnCreateWebViewForDelegateWithIdentifier { .ignoringNonObjectArgs(); WKNavigationAction *mockNavigationAction = OCMClassMock([WKNavigationAction class]); - OCMStub([mockNavigationAction request]) - .andReturn([NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.flutter.dev"]]); + NSURL *testURL = [NSURL URLWithString:@"https://www.flutter.dev"]; + OCMStub([mockNavigationAction request]).andReturn([NSURLRequest requestWithURL:testURL]); WKFrameInfo *mockFrameInfo = OCMClassMock([WKFrameInfo class]); OCMStub([mockFrameInfo isMainFrame]).andReturn(YES); @@ -100,7 +105,7 @@ - (void)testOnCreateWebViewForDelegateWithIdentifier { completion:OCMOCK_ANY]); } -- (void)testRequestMediaCapturePermissionForOrigin API_AVAILABLE(ios(15.0)) { +- (void)testRequestMediaCapturePermissionForOrigin API_AVAILABLE(ios(15.0), macos(12)) { FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init]; FWFUIDelegate *mockDelegate = [self mockDelegateWithManager:instanceManager identifier:0]; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIViewHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIViewHostApiTests.m similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIViewHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIViewHostApiTests.m index d15937b1fe9c..4c2ceecfaa9e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUIViewHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUIViewHostApiTests.m @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "TargetConditionals.h" + +#if !TARGET_OS_OSX + @import Flutter; @import XCTest; @import webview_flutter_wkwebview; @@ -47,3 +51,5 @@ - (void)testSetOpaque { } @end + +#endif // !TARGET_OS_OSX diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLAuthenticationChallengeHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLAuthenticationChallengeHostApiTests.m similarity index 97% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLAuthenticationChallengeHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLAuthenticationChallengeHostApiTests.m index fc0edf9f4027..ff6fb663cf84 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLAuthenticationChallengeHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLAuthenticationChallengeHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFURLAuthenticationChallengeHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLCredentialHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLCredentialHostApiTests.m similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLCredentialHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLCredentialHostApiTests.m index 7f3aa3426dad..bcc9f59e506c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLCredentialHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLCredentialHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFURLCredentialHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLProtectionSpaceHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLProtectionSpaceHostApiTests.m similarity index 97% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLProtectionSpaceHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLProtectionSpaceHostApiTests.m index c5a6cdf36cf1..be5738e919eb 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLProtectionSpaceHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLProtectionSpaceHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFURLProtectionSpaceHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLTests.m index 7e8d2ad0f129..a2e88197ca84 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFURLTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFURLTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFURLTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUserContentControllerHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUserContentControllerHostApiTests.m similarity index 98% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUserContentControllerHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUserContentControllerHostApiTests.m index 38da70fd62a3..82ca3261d1a4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFUserContentControllerHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFUserContentControllerHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFUserContentControllerHostApiTests : XCTestCase @@ -66,7 +71,7 @@ - (void)testRemoveScriptMessageHandler { XCTAssertNil(error); } -- (void)testRemoveAllScriptMessageHandlers API_AVAILABLE(ios(14.0)) { +- (void)testRemoveAllScriptMessageHandlers API_AVAILABLE(ios(14.0), macos(11)) { WKUserContentController *mockUserContentController = OCMClassMock([WKUserContentController class]); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewConfigurationHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewConfigurationHostApiTests.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewConfigurationHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewConfigurationHostApiTests.m index 5670468c0439..585f4cd047c6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewConfigurationHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewConfigurationHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFWebViewConfigurationHostApiTests : XCTestCase @@ -56,11 +61,14 @@ - (void)testSetAllowsInlineMediaPlayback { FlutterError *error; [hostAPI setAllowsInlineMediaPlaybackForConfigurationWithIdentifier:0 isAllowed:NO error:&error]; + // setAllowsInlineMediaPlayback does not existing on macOS; the call above should no-op for macOS. +#if !TARGET_OS_OSX OCMVerify([mockWebViewConfiguration setAllowsInlineMediaPlayback:NO]); +#endif XCTAssertNil(error); } -- (void)testSetLimitsNavigationsToAppBoundDomains API_AVAILABLE(ios(14.0)) { +- (void)testSetLimitsNavigationsToAppBoundDomains API_AVAILABLE(ios(14.0), macos(11)) { WKWebViewConfiguration *mockWebViewConfiguration = OCMClassMock([WKWebViewConfiguration class]); FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init]; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewFlutterWKWebViewExternalAPITests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.m similarity index 91% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewFlutterWKWebViewExternalAPITests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.m index 1452edeaa647..d4137c1997be 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewFlutterWKWebViewExternalAPITests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.m @@ -2,8 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +@import XCTest; + +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import -#import @import webview_flutter_wkwebview; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewHostApiTests.m similarity index 97% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewHostApiTests.m index 568e5fe1ed1c..49d5a20dd57c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebViewHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebViewHostApiTests.m @@ -2,13 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import +// Only used in !OSX test code, and causes unused function error if not ifdef'd out. +#if !TARGET_OS_OSX static bool feq(CGFloat a, CGFloat b) { return fabs(b - a) < FLT_EPSILON; } +#endif @interface FWFWebViewHostApiTests : XCTestCase @end @@ -78,8 +86,8 @@ - (void)testLoadRequestWithInvalidUrl { XCTAssertEqualObjects(error.message, @"Failed instantiating an NSURLRequest."); XCTAssertEqualObjects(error.details, @"URL was: '%invalidUrl%'"); } else { - NSMutableURLRequest *request = - [NSMutableURLRequest requestWithURL:[NSURL URLWithString:badURLString]]; + NSURL *badURL = [NSURL URLWithString:badURLString]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:badURL]; OCMVerify([mockWebView loadRequest:request]); } } @@ -252,9 +260,9 @@ - (void)testLoadFlutterAsset { [hostAPI loadAssetForWebViewWithIdentifier:0 assetKey:@"assets/index.html" error:&error]; XCTAssertNil(error); - OCMVerify([mockWebView - loadFileURL:[NSURL URLWithString:@"webview_flutter/myFolder/assets/index.html"] - allowingReadAccessToURL:[NSURL URLWithString:@"webview_flutter/myFolder/assets/"]]); + NSURL *fileURL = [NSURL URLWithString:@"webview_flutter/myFolder/assets/index.html"]; + NSURL *directoryURL = [NSURL URLWithString:@"webview_flutter/myFolder/assets/"]; + OCMVerify([mockWebView loadFileURL:fileURL allowingReadAccessToURL:directoryURL]); } - (void)testCanGoForward { @@ -418,6 +426,8 @@ - (void)testEvaluateJavaScriptReturnsNSErrorData { XCTAssertEqualObjects(errorData.userInfo, @{NSLocalizedDescriptionKey : @"description"}); } +// Content inset APIs don't exist on macOS. +#if !TARGET_OS_OSX - (void)testWebViewContentInsetBehaviorShouldBeNever { FWFInstanceManager *instanceManager = [[FWFInstanceManager alloc] init]; FWFWebViewHostApiImpl *hostAPI = [[FWFWebViewHostApiImpl alloc] @@ -471,6 +481,7 @@ - (void)testContentInsetsSumAlwaysZeroAfterSetFrame { XCTAssertTrue(feq(webView.scrollView.contentInset.bottom, -insetToAdjust.bottom)); XCTAssertTrue(CGRectEqualToRect(webView.frame, CGRectMake(0, 0, 300, 100))); } +#endif // !TARGET_OS_OSX - (void)testSetInspectable API_AVAILABLE(ios(16.4), macos(13.3)) { FWFWebView *mockWebView = OCMClassMock([FWFWebView class]); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebsiteDataStoreHostApiTests.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebsiteDataStoreHostApiTests.m similarity index 98% rename from packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebsiteDataStoreHostApiTests.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebsiteDataStoreHostApiTests.m index 880c81e59e95..bab732b88de2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/RunnerTests/FWFWebsiteDataStoreHostApiTests.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/Tests/FWFWebsiteDataStoreHostApiTests.m @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@import Flutter; @import XCTest; @import webview_flutter_wkwebview; +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + #import @interface FWFWebsiteDataStoreHostApiTests : XCTestCase diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview.podspec b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview.podspec similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview.podspec rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview.podspec index 1cd04956a2b2..af606661b6b5 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview.podspec +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview.podspec @@ -17,9 +17,10 @@ Downloaded by pub (not CocoaPods). s.source_files = 'webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/**/*.{h,m}' s.public_header_files = 'webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/**/*.h' s.module_map = 'webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/FlutterWebView.modulemap' - s.dependency 'Flutter' - - s.platform = :ios, '12.0' + s.ios.dependency 'Flutter' + s.osx.dependency 'FlutterMacOS' + s.ios.deployment_target = '12.0' + s.osx.deployment_target = '10.14' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } s.resource_bundles = {'webview_flutter_wkwebview_privacy' => ['webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy']} end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Package.swift b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Package.swift similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Package.swift rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Package.swift index 34c2e9d1e89d..127814584215 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Package.swift +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Package.swift @@ -9,7 +9,8 @@ import PackageDescription let package = Package( name: "webview_flutter_wkwebview", platforms: [ - .iOS("12.0") + .iOS("12.0"), + .macOS("10.14"), ], products: [ .library(name: "webview-flutter-wkwebview", targets: ["webview_flutter_wkwebview"]) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m similarity index 93% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m index 15f53f7b123c..ffa5da84c408 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.m @@ -36,10 +36,16 @@ - (instancetype)initWithManager:(FWFInstanceManager *)manager { return self; } +#pragma mark FlutterPlatformViewFactory + - (NSObject *)createArgsCodec { return [FlutterStandardMessageCodec sharedInstance]; } +// The FlutterPlatformViewFactory protocol is slightly different on iOS and +// macOS. +#if TARGET_OS_IOS + - (NSObject *)createWithFrame:(CGRect)frame viewIdentifier:(int64_t)viewId arguments:(id _Nullable)args { @@ -50,6 +56,17 @@ - (instancetype)initWithManager:(FWFInstanceManager *)manager { return webView; } +#else + +- (nonnull NSView *)createWithViewIdentifier:(int64_t)viewId arguments:(nullable id)args { + NSNumber *identifier = (NSNumber *)args; + FWFWebView *webView = + (FWFWebView *)[self.instanceManager instanceForIdentifier:identifier.longValue]; + return webView; +} + +#endif + @end @implementation FLTWebViewFlutterPlugin @@ -88,8 +105,10 @@ + (void)registerWithRegistrar:(NSObject *)registrar { SetUpFWFWKUIDelegateHostApi(registrar.messenger, [[FWFUIDelegateHostApiImpl alloc] initWithBinaryMessenger:registrar.messenger instanceManager:instanceManager]); +#if TARGET_OS_IOS SetUpFWFUIViewHostApi(registrar.messenger, [[FWFUIViewHostApiImpl alloc] initWithInstanceManager:instanceManager]); +#endif SetUpFWFWKUserContentControllerHostApi( registrar.messenger, [[FWFUserContentControllerHostApiImpl alloc] initWithInstanceManager:instanceManager]); @@ -106,10 +125,12 @@ + (void)registerWithRegistrar:(NSObject *)registrar { SetUpFWFNSUrlHostApi(registrar.messenger, [[FWFURLHostApiImpl alloc] initWithBinaryMessenger:registrar.messenger instanceManager:instanceManager]); +#if TARGET_OS_IOS SetUpFWFUIScrollViewDelegateHostApi( registrar.messenger, [[FWFScrollViewDelegateHostApiImpl alloc] initWithBinaryMessenger:registrar.messenger instanceManager:instanceManager]); +#endif SetUpFWFNSUrlCredentialHostApi( registrar.messenger, [[FWFURLCredentialHostApiImpl alloc] initWithBinaryMessenger:registrar.messenger diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m index a91c833918ef..ba752f3a8e33 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFDataConverters.m @@ -4,7 +4,11 @@ #import "./include/webview_flutter_wkwebview/FWFDataConverters.h" +#if TARGET_OS_OSX +#import +#else #import +#endif NSURLRequest *_Nullable FWFNativeNSURLRequestFromRequestData(FWFNSUrlRequestData *data) { NSURL *url = [NSURL URLWithString:data.url]; @@ -83,7 +87,7 @@ NSHTTPCookiePropertyKey _Nullable FWFNativeNSHTTPCookiePropertyKeyFromEnumData( case FWFNSHttpCookiePropertyKeyEnumPort: return NSHTTPCookiePort; case FWFNSHttpCookiePropertyKeyEnumSameSitePolicy: - if (@available(iOS 13.0, *)) { + if (@available(iOS 13.0, macOS 10.15, *)) { return NSHTTPCookieSameSitePolicy; } else { return nil; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m similarity index 73% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m index 5888d87785d8..0ceb9214ddec 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v13.0.0), do not edit directly. +// Autogenerated from Pigeon (v18.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon #import "./include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h" @@ -16,6 +16,29 @@ #error File requires ARC to be enabled. #endif +static NSArray *wrapResult(id result, FlutterError *error) { + if (error) { + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; + } + return @[ result ?: [NSNull null] ]; +} + +static FlutterError *createConnectionError(NSString *channelName) { + return [FlutterError + errorWithCode:@"channel-error" + message:[NSString stringWithFormat:@"%@/%@/%@", + @"Unable to establish connection on channel: '", + channelName, @"'."] + details:@""]; +} + +static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { + id result = array[key]; + return (result == [NSNull null]) ? nil : result; +} + /// Mirror of NSKeyValueObservingOptions. /// /// See @@ -202,19 +225,6 @@ - (instancetype)initWithValue:(FWFNSUrlCredentialPersistence)value { } @end -static NSArray *wrapResult(id result, FlutterError *error) { - if (error) { - return @[ - error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] - ]; - } - return @[ result ?: [NSNull null] ]; -} -static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { - id result = array[key]; - return (result == [NSNull null]) ? nil : result; -} - @interface FWFNSKeyValueObservingOptionsEnumData () + (FWFNSKeyValueObservingOptionsEnumData *)fromList:(NSArray *)list; + (nullable FWFNSKeyValueObservingOptionsEnumData *)nullableFromList:(NSArray *)list; @@ -910,10 +920,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFWKWebsiteDataStoreHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKWebsiteDataStoreHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKWebsiteDataStoreHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi." - @"createFromWebViewConfiguration" + initWithName:[NSString stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebsiteDataStoreHostApi.createFromWebViewConfiguration", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebsiteDataStoreHostApiGetCodec()]; if (api) { @@ -939,8 +961,11 @@ void SetUpFWFWKWebsiteDataStoreHostApi(id binaryMessenge } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi." - @"createDefaultDataStore" + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebsiteDataStoreHostApi.createDefaultDataStore", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebsiteDataStoreHostApiGetCodec()]; if (api) { @@ -961,8 +986,10 @@ void SetUpFWFWKWebsiteDataStoreHostApi(id binaryMessenge } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi." - @"removeDataOfTypes" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebsiteDataStoreHostApi.removeDataOfTypes", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebsiteDataStoreHostApiGetCodec()]; if (api) { @@ -999,10 +1026,21 @@ void SetUpFWFWKWebsiteDataStoreHostApi(id binaryMessenge void SetUpFWFUIViewHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFUIViewHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFUIViewHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIViewHostApi.setBackgroundColor", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIViewHostApiGetCodec()]; if (api) { @@ -1025,7 +1063,10 @@ void SetUpFWFUIViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIViewHostApi.setOpaque", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIViewHostApiGetCodec()]; if (api) { @@ -1054,10 +1095,21 @@ void SetUpFWFUIViewHostApi(id binaryMessenger, void SetUpFWFUIScrollViewHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFUIScrollViewHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFUIScrollViewHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewHostApi.createFromWebView", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewHostApiGetCodec()]; if (api) { @@ -1082,8 +1134,10 @@ void SetUpFWFUIScrollViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewHostApi.getContentOffset", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewHostApiGetCodec()]; if (api) { @@ -1105,7 +1159,10 @@ void SetUpFWFUIScrollViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewHostApi.scrollBy", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewHostApiGetCodec()]; if (api) { @@ -1128,8 +1185,10 @@ void SetUpFWFUIScrollViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewHostApi.setContentOffset", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewHostApiGetCodec()]; if (api) { @@ -1156,8 +1215,10 @@ void SetUpFWFUIScrollViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewHostApi.setDelegate", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewHostApiGetCodec()]; if (api) { @@ -1232,10 +1293,21 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFWKWebViewConfigurationHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKWebViewConfigurationHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKWebViewConfigurationHostApiWithSuffix( + id binaryMessenger, NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewConfigurationHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewConfigurationHostApiGetCodec()]; if (api) { @@ -1256,8 +1328,11 @@ void SetUpFWFWKWebViewConfigurationHostApi(id binaryMess } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKWebViewConfigurationHostApi.createFromWebView" + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewConfigurationHostApi.createFromWebView", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewConfigurationHostApiGetCodec()]; if (api) { @@ -1282,8 +1357,11 @@ void SetUpFWFWKWebViewConfigurationHostApi(id binaryMess } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback" + initWithName:[NSString stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewConfigurationHostApiGetCodec()]; if (api) { @@ -1309,8 +1387,11 @@ void SetUpFWFWKWebViewConfigurationHostApi(id binaryMess } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewConfigurationHostApi." + @"setLimitsNavigationsToAppBoundDomains", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewConfigurationHostApiGetCodec()]; if (api) { @@ -1337,8 +1418,11 @@ void SetUpFWFWKWebViewConfigurationHostApi(id binaryMess } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewConfigurationHostApi." + @"setMediaTypesRequiringUserActionForPlayback", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewConfigurationHostApiGetCodec()]; if (api) { @@ -1372,41 +1456,50 @@ void SetUpFWFWKWebViewConfigurationHostApi(id binaryMess @interface FWFWKWebViewConfigurationFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFWKWebViewConfigurationFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } - (void)createWithIdentifier:(NSInteger)arg_identifier completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationFlutterApi.create", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationFlutterApi.create" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKWebViewConfigurationFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -1465,10 +1558,23 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFWKUserContentControllerHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKUserContentControllerHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKUserContentControllerHostApiWithSuffix( + id binaryMessenger, NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.createFromWebViewConfiguration" + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.createFromWebViewConfiguration", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1494,8 +1600,11 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.addScriptMessageHandler" + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.addScriptMessageHandler", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1524,8 +1633,11 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.removeScriptMessageHandler" + initWithName:[NSString stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.removeScriptMessageHandler", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1550,8 +1662,12 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.removeAllScriptMessageHandlers" + initWithName:[NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.removeAllScriptMessageHandlers", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1573,8 +1689,10 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.addUserScript" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.addUserScript", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1599,8 +1717,11 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKUserContentControllerHostApi.removeAllUserScripts" + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUserContentControllerHostApi.removeAllUserScripts", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUserContentControllerHostApiGetCodec()]; if (api) { @@ -1629,10 +1750,22 @@ void SetUpFWFWKUserContentControllerHostApi(id binaryMes void SetUpFWFWKPreferencesHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKPreferencesHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKPreferencesHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi." - @"createFromWebViewConfiguration" + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKPreferencesHostApi.createFromWebViewConfiguration", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKPreferencesHostApiGetCodec()]; if (api) { @@ -1658,8 +1791,10 @@ void SetUpFWFWKPreferencesHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi." - @"setJavaScriptEnabled" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKPreferencesHostApi.setJavaScriptEnabled", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKPreferencesHostApiGetCodec()]; if (api) { @@ -1691,10 +1826,21 @@ void SetUpFWFWKPreferencesHostApi(id binaryMessenger, void SetUpFWFWKScriptMessageHandlerHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKScriptMessageHandlerHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKScriptMessageHandlerHostApiWithSuffix( + id binaryMessenger, NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKScriptMessageHandlerHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKScriptMessageHandlerHostApiGetCodec()]; if (api) { @@ -1764,14 +1910,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { @interface FWFWKScriptMessageHandlerFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFWKScriptMessageHandlerFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -1780,30 +1934,31 @@ - (instancetype)initWithBinaryMessenger:(NSObject *)bina userContentControllerIdentifier:(NSInteger)arg_userContentControllerIdentifier message:(FWFWKScriptMessageData *)arg_message completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKScriptMessageHandlerFlutterApi.didReceiveScriptMessage", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKScriptMessageHandlerFlutterApi.didReceiveScriptMessage" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKScriptMessageHandlerFlutterApiGetCodec()]; - [channel - sendMessage:@[ - @(arg_identifier), @(arg_userContentControllerIdentifier), arg_message ?: [NSNull null] - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ + @(arg_identifier), @(arg_userContentControllerIdentifier), arg_message ?: [NSNull null] + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -1815,10 +1970,21 @@ - (instancetype)initWithBinaryMessenger:(NSObject *)bina void SetUpFWFWKNavigationDelegateHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKNavigationDelegateHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKNavigationDelegateHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKNavigationDelegateHostApiGetCodec()]; if (api) { @@ -1923,14 +2089,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { @interface FWFWKNavigationDelegateFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFWKNavigationDelegateFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -1938,56 +2112,58 @@ - (void)didFinishNavigationForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier URL:(nullable NSString *)arg_url completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.didFinishNavigation", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.didFinishNavigation" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_url ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_url ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)didStartProvisionalNavigationForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier URL:(nullable NSString *)arg_url completion:(void (^)(FlutterError *_Nullable)) completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.didStartProvisionalNavigation", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.didStartProvisionalNavigation" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_url ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_url ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)decidePolicyForNavigationActionForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier @@ -1998,9 +2174,13 @@ - (void)decidePolicyForNavigationActionForDelegateWithIdentifier:(NSInteger)arg_ FWFWKNavigationActionPolicyEnumData *_Nullable, FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.decidePolicyForNavigationAction", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.decidePolicyForNavigationAction" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @@ -2018,10 +2198,7 @@ - (void)decidePolicyForNavigationActionForDelegateWithIdentifier:(NSInteger)arg_ completion(output, nil); } } else { - completion(nil, [FlutterError - errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(nil, createConnectionError(channelName)); } }]; } @@ -2035,9 +2212,13 @@ - (void)decidePolicyForNavigationResponseForDelegateWithIdentifier:(NSInteger)ar *_Nullable, FlutterError *_Nullable)) completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.decidePolicyForNavigationResponse", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.decidePolicyForNavigationResponse" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @@ -2058,10 +2239,7 @@ - (void)decidePolicyForNavigationResponseForDelegateWithIdentifier:(NSInteger)ar completion(output, nil); } } else { - completion(nil, [FlutterError - errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(nil, createConnectionError(channelName)); } }]; } @@ -2069,56 +2247,58 @@ - (void)didFailNavigationForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier error:(FWFNSErrorData *)arg_error completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.didFailNavigation", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.didFailNavigation" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_error ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_error ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)didFailProvisionalNavigationForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier error:(FWFNSErrorData *)arg_error completion:(void (^)(FlutterError *_Nullable)) completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.didFailProvisionalNavigation", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.didFailProvisionalNavigation" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_error ?: [NSNull null] ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), arg_error ?: [NSNull null] ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)webViewWebContentProcessDidTerminateForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier: @@ -2126,28 +2306,29 @@ - (void)webViewWebContentProcessDidTerminateForDelegateWithIdentifier:(NSInteger completion: (void (^)(FlutterError *_Nullable)) completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.webViewWebContentProcessDidTerminate", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.webViewWebContentProcessDidTerminate" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void) didReceiveAuthenticationChallengeForDelegateWithIdentifier:(NSInteger)arg_identifier @@ -2158,9 +2339,13 @@ - (void)webViewWebContentProcessDidTerminateForDelegateWithIdentifier:(NSInteger *_Nullable, FlutterError *_Nullable)) completion { + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKNavigationDelegateFlutterApi.didReceiveAuthenticationChallenge", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"WKNavigationDelegateFlutterApi.didReceiveAuthenticationChallenge" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFWKNavigationDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @(arg_identifier), @(arg_webViewIdentifier), @(arg_challengeIdentifier) ] @@ -2176,10 +2361,7 @@ - (void)webViewWebContentProcessDidTerminateForDelegateWithIdentifier:(NSInteger completion(output, nil); } } else { - completion(nil, [FlutterError - errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(nil, createConnectionError(channelName)); } }]; } @@ -2235,9 +2417,21 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFNSObjectHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFNSObjectHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFNSObjectHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSObjectHostApi.dispose", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFNSObjectHostApiGetCodec()]; if (api) { @@ -2258,7 +2452,10 @@ void SetUpFWFNSObjectHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSObjectHostApi.addObserver", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFNSObjectHostApiGetCodec()]; if (api) { @@ -2290,8 +2487,10 @@ void SetUpFWFNSObjectHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSObjectHostApi.removeObserver", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFNSObjectHostApiGetCodec()]; if (api) { @@ -2373,14 +2572,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { @interface FWFNSObjectFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFNSObjectFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -2391,56 +2598,56 @@ - (void)observeValueForObjectWithIdentifier:(NSInteger)arg_identifier (NSArray *)arg_changeKeys changeValues:(NSArray *)arg_changeValues completion:(void (^)(FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.observeValue" - binaryMessenger:self.binaryMessenger - codec:FWFNSObjectFlutterApiGetCodec()]; - [channel - sendMessage:@[ - @(arg_identifier), arg_keyPath ?: [NSNull null], @(arg_objectIdentifier), - arg_changeKeys ?: [NSNull null], arg_changeValues ?: [NSNull null] - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", @"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.observeValue", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFNSObjectFlutterApiGetCodec()]; + [channel sendMessage:@[ + @(arg_identifier), arg_keyPath ?: [NSNull null], @(arg_objectIdentifier), + arg_changeKeys ?: [NSNull null], arg_changeValues ?: [NSNull null] + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)disposeObjectWithIdentifier:(NSInteger)arg_identifier completion:(void (^)(FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.dispose" - binaryMessenger:self.binaryMessenger - codec:FWFNSObjectFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.dispose", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFNSObjectFlutterApiGetCodec()]; + [channel sendMessage:@[ @(arg_identifier) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -2594,9 +2801,21 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFWKWebViewHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKWebViewHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKWebViewHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2621,8 +2840,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.setUIDelegate", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2647,8 +2868,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi." - @"setNavigationDelegate" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.setNavigationDelegate", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2674,7 +2897,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.getUrl", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2695,8 +2921,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.getEstimatedProgress", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2719,7 +2947,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.loadRequest", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2742,8 +2973,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.loadHtmlString", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2770,7 +3003,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.loadFileUrl", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2797,8 +3033,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.loadFlutterAsset", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2821,7 +3059,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.canGoBack", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2842,8 +3083,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.canGoForward", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2864,7 +3107,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.goBack", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2885,7 +3131,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.goForward", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2906,7 +3155,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.reload", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2927,7 +3179,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.getTitle", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2948,8 +3203,11 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi." - @"setAllowsBackForwardNavigationGestures" + initWithName:[NSString stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.setAllowsBackForwardNavigationGestures", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -2974,8 +3232,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.setCustomUserAgent", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -3000,8 +3260,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.evaluateJavaScript", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -3028,8 +3290,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.setInspectable", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -3054,8 +3318,10 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKWebViewHostApi.getCustomUserAgent", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKWebViewHostApiGetCodec()]; if (api) { @@ -3084,9 +3350,21 @@ void SetUpFWFWKWebViewHostApi(id binaryMessenger, void SetUpFWFWKUIDelegateHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKUIDelegateHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKUIDelegateHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUIDelegateHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKUIDelegateHostApiGetCodec()]; if (api) { @@ -3181,14 +3459,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { @interface FWFWKUIDelegateFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFWKUIDelegateFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -3197,31 +3483,32 @@ - (void)onCreateWebViewForDelegateWithIdentifier:(NSInteger)arg_identifier configurationIdentifier:(NSInteger)arg_configurationIdentifier navigationAction:(FWFWKNavigationActionData *)arg_navigationAction completion:(void (^)(FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.onCreateWebView" - binaryMessenger:self.binaryMessenger - codec:FWFWKUIDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ - @(arg_identifier), @(arg_webViewIdentifier), @(arg_configurationIdentifier), - arg_navigationAction ?: [NSNull null] - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.onCreateWebView", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFWKUIDelegateFlutterApiGetCodec()]; + [channel sendMessage:@[ + @(arg_identifier), @(arg_webViewIdentifier), @(arg_configurationIdentifier), + arg_navigationAction ?: [NSNull null] + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } - (void)requestMediaCapturePermissionForDelegateWithIdentifier:(NSInteger)arg_identifier webViewIdentifier:(NSInteger)arg_webViewIdentifier @@ -3232,44 +3519,49 @@ - (void)requestMediaCapturePermissionForDelegateWithIdentifier:(NSInteger)arg_id (void (^)( FWFWKPermissionDecisionData *_Nullable, FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi." - @"requestMediaCapturePermission" - binaryMessenger:self.binaryMessenger - codec:FWFWKUIDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ - @(arg_identifier), @(arg_webViewIdentifier), arg_origin ?: [NSNull null], - arg_frame ?: [NSNull null], arg_type ?: [NSNull null] - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion(nil, [FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - FWFWKPermissionDecisionData *output = reply[0] == [NSNull null] ? nil : reply[0]; - completion(output, nil); - } - } else { - completion(nil, - [FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUIDelegateFlutterApi.requestMediaCapturePermission", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFWKUIDelegateFlutterApiGetCodec()]; + [channel sendMessage:@[ + @(arg_identifier), @(arg_webViewIdentifier), arg_origin ?: [NSNull null], + arg_frame ?: [NSNull null], arg_type ?: [NSNull null] + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion(nil, [FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + FWFWKPermissionDecisionData *output = + reply[0] == [NSNull null] ? nil : reply[0]; + completion(output, nil); + } + } else { + completion(nil, createConnectionError(channelName)); + } + }]; } - (void)runJavaScriptAlertPanelForDelegateWithIdentifier:(NSInteger)arg_identifier message:(NSString *)arg_message frame:(FWFWKFrameInfoData *)arg_frame completion: (void (^)(FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi." - @"runJavaScriptAlertPanel" - binaryMessenger:self.binaryMessenger - codec:FWFWKUIDelegateFlutterApiGetCodec()]; + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUIDelegateFlutterApi.runJavaScriptAlertPanel", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFWKUIDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @(arg_identifier), arg_message ?: [NSNull null], arg_frame ?: [NSNull null] ] reply:^(NSArray *reply) { @@ -3282,9 +3574,7 @@ - (void)runJavaScriptAlertPanelForDelegateWithIdentifier:(NSInteger)arg_identifi completion(nil); } } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(createConnectionError(channelName)); } }]; } @@ -3294,11 +3584,15 @@ - (void)runJavaScriptConfirmPanelForDelegateWithIdentifier:(NSInteger)arg_identi completion: (void (^)(NSNumber *_Nullable, FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi." - @"runJavaScriptConfirmPanel" - binaryMessenger:self.binaryMessenger - codec:FWFWKUIDelegateFlutterApiGetCodec()]; + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUIDelegateFlutterApi.runJavaScriptConfirmPanel", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFWKUIDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @(arg_identifier), arg_message ?: [NSNull null], arg_frame ?: [NSNull null] ] reply:^(NSArray *reply) { @@ -3312,10 +3606,7 @@ - (void)runJavaScriptConfirmPanelForDelegateWithIdentifier:(NSInteger)arg_identi completion(output, nil); } } else { - completion(nil, - [FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(nil, createConnectionError(channelName)); } }]; } @@ -3326,11 +3617,15 @@ - (void)runJavaScriptTextInputPanelForDelegateWithIdentifier:(NSInteger)arg_iden completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable)) completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi." - @"runJavaScriptTextInputPanel" - binaryMessenger:self.binaryMessenger - codec:FWFWKUIDelegateFlutterApiGetCodec()]; + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKUIDelegateFlutterApi.runJavaScriptTextInputPanel", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFWKUIDelegateFlutterApiGetCodec()]; [channel sendMessage:@[ @(arg_identifier), arg_prompt ?: [NSNull null], arg_defaultText ?: [NSNull null], arg_frame ?: [NSNull null] @@ -3346,10 +3641,7 @@ - (void)runJavaScriptTextInputPanelForDelegateWithIdentifier:(NSInteger)arg_iden completion(output, nil); } } else { - completion(nil, [FlutterError - errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); + completion(nil, createConnectionError(channelName)); } }]; } @@ -3410,10 +3702,22 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { void SetUpFWFWKHttpCookieStoreHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFWKHttpCookieStoreHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFWKHttpCookieStoreHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi." - @"createFromWebsiteDataStore" + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKHttpCookieStoreHostApi.createFromWebsiteDataStore", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKHttpCookieStoreHostApiGetCodec()]; if (api) { @@ -3438,8 +3742,10 @@ void SetUpFWFWKHttpCookieStoreHostApi(id binaryMessenger } { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"WKHttpCookieStoreHostApi.setCookie", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFWKHttpCookieStoreHostApiGetCodec()]; if (api) { @@ -3471,10 +3777,21 @@ void SetUpFWFWKHttpCookieStoreHostApi(id binaryMessenger void SetUpFWFNSUrlHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFNSUrlHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFNSUrlHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSUrlHostApi.getAbsoluteString", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFNSUrlHostApiGetCodec()]; if (api) { @@ -3502,40 +3819,49 @@ void SetUpFWFNSUrlHostApi(id binaryMessenger, @interface FWFNSUrlFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFNSUrlFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } - (void)createWithIdentifier:(NSInteger)arg_identifier completion:(void (^)(FlutterError *_Nullable))completion { - FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlFlutterApi.create" - binaryMessenger:self.binaryMessenger - codec:FWFNSUrlFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + NSString *channelName = [NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlFlutterApi.create", + _messageChannelSuffix]; + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel messageChannelWithName:channelName + binaryMessenger:self.binaryMessenger + codec:FWFNSUrlFlutterApiGetCodec()]; + [channel sendMessage:@[ @(arg_identifier) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -3547,10 +3873,21 @@ - (void)createWithIdentifier:(NSInteger)arg_identifier void SetUpFWFUIScrollViewDelegateHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFUIScrollViewDelegateHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFUIScrollViewDelegateHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewDelegateHostApi.create", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFUIScrollViewDelegateHostApiGetCodec()]; if (api) { @@ -3578,14 +3915,22 @@ void SetUpFWFUIScrollViewDelegateHostApi(id binaryMessen @interface FWFUIScrollViewDelegateFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFUIScrollViewDelegateFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -3594,28 +3939,29 @@ - (void)scrollViewDidScrollWithIdentifier:(NSInteger)arg_identifier x:(double)arg_x y:(double)arg_y completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"UIScrollViewDelegateFlutterApi.scrollViewDidScroll", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"UIScrollViewDelegateFlutterApi.scrollViewDidScroll" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFUIScrollViewDelegateFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_uiScrollViewIdentifier), @(arg_x), @(arg_y) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_uiScrollViewIdentifier), @(arg_x), @(arg_y) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -3627,11 +3973,22 @@ - (void)scrollViewDidScrollWithIdentifier:(NSInteger)arg_identifier void SetUpFWFNSUrlCredentialHostApi(id binaryMessenger, NSObject *api) { + SetUpFWFNSUrlCredentialHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFWFNSUrlCredentialHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; /// Create a new native instance and add it to the `InstanceManager`. { FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser" + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSUrlCredentialHostApi.createWithUser", + messageChannelSuffix] binaryMessenger:binaryMessenger codec:FWFNSUrlCredentialHostApiGetCodec()]; if (api) { @@ -3668,14 +4025,22 @@ void SetUpFWFNSUrlCredentialHostApi(id binaryMessenger, @interface FWFNSUrlProtectionSpaceFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFNSUrlProtectionSpaceFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } @@ -3684,31 +4049,32 @@ - (void)createWithIdentifier:(NSInteger)arg_identifier realm:(nullable NSString *)arg_realm authenticationMethod:(nullable NSString *)arg_authenticationMethod completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = [NSString + stringWithFormat: + @"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlProtectionSpaceFlutterApi.create", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName: - @"dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlProtectionSpaceFlutterApi.create" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFNSUrlProtectionSpaceFlutterApiGetCodec()]; - [channel - sendMessage:@[ - @(arg_identifier), arg_host ?: [NSNull null], arg_realm ?: [NSNull null], - arg_authenticationMethod ?: [NSNull null] - ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ + @(arg_identifier), arg_host ?: [NSNull null], arg_realm ?: [NSNull null], + arg_authenticationMethod ?: [NSNull null] + ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end @@ -3720,41 +4086,50 @@ - (void)createWithIdentifier:(NSInteger)arg_identifier @interface FWFNSUrlAuthenticationChallengeFlutterApi () @property(nonatomic, strong) NSObject *binaryMessenger; +@property(nonatomic, strong) NSString *messageChannelSuffix; @end @implementation FWFNSUrlAuthenticationChallengeFlutterApi - (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger { - self = [super init]; + return [self initWithBinaryMessenger:binaryMessenger messageChannelSuffix:@""]; +} +- (instancetype)initWithBinaryMessenger:(NSObject *)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix { + self = [self init]; if (self) { _binaryMessenger = binaryMessenger; + _messageChannelSuffix = [messageChannelSuffix length] == 0 + ? @"" + : [NSString stringWithFormat:@".%@", messageChannelSuffix]; } return self; } - (void)createWithIdentifier:(NSInteger)arg_identifier protectionSpaceIdentifier:(NSInteger)arg_protectionSpaceIdentifier completion:(void (^)(FlutterError *_Nullable))completion { + NSString *channelName = + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.webview_flutter_wkwebview." + @"NSUrlAuthenticationChallengeFlutterApi.create", + _messageChannelSuffix]; FlutterBasicMessageChannel *channel = [FlutterBasicMessageChannel - messageChannelWithName:@"dev.flutter.pigeon.webview_flutter_wkwebview." - @"NSUrlAuthenticationChallengeFlutterApi.create" + messageChannelWithName:channelName binaryMessenger:self.binaryMessenger codec:FWFNSUrlAuthenticationChallengeFlutterApiGetCodec()]; - [channel - sendMessage:@[ @(arg_identifier), @(arg_protectionSpaceIdentifier) ] - reply:^(NSArray *reply) { - if (reply != nil) { - if (reply.count > 1) { - completion([FlutterError errorWithCode:reply[0] - message:reply[1] - details:reply[2]]); - } else { - completion(nil); - } - } else { - completion([FlutterError errorWithCode:@"channel-error" - message:@"Unable to establish connection on channel." - details:@""]); - } - }]; + [channel sendMessage:@[ @(arg_identifier), @(arg_protectionSpaceIdentifier) ] + reply:^(NSArray *reply) { + if (reply != nil) { + if (reply.count > 1) { + completion([FlutterError errorWithCode:reply[0] + message:reply[1] + details:reply[2]]); + } else { + completion(nil); + } + } else { + completion(createConnectionError(channelName)); + } + }]; } @end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m index 030f8eab7638..26182be6391a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFInstanceManager.m @@ -140,17 +140,17 @@ - (long)identifierWithStrongReferenceForInstance:(nonnull NSObject *)instance { NSNumber *__block identifierNumber = nil; dispatch_sync(_lockQueue, ^{ identifierNumber = [self.identifiers objectForKey:instance]; - if (identifierNumber) { + if (identifierNumber != nil) { [self.strongInstances setObject:instance forKey:identifierNumber]; } }); - return identifierNumber ? identifierNumber.longValue : NSNotFound; + return identifierNumber != nil ? identifierNumber.longValue : NSNotFound; } - (BOOL)containsInstance:(nonnull NSObject *)instance { BOOL __block containsInstance; dispatch_sync(_lockQueue, ^{ - containsInstance = [self.identifiers objectForKey:instance]; + containsInstance = [self.identifiers objectForKey:instance] != nil; }); return containsInstance; } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m index 27743a515f0b..d862de226207 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.m @@ -276,7 +276,7 @@ - (void)webView:(WKWebView *)webView response.disposition); NSURLCredential *credential = - response.credentialIdentifier + response.credentialIdentifier != nil ? (NSURLCredential *)[self.navigationDelegateAPI .instanceManager instanceForIdentifier: diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFObjectHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFObjectHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFObjectHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFObjectHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m index fb578a1f65e7..b2b442b3ffac 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFPreferencesHostApi.m @@ -39,6 +39,10 @@ - (void)createFromWebViewConfigurationWithIdentifier:(NSInteger)identifier - (void)setJavaScriptEnabledForPreferencesWithIdentifier:(NSInteger)identifier isEnabled:(BOOL)enabled error:(FlutterError *_Nullable *_Nonnull)error { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + // TODO(stuartmorgan): Replace with new API. See https://github.com/flutter/flutter/issues/125901 [[self preferencesForIdentifier:identifier] setJavaScriptEnabled:enabled]; +#pragma clang diagnostic pop } @end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m index 99275334a555..ec5e55587dc3 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.m @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Using directory structure to remove platform-specific files doesn't work +// well with umbrella headers and module maps, so just no-op the file for +// other platforms instead. +#if TARGET_OS_IOS + #import "./include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h" #import "./include/webview_flutter_wkwebview/FWFWebViewHostApi.h" @@ -88,3 +93,5 @@ - (void)createWithIdentifier:(NSInteger)identifier error:(FlutterError *_Nullabl [self.instanceManager addDartCreatedInstance:uiScrollViewDelegate withIdentifier:identifier]; } @end + +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m similarity index 89% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m index 8d541235b012..b57ba2a539a4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFScrollViewHostApi.m @@ -24,47 +24,65 @@ - (instancetype)initWithInstanceManager:(FWFInstanceManager *)instanceManager { return self; } +#if TARGET_OS_IOS - (UIScrollView *)scrollViewForIdentifier:(NSInteger)identifier { return (UIScrollView *)[self.instanceManager instanceForIdentifier:identifier]; } +#endif - (void)createFromWebViewWithIdentifier:(NSInteger)identifier webViewIdentifier:(NSInteger)webViewIdentifier error:(FlutterError *_Nullable __autoreleasing *_Nonnull)error { +#if TARGET_OS_IOS WKWebView *webView = (WKWebView *)[self.instanceManager instanceForIdentifier:webViewIdentifier]; [self.instanceManager addDartCreatedInstance:webView.scrollView withIdentifier:identifier]; +#else + *error = [FlutterError errorWithCode:@"UnavailableApi" + message:@"scrollView is unavailable on macOS" + details:nil]; +#endif } - (NSArray *) contentOffsetForScrollViewWithIdentifier:(NSInteger)identifier error:(FlutterError *_Nullable *_Nonnull)error { +#if TARGET_OS_IOS CGPoint point = [[self scrollViewForIdentifier:identifier] contentOffset]; return @[ @(point.x), @(point.y) ]; +#else + return @[ @(0), @(0) ]; +#endif } - (void)scrollByForScrollViewWithIdentifier:(NSInteger)identifier x:(double)x y:(double)y error:(FlutterError *_Nullable *_Nonnull)error { +#if TARGET_OS_IOS UIScrollView *scrollView = [self scrollViewForIdentifier:identifier]; CGPoint contentOffset = scrollView.contentOffset; [scrollView setContentOffset:CGPointMake(contentOffset.x + x, contentOffset.y + y)]; +#endif } - (void)setContentOffsetForScrollViewWithIdentifier:(NSInteger)identifier toX:(double)x y:(double)y error:(FlutterError *_Nullable *_Nonnull)error { +#if TARGET_OS_IOS [[self scrollViewForIdentifier:identifier] setContentOffset:CGPointMake(x, y)]; +#endif } - (void)setDelegateForScrollViewWithIdentifier:(NSInteger)identifier uiScrollViewDelegateIdentifier:(nullable NSNumber *)uiScrollViewDelegateIdentifier error:(FlutterError *_Nullable *_Nonnull)error { +#if TARGET_OS_IOS [[self scrollViewForIdentifier:identifier] setDelegate:uiScrollViewDelegateIdentifier ? (FWFScrollViewDelegate *)[self.instanceManager instanceForIdentifier:uiScrollViewDelegateIdentifier.longValue] : nil]; +#endif } @end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m index 95dc46546d96..e38635a3d218 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIDelegateHostApi.m @@ -64,7 +64,7 @@ - (void)requestMediaCapturePermissionForDelegateWithIdentifier:(FWFUIDelegate *) type:(WKMediaCaptureType)type completion: (void (^)(WKPermissionDecision))completion - API_AVAILABLE(ios(15.0)) { + API_AVAILABLE(ios(15.0), macos(12)) { [self requestMediaCapturePermissionForDelegateWithIdentifier:[self identifierForDelegate:instance] webViewIdentifier: @@ -177,7 +177,7 @@ - (void)webView:(WKWebView *)webView initiatedByFrame:(WKFrameInfo *)frame type:(WKMediaCaptureType)type decisionHandler:(void (^)(WKPermissionDecision))decisionHandler - API_AVAILABLE(ios(15.0)) { + API_AVAILABLE(ios(15.0), macos(12)) { [self.UIDelegateAPI requestMediaCapturePermissionForDelegateWithIdentifier:self webView:webView diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m similarity index 89% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m index 5cdfefecb5d2..0a2c0dcc36f8 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUIViewHostApi.m @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Using directory structure to remove platform-specific files doesn't work +// well with umbrella headers and module maps, so just no-op the file for +// other platforms instead. +#if TARGET_OS_IOS + #import "./include/webview_flutter_wkwebview/FWFUIViewHostApi.h" @interface FWFUIViewHostApiImpl () @@ -42,3 +47,5 @@ - (void)setOpaqueForViewWithIdentifier:(NSInteger)identifier [[self viewForIdentifier:identifier] setOpaque:opaque]; } @end + +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLCredentialHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLCredentialHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLCredentialHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLCredentialHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m similarity index 98% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m index 7e262b17ffb4..1cd80344e7f3 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFUserContentControllerHostApi.m @@ -55,12 +55,12 @@ - (void)removeAllScriptMessageHandlersForControllerWithIdentifier:(NSInteger)ide error: (FlutterError *_Nullable *_Nonnull) error { - if (@available(iOS 14.0, *)) { + if (@available(iOS 14.0, macOS 11, *)) { [[self userContentControllerForIdentifier:identifier] removeAllScriptMessageHandlers]; } else { *error = [FlutterError errorWithCode:@"FWFUnsupportedVersionError" - message:@"removeAllScriptMessageHandlers is only supported on versions 14+." + message:@"removeAllScriptMessageHandlers is only supported on iOS 14+ and macOS 11+." details:nil]; } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m similarity index 92% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m index ee5d2d32a8c6..d97bf9bfe6ed 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.m @@ -95,21 +95,25 @@ - (void)setAllowsInlineMediaPlaybackForConfigurationWithIdentifier:(NSInteger)id error: (FlutterError *_Nullable *_Nonnull) error { +#if TARGET_OS_IOS [[self webViewConfigurationForIdentifier:identifier] setAllowsInlineMediaPlayback:allow]; +#endif + // No-op, rather than error out, on macOS, since it's not a meaningful option on macOS and it's + // easier for clients if it's just ignored. } - (void)setLimitsNavigationsToAppBoundDomainsForConfigurationWithIdentifier:(NSInteger)identifier isLimited:(BOOL)limit error:(FlutterError *_Nullable *_Nonnull)error { - if (@available(iOS 14, *)) { + if (@available(iOS 14, macOS 11, *)) { [[self webViewConfigurationForIdentifier:identifier] setLimitsNavigationsToAppBoundDomains:limit]; } else { - *error = [FlutterError - errorWithCode:@"FWFUnsupportedVersionError" - message:@"setLimitsNavigationsToAppBoundDomains is only supported on versions 14+." - details:nil]; + *error = [FlutterError errorWithCode:@"FWFUnsupportedVersionError" + message:@"setLimitsNavigationsToAppBoundDomains is only supported " + @"on iOS 14+ and macOS 11+." + details:nil]; } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m index ee8f5131c882..2a937435c91f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebViewHostApi.m @@ -21,16 +21,19 @@ - (instancetype)initWithFrame:(CGRect)frame _objectApi = [[FWFObjectFlutterApiImpl alloc] initWithBinaryMessenger:binaryMessenger instanceManager:instanceManager]; +#if TARGET_OS_IOS self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; if (@available(iOS 13.0, *)) { self.scrollView.automaticallyAdjustsScrollIndicatorInsets = NO; } +#endif } return self; } - (void)setFrame:(CGRect)frame { [super setFrame:frame]; +#if TARGET_OS_IOS // Prevents the contentInsets from being adjusted by iOS and gives control to Flutter. self.scrollView.contentInset = UIEdgeInsetsZero; @@ -42,6 +45,7 @@ - (void)setFrame:(CGRect)frame { UIEdgeInsets insetToAdjust = self.scrollView.adjustedContentInset; self.scrollView.contentInset = UIEdgeInsetsMake(-insetToAdjust.top, -insetToAdjust.left, -insetToAdjust.bottom, -insetToAdjust.right); +#endif } - (void)observeValueForKeyPath:(NSString *)keyPath @@ -57,9 +61,13 @@ - (void)observeValueForKeyPath:(NSString *)keyPath }]; } +#pragma mark FlutterPlatformView + +#if TARGET_OS_IOS - (nonnull UIView *)view { return self; } +#endif @end @interface FWFWebViewHostApiImpl () diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.m b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.m similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.m rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.m diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/FlutterWebView.modulemap b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/FlutterWebView.modulemap similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/FlutterWebView.modulemap rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/FlutterWebView.modulemap diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview-umbrella.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview-umbrella.h similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview-umbrella.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview-umbrella.h diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h similarity index 82% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h index a1c035e40185..e57f238d9aab 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FLTWebViewFlutterPlugin.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + NS_ASSUME_NONNULL_BEGIN @interface FLTWebViewFlutterPlugin : NSObject diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h similarity index 99% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h index f97de9c8c19e..b007ff901b98 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFDataConverters.h @@ -175,7 +175,7 @@ extern FWFWKSecurityOriginData *FWFWKSecurityOriginDataFromNativeWKSecurityOrigi /// @param data The data object containing information to create a WKPermissionDecision. /// /// @return A WKPermissionDecision or -1 if data could not be converted. -API_AVAILABLE(ios(15.0)) +API_AVAILABLE(ios(15.0), macos(12)) extern WKPermissionDecision FWFNativeWKPermissionDecisionFromData( FWFWKPermissionDecisionData *data); @@ -184,7 +184,7 @@ extern WKPermissionDecision FWFNativeWKPermissionDecisionFromData( /// @param type The data object containing information to create a FWFWKMediaCaptureTypeData. /// /// @return A FWFWKMediaCaptureTypeData or nil if data could not be converted. -API_AVAILABLE(ios(15.0)) +API_AVAILABLE(ios(15.0), macos(12)) extern FWFWKMediaCaptureTypeData *FWFWKMediaCaptureTypeDataFromNativeWKMediaCaptureType( WKMediaCaptureType type); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h similarity index 92% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h index 984cfc93cc33..dd5fdf97bbcf 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v13.0.0), do not edit directly. +// Autogenerated from Pigeon (v18.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon #import @@ -601,6 +601,10 @@ extern void SetUpFWFWKWebsiteDataStoreHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKWebsiteDataStoreHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFUIViewHostApi. NSObject *FWFUIViewHostApiGetCodec(void); @@ -619,6 +623,10 @@ NSObject *FWFUIViewHostApiGetCodec(void); extern void SetUpFWFUIViewHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFUIViewHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFUIScrollViewHostApi. NSObject *FWFUIScrollViewHostApiGetCodec(void); @@ -649,6 +657,10 @@ NSObject *FWFUIScrollViewHostApiGetCodec(void); extern void SetUpFWFUIScrollViewHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFUIScrollViewHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFWKWebViewConfigurationHostApi. NSObject *FWFWKWebViewConfigurationHostApiGetCodec(void); @@ -684,6 +696,10 @@ extern void SetUpFWFWKWebViewConfigurationHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKWebViewConfigurationHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFWKWebViewConfigurationFlutterApi. NSObject *FWFWKWebViewConfigurationFlutterApiGetCodec(void); @@ -692,6 +708,8 @@ NSObject *FWFWKWebViewConfigurationFlutterApiGetCodec(void) /// See https://developer.apple.com/documentation/webkit/wkwebviewconfiguration?language=objc. @interface FWFWKWebViewConfigurationFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)createWithIdentifier:(NSInteger)identifier completion:(void (^)(FlutterError *_Nullable))completion; @end @@ -729,6 +747,10 @@ extern void SetUpFWFWKUserContentControllerHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKUserContentControllerHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFWKPreferencesHostApi. NSObject *FWFWKPreferencesHostApiGetCodec(void); @@ -747,6 +769,10 @@ NSObject *FWFWKPreferencesHostApiGetCodec(void); extern void SetUpFWFWKPreferencesHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKPreferencesHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFWKScriptMessageHandlerHostApi. NSObject *FWFWKScriptMessageHandlerHostApiGetCodec(void); @@ -761,6 +787,10 @@ extern void SetUpFWFWKScriptMessageHandlerHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKScriptMessageHandlerHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFWKScriptMessageHandlerFlutterApi. NSObject *FWFWKScriptMessageHandlerFlutterApiGetCodec(void); @@ -769,6 +799,8 @@ NSObject *FWFWKScriptMessageHandlerFlutterApiGetCodec(void) /// See https://developer.apple.com/documentation/webkit/wkscriptmessagehandler?language=objc. @interface FWFWKScriptMessageHandlerFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)didReceiveScriptMessageForHandlerWithIdentifier:(NSInteger)identifier userContentControllerIdentifier:(NSInteger)userContentControllerIdentifier message:(FWFWKScriptMessageData *)message @@ -790,6 +822,10 @@ extern void SetUpFWFWKNavigationDelegateHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKNavigationDelegateHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFWKNavigationDelegateFlutterApi. NSObject *FWFWKNavigationDelegateFlutterApiGetCodec(void); @@ -798,6 +834,8 @@ NSObject *FWFWKNavigationDelegateFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/webkit/wknavigationdelegate?language=objc. @interface FWFWKNavigationDelegateFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)didFinishNavigationForDelegateWithIdentifier:(NSInteger)identifier webViewIdentifier:(NSInteger)webViewIdentifier URL:(nullable NSString *)url @@ -873,6 +911,10 @@ NSObject *FWFNSObjectHostApiGetCodec(void); extern void SetUpFWFNSObjectHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFNSObjectHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFNSObjectFlutterApi. NSObject *FWFNSObjectFlutterApiGetCodec(void); @@ -881,6 +923,8 @@ NSObject *FWFNSObjectFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/objectivec/nsobject. @interface FWFNSObjectFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)observeValueForObjectWithIdentifier:(NSInteger)identifier keyPath:(NSString *)keyPath objectIdentifier:(NSInteger)objectIdentifier @@ -964,6 +1008,10 @@ NSObject *FWFWKWebViewHostApiGetCodec(void); extern void SetUpFWFWKWebViewHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKWebViewHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFWKUIDelegateHostApi. NSObject *FWFWKUIDelegateHostApiGetCodec(void); @@ -977,6 +1025,10 @@ NSObject *FWFWKUIDelegateHostApiGetCodec(void); extern void SetUpFWFWKUIDelegateHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKUIDelegateHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFWKUIDelegateFlutterApi. NSObject *FWFWKUIDelegateFlutterApiGetCodec(void); @@ -985,6 +1037,8 @@ NSObject *FWFWKUIDelegateFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/webkit/wkuidelegate?language=objc. @interface FWFWKUIDelegateFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)onCreateWebViewForDelegateWithIdentifier:(NSInteger)identifier webViewIdentifier:(NSInteger)webViewIdentifier configurationIdentifier:(NSInteger)configurationIdentifier @@ -1041,6 +1095,10 @@ NSObject *FWFWKHttpCookieStoreHostApiGetCodec(void); extern void SetUpFWFWKHttpCookieStoreHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFWKHttpCookieStoreHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFNSUrlHostApi. NSObject *FWFNSUrlHostApiGetCodec(void); @@ -1060,6 +1118,10 @@ NSObject *FWFNSUrlHostApiGetCodec(void); extern void SetUpFWFNSUrlHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFNSUrlHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFNSUrlFlutterApi. NSObject *FWFNSUrlFlutterApiGetCodec(void); @@ -1072,6 +1134,8 @@ NSObject *FWFNSUrlFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/foundation/nsurl?language=objc. @interface FWFNSUrlFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)createWithIdentifier:(NSInteger)identifier completion:(void (^)(FlutterError *_Nullable))completion; @end @@ -1094,6 +1158,10 @@ extern void SetUpFWFUIScrollViewDelegateHostApi( id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFUIScrollViewDelegateHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + /// The codec used by FWFUIScrollViewDelegateFlutterApi. NSObject *FWFUIScrollViewDelegateFlutterApiGetCodec(void); @@ -1102,6 +1170,8 @@ NSObject *FWFUIScrollViewDelegateFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/uikit/uiscrollviewdelegate?language=objc. @interface FWFUIScrollViewDelegateFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; - (void)scrollViewDidScrollWithIdentifier:(NSInteger)identifier UIScrollViewIdentifier:(NSInteger)uiScrollViewIdentifier x:(double)x @@ -1131,6 +1201,10 @@ NSObject *FWFNSUrlCredentialHostApiGetCodec(void); extern void SetUpFWFNSUrlCredentialHostApi(id binaryMessenger, NSObject *_Nullable api); +extern void SetUpFWFNSUrlCredentialHostApiWithSuffix( + id binaryMessenger, NSObject *_Nullable api, + NSString *messageChannelSuffix); + /// The codec used by FWFNSUrlProtectionSpaceFlutterApi. NSObject *FWFNSUrlProtectionSpaceFlutterApiGetCodec(void); @@ -1143,6 +1217,8 @@ NSObject *FWFNSUrlProtectionSpaceFlutterApiGetCodec(void); /// See https://developer.apple.com/documentation/foundation/nsurlprotectionspace?language=objc. @interface FWFNSUrlProtectionSpaceFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; /// Create a new Dart instance and add it to the `InstanceManager`. - (void)createWithIdentifier:(NSInteger)identifier host:(nullable NSString *)host @@ -1164,6 +1240,8 @@ NSObject *FWFNSUrlAuthenticationChallengeFlutterApiGetCodec /// https://developer.apple.com/documentation/foundation/nsurlauthenticationchallenge?language=objc. @interface FWFNSUrlAuthenticationChallengeFlutterApi : NSObject - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; +- (instancetype)initWithBinaryMessenger:(id)binaryMessenger + messageChannelSuffix:(nullable NSString *)messageChannelSuffix; /// Create a new Dart instance and add it to the `InstanceManager`. - (void)createWithIdentifier:(NSInteger)identifier protectionSpaceIdentifier:(NSInteger)protectionSpaceIdentifier diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h index f1994b7705b5..bb2adfb19367 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFHTTPCookieStoreHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager.h similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager.h diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager_Test.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager_Test.h similarity index 100% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager_Test.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFInstanceManager_Test.h diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h index fb4e076095d9..db1edee310e9 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFNavigationDelegateHostApi.h @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" #import "FWFObjectHostApi.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h index 08080eb5bb8c..8bdc7f6a0c00 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFObjectHostApi.h @@ -2,7 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#if TARGET_OS_OSX +#import +#else #import +#endif #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h index 136dccaec8cb..de2b6dd63d52 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFPreferencesHostApi.h @@ -2,7 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#if TARGET_OS_OSX +#import +#else #import +#endif #import #import "FWFGeneratedWebKitApis.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h index 91e6aa01392f..2e79e40edc5d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScriptMessageHandlerHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" #import "FWFObjectHostApi.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h similarity index 88% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h index ec2237c6a0dd..5608f79114cc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewDelegateHostApi.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Using directory structure to remove platform-specific files doesn't work +// well with umbrella headers and module maps, so just no-op the file for +// other platforms instead. +#if TARGET_OS_IOS + #import #import #import "FWFObjectHostApi.h" @@ -38,3 +43,5 @@ NS_ASSUME_NONNULL_BEGIN @end NS_ASSUME_NONNULL_END + +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h similarity index 89% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h index 7d87e4d561f9..5c65e129c85c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFScrollViewHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h index fd685c7b4b97..f5b52a52acf6 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIDelegateHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" #import "FWFObjectHostApi.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h similarity index 73% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h index f63119738a82..cecd2ec6d3a0 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUIViewHostApi.h @@ -2,6 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Using directory structure to remove platform-specific files doesn't work +// well with umbrella headers and module maps, so just no-op the file for +// other platforms instead. +#if TARGET_OS_IOS + #import #import "FWFGeneratedWebKitApis.h" @@ -17,3 +22,5 @@ NS_ASSUME_NONNULL_BEGIN @end NS_ASSUME_NONNULL_END + +#endif diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h similarity index 94% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h index 2a16ff486b6d..4bc572072b2e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLAuthenticationChallengeHostApi.h @@ -2,11 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" +#if TARGET_OS_OSX +#import +#else +#import +#endif + NS_ASSUME_NONNULL_BEGIN /// Flutter API implementation for `NSURLAuthenticationChallenge`. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h similarity index 92% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h index 3c119e552e09..3f731bdcc62b 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLCredentialHostApi.h @@ -2,12 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import #import "FWFDataConverters.h" #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" +#if TARGET_OS_OSX +#import +#else +#import +#endif + NS_ASSUME_NONNULL_BEGIN /// Host API implementation for `NSURLCredential`. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h index 919dcc5b3cf2..9238f89590b4 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLHostApi.h @@ -2,8 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h similarity index 94% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h index a4f7c537f1b5..f87e09c573ee 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFURLProtectionSpaceHostApi.h @@ -2,11 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" +#if TARGET_OS_OSX +#import +#else +#import +#endif + NS_ASSUME_NONNULL_BEGIN /// Flutter API implementation for `NSURLProtectionSpace`. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h index 8ca3b69b6a39..0905d3c7543a 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFUserContentControllerHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h similarity index 96% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h index c11ce1f29567..a5dd32a153b2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewConfigurationHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" #import "FWFObjectHostApi.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h similarity index 95% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h index b316f333cdde..e4e6ff3a1dea 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewFlutterWKWebViewExternalAPI.h @@ -2,10 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + NS_ASSUME_NONNULL_BEGIN /// App and package facing native API provided by the `webview_flutter_wkwebview` plugin. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h similarity index 85% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h index 037ea11f8494..2f9f28bea6c2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebViewHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" #import "FWFObjectHostApi.h" @@ -19,7 +24,12 @@ NS_ASSUME_NONNULL_BEGIN @end /// Implementation of WKWebView that can be used as a FlutterPlatformView. -@interface FWFWebView : WKWebView +@interface FWFWebView : WKWebView +// The macOS platform view API doesn't have a FlutterPlatformView abstraction, +// and uses NSView directly. +#if TARGET_OS_IOS + +#endif @property(readonly, nonnull, nonatomic) FWFObjectFlutterApiImpl *objectApi; - (instancetype)initWithFrame:(CGRect)frame diff --git a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h similarity index 90% rename from packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h rename to packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h index 256c3f9d41f6..a5969e5215bb 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h +++ b/packages/webview_flutter/webview_flutter_wkwebview/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFWebsiteDataStoreHostApi.h @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#import #import +#if TARGET_OS_OSX +#import +#else +#import +#endif + #import "FWFGeneratedWebKitApis.h" #import "FWFInstanceManager.h" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart index d2d3ea8f6b2e..8b2ef7143f32 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/legacy/webview_flutter_test.dart @@ -588,7 +588,9 @@ Future main() async { await controller.runJavascriptReturningResult('isFullScreen();'); expect(fullScreen, _webviewBool(true)); }); - }); + }, + // allowsInlineMediaPlayback has no effect on macOS. + skip: Platform.isMacOS); group('Audio playback policy', () { late String audioTestBase64; @@ -755,7 +757,10 @@ Future main() async { isPaused = await controller.runJavascriptReturningResult('isPaused();'); expect(isPaused, _webviewBool(false)); }); - }); + }, + // OGG playback is not supported on macOS, so the test data would need + // to be changed to support macOS. + skip: Platform.isMacOS); testWidgets('getTitle', (WidgetTester tester) async { const String getTitleTest = ''' @@ -882,7 +887,9 @@ Future main() async { expect(scrollPosX, X_SCROLL * 2); expect(scrollPosY, Y_SCROLL * 2); }); - }); + }, + // Scroll position is currently not implemented for macOS. + skip: Platform.isMacOS); group('NavigationDelegate', () { const String blankPage = ''; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart index 4a179696b791..b2915ea4403c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/integration_test/webview_flutter_test.dart @@ -554,7 +554,9 @@ Future main() async { final bool fullScreen = await controller .runJavaScriptReturningResult('isFullScreen();') as bool; expect(fullScreen, true); - }); + }, + // allowsInlineMediaPlayback has no effect on macOS. + skip: Platform.isMacOS); }); group('Audio playback policy', () { @@ -657,7 +659,10 @@ Future main() async { await controller.runJavaScriptReturningResult('isPaused();') as bool; expect(isPaused, true); }); - }); + }, + // OGG playback is not supported on macOS, so the test data would need + // to be changed to support macOS. + skip: Platform.isMacOS); testWidgets('getTitle', (WidgetTester tester) async { const String getTitleTest = ''' @@ -801,7 +806,9 @@ Future main() async { expect(recordedPosition?.x, X_SCROLL * 2); expect(recordedPosition?.y, Y_SCROLL * 2); }); - }); + }, + // Scroll position is currently not implemented for macOS. + skip: Platform.isMacOS); group('NavigationDelegate', () { const String blankPage = ''; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj index e73c47014f90..e1dd7698669f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -72,7 +72,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1096EF432A6BD9DB000CBDF7 /* FWFScrollViewDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScrollViewDelegateHostApiTests.m; sourceTree = ""; }; + 1096EF432A6BD9DB000CBDF7 /* FWFScrollViewDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFScrollViewDelegateHostApiTests.m; path = ../../darwin/Tests/FWFScrollViewDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 17781D9462A1AEA7C99F8E45 /* libPods-RunnerTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RunnerTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -85,26 +85,26 @@ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 8F4FF948299ADC2D000A6586 /* FWFWebViewFlutterWKWebViewExternalAPITests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FWFWebViewFlutterWKWebViewExternalAPITests.m; sourceTree = ""; }; - 8F4FF94A29AC223F000A6586 /* FWFURLTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFURLTests.m; sourceTree = ""; }; - 8F562F8F2A56C02D00C2BED6 /* FWFURLCredentialHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFURLCredentialHostApiTests.m; sourceTree = ""; }; - 8F562F912A56C04F00C2BED6 /* FWFURLProtectionSpaceHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFURLProtectionSpaceHostApiTests.m; sourceTree = ""; }; - 8F562F932A56C07B00C2BED6 /* FWFURLAuthenticationChallengeHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFURLAuthenticationChallengeHostApiTests.m; sourceTree = ""; }; - 8F78EAA92A02CB9100C2E520 /* FWFErrorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFErrorTests.m; sourceTree = ""; }; - 8FA6A87828062CD000A4B183 /* FWFInstanceManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFInstanceManagerTests.m; sourceTree = ""; }; - 8FB79B5228134C3100C101D3 /* FWFWebViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebViewHostApiTests.m; sourceTree = ""; }; - 8FB79B54281B24F600C101D3 /* FWFDataConvertersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFDataConvertersTests.m; sourceTree = ""; }; - 8FB79B662820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFHTTPCookieStoreHostApiTests.m; sourceTree = ""; }; - 8FB79B6828204E8700C101D3 /* FWFPreferencesHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFPreferencesHostApiTests.m; sourceTree = ""; }; - 8FB79B6A28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebsiteDataStoreHostApiTests.m; sourceTree = ""; }; - 8FB79B6C2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFWebViewConfigurationHostApiTests.m; sourceTree = ""; }; - 8FB79B72282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScriptMessageHandlerHostApiTests.m; sourceTree = ""; }; - 8FB79B7828209D1300C101D3 /* FWFUserContentControllerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUserContentControllerHostApiTests.m; sourceTree = ""; }; - 8FB79B822820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFNavigationDelegateHostApiTests.m; sourceTree = ""; }; - 8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIDelegateHostApiTests.m; sourceTree = ""; }; - 8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFScrollViewHostApiTests.m; sourceTree = ""; }; - 8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFUIViewHostApiTests.m; sourceTree = ""; }; - 8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FWFObjectHostApiTests.m; sourceTree = ""; }; + 8F4FF948299ADC2D000A6586 /* FWFWebViewFlutterWKWebViewExternalAPITests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewFlutterWKWebViewExternalAPITests.m; path = ../../darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.m; sourceTree = SOURCE_ROOT; }; + 8F4FF94A29AC223F000A6586 /* FWFURLTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFURLTests.m; path = ../../darwin/Tests/FWFURLTests.m; sourceTree = SOURCE_ROOT; }; + 8F562F8F2A56C02D00C2BED6 /* FWFURLCredentialHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFURLCredentialHostApiTests.m; path = ../../darwin/Tests/FWFURLCredentialHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8F562F912A56C04F00C2BED6 /* FWFURLProtectionSpaceHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFURLProtectionSpaceHostApiTests.m; path = ../../darwin/Tests/FWFURLProtectionSpaceHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8F562F932A56C07B00C2BED6 /* FWFURLAuthenticationChallengeHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFURLAuthenticationChallengeHostApiTests.m; path = ../../darwin/Tests/FWFURLAuthenticationChallengeHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8F78EAA92A02CB9100C2E520 /* FWFErrorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFErrorTests.m; path = ../../darwin/Tests/FWFErrorTests.m; sourceTree = SOURCE_ROOT; }; + 8FA6A87828062CD000A4B183 /* FWFInstanceManagerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFInstanceManagerTests.m; path = ../../darwin/Tests/FWFInstanceManagerTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B5228134C3100C101D3 /* FWFWebViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewHostApiTests.m; path = ../../darwin/Tests/FWFWebViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B54281B24F600C101D3 /* FWFDataConvertersTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFDataConvertersTests.m; path = ../../darwin/Tests/FWFDataConvertersTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B662820453400C101D3 /* FWFHTTPCookieStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFHTTPCookieStoreHostApiTests.m; path = ../../darwin/Tests/FWFHTTPCookieStoreHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B6828204E8700C101D3 /* FWFPreferencesHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFPreferencesHostApiTests.m; path = ../../darwin/Tests/FWFPreferencesHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B6A28204EE500C101D3 /* FWFWebsiteDataStoreHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFWebsiteDataStoreHostApiTests.m; path = ../../darwin/Tests/FWFWebsiteDataStoreHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B6C2820533B00C101D3 /* FWFWebViewConfigurationHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewConfigurationHostApiTests.m; path = ../../darwin/Tests/FWFWebViewConfigurationHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B72282096B500C101D3 /* FWFScriptMessageHandlerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFScriptMessageHandlerHostApiTests.m; path = ../../darwin/Tests/FWFScriptMessageHandlerHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B7828209D1300C101D3 /* FWFUserContentControllerHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFUserContentControllerHostApiTests.m; path = ../../darwin/Tests/FWFUserContentControllerHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B822820A39300C101D3 /* FWFNavigationDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFNavigationDelegateHostApiTests.m; path = ../../darwin/Tests/FWFNavigationDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B842820A3A400C101D3 /* FWFUIDelegateHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFUIDelegateHostApiTests.m; path = ../../darwin/Tests/FWFUIDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B8E2820BAB300C101D3 /* FWFScrollViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFScrollViewHostApiTests.m; path = ../../darwin/Tests/FWFScrollViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B902820BAC700C101D3 /* FWFUIViewHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFUIViewHostApiTests.m; path = ../../darwin/Tests/FWFUIViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 8FB79B962821985200C101D3 /* FWFObjectHostApiTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FWFObjectHostApiTests.m; path = ../../darwin/Tests/FWFObjectHostApiTests.m; sourceTree = SOURCE_ROOT; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -429,10 +429,12 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/path_provider_foundation/path_provider_foundation_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/webview_flutter_wkwebview/webview_flutter_wkwebview_privacy.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/path_provider_foundation_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/webview_flutter_wkwebview_privacy.bundle", ); runOnlyForDeploymentPostprocessing = 0; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index eb87ae849c45..65b8955c3c62 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + - - - - - - -

Click the following button to see the effect

-
+ alert(inputString); + } + + + + +

Click the following button to see the effect

+ - - -
- - + + + + + '''; class WebViewExample extends StatefulWidget { @@ -160,7 +160,6 @@ class _WebViewExampleState extends State { WebKitWebViewControllerCreationParams(allowsInlineMediaPlayback: true), ) ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..setBackgroundColor(const Color(0x80000000)) ..setPlatformNavigationDelegate( PlatformNavigationDelegate( const PlatformNavigationDelegateCreationParams(), @@ -220,12 +219,19 @@ Page resource error: ) ..loadRequest(LoadRequestParams( uri: Uri.parse('https://flutter.dev'), - )) - ..setOnScrollPositionChange((ScrollPositionChange scrollPositionChange) { + )); + + // setBackgroundColor and setOnScrollPositionChange are not supported on + // macOS. + if (Platform.isIOS) { + _controller.setBackgroundColor(const Color(0x80000000)); + _controller.setOnScrollPositionChange( + (ScrollPositionChange scrollPositionChange) { debugPrint( 'Scroll position change to x = ${scrollPositionChange.x}, y = ${scrollPositionChange.y}', ); }); + } } @override diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/.gitignore b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/.gitignore new file mode 100644 index 000000000000..746adbb6b9e1 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 000000000000..4b81f9b2d200 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 000000000000..5caa9d1579e4 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile new file mode 100644 index 000000000000..c795730db8ed --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.14' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000000..264cd2e6145f --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,902 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 337257E82C626C94005E6518 /* OCMock in Frameworks */ = {isa = PBXBuildFile; productRef = 337257E72C626C94005E6518 /* OCMock */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 33CF716F2C090A5900FB3AA4 /* FWFURLProtectionSpaceHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715A2C090A5800FB3AA4 /* FWFURLProtectionSpaceHostApiTests.m */; }; + 33CF71702C090A5900FB3AA4 /* FWFUIDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715B2C090A5800FB3AA4 /* FWFUIDelegateHostApiTests.m */; }; + 33CF71712C090A5900FB3AA4 /* FWFErrorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715C2C090A5800FB3AA4 /* FWFErrorTests.m */; }; + 33CF71722C090A5900FB3AA4 /* FWFUIViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715D2C090A5800FB3AA4 /* FWFUIViewHostApiTests.m */; }; + 33CF71732C090A5900FB3AA4 /* FWFDataConvertersTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715E2C090A5800FB3AA4 /* FWFDataConvertersTests.m */; }; + 33CF71742C090A5900FB3AA4 /* FWFURLCredentialHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF715F2C090A5800FB3AA4 /* FWFURLCredentialHostApiTests.m */; }; + 33CF71752C090A5900FB3AA4 /* FWFWebViewFlutterWKWebViewExternalAPITests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71602C090A5800FB3AA4 /* FWFWebViewFlutterWKWebViewExternalAPITests.m */; }; + 33CF71762C090A5900FB3AA4 /* FWFPreferencesHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71612C090A5800FB3AA4 /* FWFPreferencesHostApiTests.m */; }; + 33CF71772C090A5900FB3AA4 /* FWFWebViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71622C090A5800FB3AA4 /* FWFWebViewHostApiTests.m */; }; + 33CF71782C090A5900FB3AA4 /* FWFScrollViewHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71632C090A5800FB3AA4 /* FWFScrollViewHostApiTests.m */; }; + 33CF71792C090A5900FB3AA4 /* FWFInstanceManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71642C090A5800FB3AA4 /* FWFInstanceManagerTests.m */; }; + 33CF717A2C090A5900FB3AA4 /* FWFScrollViewDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71652C090A5800FB3AA4 /* FWFScrollViewDelegateHostApiTests.m */; }; + 33CF717B2C090A5900FB3AA4 /* FWFUserContentControllerHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71662C090A5800FB3AA4 /* FWFUserContentControllerHostApiTests.m */; }; + 33CF717C2C090A5900FB3AA4 /* FWFScriptMessageHandlerHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71672C090A5800FB3AA4 /* FWFScriptMessageHandlerHostApiTests.m */; }; + 33CF717D2C090A5900FB3AA4 /* FWFURLAuthenticationChallengeHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71682C090A5800FB3AA4 /* FWFURLAuthenticationChallengeHostApiTests.m */; }; + 33CF717E2C090A5900FB3AA4 /* FWFURLTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF71692C090A5800FB3AA4 /* FWFURLTests.m */; }; + 33CF717F2C090A5900FB3AA4 /* FWFWebViewConfigurationHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF716A2C090A5900FB3AA4 /* FWFWebViewConfigurationHostApiTests.m */; }; + 33CF71802C090A5900FB3AA4 /* FWFWebsiteDataStoreHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF716B2C090A5900FB3AA4 /* FWFWebsiteDataStoreHostApiTests.m */; }; + 33CF71812C090A5900FB3AA4 /* FWFHTTPCookieStoreHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF716C2C090A5900FB3AA4 /* FWFHTTPCookieStoreHostApiTests.m */; }; + 33CF71822C090A5900FB3AA4 /* FWFNavigationDelegateHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF716D2C090A5900FB3AA4 /* FWFNavigationDelegateHostApiTests.m */; }; + 33CF71832C090A5900FB3AA4 /* FWFObjectHostApiTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 33CF716E2C090A5900FB3AA4 /* FWFObjectHostApiTests.m */; }; + 696987BFFD9F58717569B4E4 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F0D686780FFBF662B127EB3 /* Pods_RunnerTests.framework */; }; + 94A776FC184B2E22F5BB8688 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4396B0510D22FC1052724D77 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 293218A8CB10C8BE4DB72BF6 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 2BB8CCF4A3B17FE9A00CF6B7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 2F0D686780FFBF662B127EB3 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33CF715A2C090A5800FB3AA4 /* FWFURLProtectionSpaceHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFURLProtectionSpaceHostApiTests.m; path = ../../darwin/Tests/FWFURLProtectionSpaceHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF715B2C090A5800FB3AA4 /* FWFUIDelegateHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFUIDelegateHostApiTests.m; path = ../../darwin/Tests/FWFUIDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF715C2C090A5800FB3AA4 /* FWFErrorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFErrorTests.m; path = ../../darwin/Tests/FWFErrorTests.m; sourceTree = SOURCE_ROOT; }; + 33CF715D2C090A5800FB3AA4 /* FWFUIViewHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFUIViewHostApiTests.m; path = ../../darwin/Tests/FWFUIViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF715E2C090A5800FB3AA4 /* FWFDataConvertersTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFDataConvertersTests.m; path = ../../darwin/Tests/FWFDataConvertersTests.m; sourceTree = SOURCE_ROOT; }; + 33CF715F2C090A5800FB3AA4 /* FWFURLCredentialHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFURLCredentialHostApiTests.m; path = ../../darwin/Tests/FWFURLCredentialHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71602C090A5800FB3AA4 /* FWFWebViewFlutterWKWebViewExternalAPITests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewFlutterWKWebViewExternalAPITests.m; path = ../../darwin/Tests/FWFWebViewFlutterWKWebViewExternalAPITests.m; sourceTree = SOURCE_ROOT; }; + 33CF71612C090A5800FB3AA4 /* FWFPreferencesHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFPreferencesHostApiTests.m; path = ../../darwin/Tests/FWFPreferencesHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71622C090A5800FB3AA4 /* FWFWebViewHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewHostApiTests.m; path = ../../darwin/Tests/FWFWebViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71632C090A5800FB3AA4 /* FWFScrollViewHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFScrollViewHostApiTests.m; path = ../../darwin/Tests/FWFScrollViewHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71642C090A5800FB3AA4 /* FWFInstanceManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFInstanceManagerTests.m; path = ../../darwin/Tests/FWFInstanceManagerTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71652C090A5800FB3AA4 /* FWFScrollViewDelegateHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFScrollViewDelegateHostApiTests.m; path = ../../darwin/Tests/FWFScrollViewDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71662C090A5800FB3AA4 /* FWFUserContentControllerHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFUserContentControllerHostApiTests.m; path = ../../darwin/Tests/FWFUserContentControllerHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71672C090A5800FB3AA4 /* FWFScriptMessageHandlerHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFScriptMessageHandlerHostApiTests.m; path = ../../darwin/Tests/FWFScriptMessageHandlerHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71682C090A5800FB3AA4 /* FWFURLAuthenticationChallengeHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFURLAuthenticationChallengeHostApiTests.m; path = ../../darwin/Tests/FWFURLAuthenticationChallengeHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF71692C090A5800FB3AA4 /* FWFURLTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFURLTests.m; path = ../../darwin/Tests/FWFURLTests.m; sourceTree = SOURCE_ROOT; }; + 33CF716A2C090A5900FB3AA4 /* FWFWebViewConfigurationHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFWebViewConfigurationHostApiTests.m; path = ../../darwin/Tests/FWFWebViewConfigurationHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF716B2C090A5900FB3AA4 /* FWFWebsiteDataStoreHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFWebsiteDataStoreHostApiTests.m; path = ../../darwin/Tests/FWFWebsiteDataStoreHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF716C2C090A5900FB3AA4 /* FWFHTTPCookieStoreHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFHTTPCookieStoreHostApiTests.m; path = ../../darwin/Tests/FWFHTTPCookieStoreHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF716D2C090A5900FB3AA4 /* FWFNavigationDelegateHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFNavigationDelegateHostApiTests.m; path = ../../darwin/Tests/FWFNavigationDelegateHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33CF716E2C090A5900FB3AA4 /* FWFObjectHostApiTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FWFObjectHostApiTests.m; path = ../../darwin/Tests/FWFObjectHostApiTests.m; sourceTree = SOURCE_ROOT; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 4396B0510D22FC1052724D77 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7A8789C38AC8A7893DF1757D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8E3B7819B86A3E8D5B2787F8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + B29CEB47BBE7D438B12895F3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BB0A609D94A71B55CFCFC007 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 337257E82C626C94005E6518 /* OCMock in Frameworks */, + 696987BFFD9F58717569B4E4 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 94A776FC184B2E22F5BB8688 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 33CF715E2C090A5800FB3AA4 /* FWFDataConvertersTests.m */, + 33CF715C2C090A5800FB3AA4 /* FWFErrorTests.m */, + 33CF716C2C090A5900FB3AA4 /* FWFHTTPCookieStoreHostApiTests.m */, + 33CF71642C090A5800FB3AA4 /* FWFInstanceManagerTests.m */, + 33CF716D2C090A5900FB3AA4 /* FWFNavigationDelegateHostApiTests.m */, + 33CF716E2C090A5900FB3AA4 /* FWFObjectHostApiTests.m */, + 33CF71612C090A5800FB3AA4 /* FWFPreferencesHostApiTests.m */, + 33CF71672C090A5800FB3AA4 /* FWFScriptMessageHandlerHostApiTests.m */, + 33CF71652C090A5800FB3AA4 /* FWFScrollViewDelegateHostApiTests.m */, + 33CF71632C090A5800FB3AA4 /* FWFScrollViewHostApiTests.m */, + 33CF715B2C090A5800FB3AA4 /* FWFUIDelegateHostApiTests.m */, + 33CF715D2C090A5800FB3AA4 /* FWFUIViewHostApiTests.m */, + 33CF71682C090A5800FB3AA4 /* FWFURLAuthenticationChallengeHostApiTests.m */, + 33CF715F2C090A5800FB3AA4 /* FWFURLCredentialHostApiTests.m */, + 33CF715A2C090A5800FB3AA4 /* FWFURLProtectionSpaceHostApiTests.m */, + 33CF71692C090A5800FB3AA4 /* FWFURLTests.m */, + 33CF71662C090A5800FB3AA4 /* FWFUserContentControllerHostApiTests.m */, + 33CF716B2C090A5900FB3AA4 /* FWFWebsiteDataStoreHostApiTests.m */, + 33CF716A2C090A5900FB3AA4 /* FWFWebViewConfigurationHostApiTests.m */, + 33CF71602C090A5800FB3AA4 /* FWFWebViewFlutterWKWebViewExternalAPITests.m */, + 33CF71622C090A5800FB3AA4 /* FWFWebViewHostApiTests.m */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 57E0600E4AC0FCC05F33A596 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 57E0600E4AC0FCC05F33A596 /* Pods */ = { + isa = PBXGroup; + children = ( + 7A8789C38AC8A7893DF1757D /* Pods-Runner.debug.xcconfig */, + 293218A8CB10C8BE4DB72BF6 /* Pods-Runner.release.xcconfig */, + 2BB8CCF4A3B17FE9A00CF6B7 /* Pods-Runner.profile.xcconfig */, + BB0A609D94A71B55CFCFC007 /* Pods-RunnerTests.debug.xcconfig */, + 8E3B7819B86A3E8D5B2787F8 /* Pods-RunnerTests.release.xcconfig */, + B29CEB47BBE7D438B12895F3 /* Pods-RunnerTests.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4396B0510D22FC1052724D77 /* Pods_Runner.framework */, + 2F0D686780FFBF662B127EB3 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 5B369AB3CC6C4456A15F9A02 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + packageProductDependencies = ( + 337257E72C626C94005E6518 /* OCMock */, + ); + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 52BDF375441D3D4ACF9978EC /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + AE091060DB78993007C49A9B /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + LastSwiftMigration = 1510; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + packageReferences = ( + 337257E62C626C94005E6518 /* XCRemoteSwiftPackageReference "ocmock" */, + ); + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 52BDF375441D3D4ACF9978EC /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 5B369AB3CC6C4456A15F9A02 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + AE091060DB78993007C49A9B /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CF71822C090A5900FB3AA4 /* FWFNavigationDelegateHostApiTests.m in Sources */, + 33CF71832C090A5900FB3AA4 /* FWFObjectHostApiTests.m in Sources */, + 33CF71762C090A5900FB3AA4 /* FWFPreferencesHostApiTests.m in Sources */, + 33CF717E2C090A5900FB3AA4 /* FWFURLTests.m in Sources */, + 33CF71702C090A5900FB3AA4 /* FWFUIDelegateHostApiTests.m in Sources */, + 33CF717C2C090A5900FB3AA4 /* FWFScriptMessageHandlerHostApiTests.m in Sources */, + 33CF716F2C090A5900FB3AA4 /* FWFURLProtectionSpaceHostApiTests.m in Sources */, + 33CF717A2C090A5900FB3AA4 /* FWFScrollViewDelegateHostApiTests.m in Sources */, + 33CF71782C090A5900FB3AA4 /* FWFScrollViewHostApiTests.m in Sources */, + 33CF71712C090A5900FB3AA4 /* FWFErrorTests.m in Sources */, + 33CF71812C090A5900FB3AA4 /* FWFHTTPCookieStoreHostApiTests.m in Sources */, + 33CF717F2C090A5900FB3AA4 /* FWFWebViewConfigurationHostApiTests.m in Sources */, + 33CF717B2C090A5900FB3AA4 /* FWFUserContentControllerHostApiTests.m in Sources */, + 33CF71802C090A5900FB3AA4 /* FWFWebsiteDataStoreHostApiTests.m in Sources */, + 33CF71752C090A5900FB3AA4 /* FWFWebViewFlutterWKWebViewExternalAPITests.m in Sources */, + 33CF717D2C090A5900FB3AA4 /* FWFURLAuthenticationChallengeHostApiTests.m in Sources */, + 33CF71772C090A5900FB3AA4 /* FWFWebViewHostApiTests.m in Sources */, + 33CF71742C090A5900FB3AA4 /* FWFURLCredentialHostApiTests.m in Sources */, + 33CF71732C090A5900FB3AA4 /* FWFDataConvertersTests.m in Sources */, + 33CF71792C090A5900FB3AA4 /* FWFInstanceManagerTests.m in Sources */, + 33CF71722C090A5900FB3AA4 /* FWFUIViewHostApiTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BB0A609D94A71B55CFCFC007 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8E3B7819B86A3E8D5B2787F8 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B29CEB47BBE7D438B12895F3 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 337257E62C626C94005E6518 /* XCRemoteSwiftPackageReference "ocmock" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/erikdoe/ocmock"; + requirement = { + kind = revision; + revision = fe1661a3efed11831a6452f4b1a0c5e6ddc08c3d; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 337257E72C626C94005E6518 /* OCMock */ = { + isa = XCSwiftPackageProductDependency; + package = 337257E62C626C94005E6518 /* XCRemoteSwiftPackageReference "ocmock" */; + productName = OCMock; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000000..be6977d7622f --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000000..21a3cc14c74e --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000000..18d981003d68 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/AppDelegate.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000000..689c0ecd5254 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000000..a2ec33f19f11 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 000000000000..82b6f9d9a33e Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 000000000000..13b35eba55c6 Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 000000000000..0a3f5fa40fb3 Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 000000000000..bdb57226d5f2 Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 000000000000..f083318e09ca Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 000000000000..326c0e72c9d8 Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 000000000000..2f1632cfddf3 Binary files /dev/null and b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Base.lproj/MainMenu.xib b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 000000000000..80e867a4e06b --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000000..e957f60d65b7 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter.plugins. All rights reserved. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Debug.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000000..36b0fd9464f4 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Release.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000000..dff4f49561c8 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Warnings.xcconfig b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000000..42bcbf4780b1 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/DebugProfile.entitlements b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 000000000000..08c3ab17cc26 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + com.apple.security.network.client + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Info.plist b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Info.plist new file mode 100644 index 000000000000..4789daa6a443 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/MainFlutterWindow.swift b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000000..f21908966e95 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,19 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Release.entitlements b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Release.entitlements new file mode 100644 index 000000000000..ee95ab7e582d --- /dev/null +++ b/packages/webview_flutter/webview_flutter_wkwebview/example/macos/Runner/Release.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart index 65f55dbbe3ff..bd0ac2c02945 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/common/web_kit.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v13.0.0), do not edit directly. +// Autogenerated from Pigeon (v18.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -11,6 +11,13 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + List wrapResponse( {Object? result, PlatformException? error, bool empty = false}) { if (empty) { @@ -859,54 +866,61 @@ class WKWebsiteDataStoreHostApi { /// Constructor for [WKWebsiteDataStoreHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKWebsiteDataStoreHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + WKWebsiteDataStoreHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + _WKWebsiteDataStoreHostApiCodec(); - static const MessageCodec codec = _WKWebsiteDataStoreHostApiCodec(); + final String __pigeon_messageChannelSuffix; Future createFromWebViewConfiguration( - int arg_identifier, int arg_configurationIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createFromWebViewConfiguration', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_configurationIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, int configurationIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createFromWebViewConfiguration$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, configurationIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future createDefaultDataStore(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createDefaultDataStore', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future createDefaultDataStore(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createDefaultDataStore$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -914,36 +928,38 @@ class WKWebsiteDataStoreHostApi { } Future removeDataOfTypes( - int arg_identifier, - List arg_dataTypes, - double arg_modificationTimeInSecondsSinceEpoch) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.removeDataOfTypes', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_dataTypes, - arg_modificationTimeInSecondsSinceEpoch + int identifier, + List dataTypes, + double modificationTimeInSecondsSinceEpoch) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.removeDataOfTypes$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([ + identifier, + dataTypes, + modificationTimeInSecondsSinceEpoch ]) as List?; - if (replyList == null) { + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { + } else if (__pigeon_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as bool?)!; + return (__pigeon_replyList[0] as bool?)!; } } } @@ -955,52 +971,60 @@ class UIViewHostApi { /// Constructor for [UIViewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - UIViewHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future setBackgroundColor(int arg_identifier, int? arg_value) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_value]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + UIViewHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future setBackgroundColor(int identifier, int? value) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, value]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setOpaque(int arg_identifier, bool arg_opaque) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_opaque]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setOpaque(int identifier, bool opaque) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, opaque]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1015,106 +1039,113 @@ class UIScrollViewHostApi { /// Constructor for [UIScrollViewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - UIScrollViewHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future createFromWebView( - int arg_identifier, int arg_webViewIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_webViewIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + UIScrollViewHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future createFromWebView(int identifier, int webViewIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, webViewIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future> getContentOffset(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future> getContentOffset(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - } else if (replyList[0] == null) { + } else if (__pigeon_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as List?)!.cast(); + return (__pigeon_replyList[0] as List?)!.cast(); } } - Future scrollBy(int arg_identifier, double arg_x, double arg_y) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_x, arg_y]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future scrollBy(int identifier, double x, double y) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, x, y]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setContentOffset( - int arg_identifier, double arg_x, double arg_y) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_x, arg_y]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setContentOffset(int identifier, double x, double y) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, x, y]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1122,24 +1153,25 @@ class UIScrollViewHostApi { } Future setDelegate( - int arg_identifier, int? arg_uiScrollViewDelegateIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_uiScrollViewDelegateIdentifier]) + int identifier, int? uiScrollViewDelegateIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, uiScrollViewDelegateIdentifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1177,79 +1209,84 @@ class WKWebViewConfigurationHostApi { /// Constructor for [WKWebViewConfigurationHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKWebViewConfigurationHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = + WKWebViewConfigurationHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _WKWebViewConfigurationHostApiCodec(); - Future create(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + final String __pigeon_messageChannelSuffix; + + Future create(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future createFromWebView( - int arg_identifier, int arg_webViewIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.createFromWebView', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_webViewIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future createFromWebView(int identifier, int webViewIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.createFromWebView$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, webViewIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setAllowsInlineMediaPlayback( - int arg_identifier, bool arg_allow) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_allow]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setAllowsInlineMediaPlayback(int identifier, bool allow) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, allow]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1257,47 +1294,49 @@ class WKWebViewConfigurationHostApi { } Future setLimitsNavigationsToAppBoundDomains( - int arg_identifier, bool arg_limit) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_limit]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, bool limit) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, limit]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setMediaTypesRequiringUserActionForPlayback(int arg_identifier, - List arg_types) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_types]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setMediaTypesRequiringUserActionForPlayback( + int identifier, List types) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, types]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1309,21 +1348,28 @@ class WKWebViewConfigurationHostApi { /// /// See https://developer.apple.com/documentation/webkit/wkwebviewconfiguration?language=objc. abstract class WKWebViewConfigurationFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(WKWebViewConfigurationFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + WKWebViewConfigurationFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationFlutterApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationFlutterApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationFlutterApi.create was null.'); final List args = (message as List?)!; @@ -1380,32 +1426,37 @@ class WKUserContentControllerHostApi { /// Constructor for [WKUserContentControllerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKUserContentControllerHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = + WKUserContentControllerHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _WKUserContentControllerHostApiCodec(); + final String __pigeon_messageChannelSuffix; + Future createFromWebViewConfiguration( - int arg_identifier, int arg_configurationIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.createFromWebViewConfiguration', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_configurationIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, int configurationIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.createFromWebViewConfiguration$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, configurationIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1413,71 +1464,72 @@ class WKUserContentControllerHostApi { } Future addScriptMessageHandler( - int arg_identifier, int arg_handlerIdentifier, String arg_name) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addScriptMessageHandler', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_handlerIdentifier, arg_name]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, int handlerIdentifier, String name) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addScriptMessageHandler$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, handlerIdentifier, name]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future removeScriptMessageHandler( - int arg_identifier, String arg_name) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeScriptMessageHandler', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_name]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future removeScriptMessageHandler(int identifier, String name) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeScriptMessageHandler$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, name]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future removeAllScriptMessageHandlers(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllScriptMessageHandlers', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future removeAllScriptMessageHandlers(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllScriptMessageHandlers$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1485,46 +1537,48 @@ class WKUserContentControllerHostApi { } Future addUserScript( - int arg_identifier, WKUserScriptData arg_userScript) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addUserScript', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_userScript]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, WKUserScriptData userScript) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addUserScript$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, userScript]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future removeAllUserScripts(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllUserScripts', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future removeAllUserScripts(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllUserScripts$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1539,55 +1593,61 @@ class WKPreferencesHostApi { /// Constructor for [WKPreferencesHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKPreferencesHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + WKPreferencesHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); - static const MessageCodec codec = StandardMessageCodec(); + final String __pigeon_messageChannelSuffix; Future createFromWebViewConfiguration( - int arg_identifier, int arg_configurationIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.createFromWebViewConfiguration', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_configurationIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, int configurationIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.createFromWebViewConfiguration$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, configurationIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setJavaScriptEnabled( - int arg_identifier, bool arg_enabled) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.setJavaScriptEnabled', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_enabled]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setJavaScriptEnabled(int identifier, bool enabled) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.setJavaScriptEnabled$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, enabled]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1602,29 +1662,36 @@ class WKScriptMessageHandlerHostApi { /// Constructor for [WKScriptMessageHandlerHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKScriptMessageHandlerHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future create(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + WKScriptMessageHandlerHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future create(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1659,23 +1726,29 @@ class _WKScriptMessageHandlerFlutterApiCodec extends StandardMessageCodec { /// /// See https://developer.apple.com/documentation/webkit/wkscriptmessagehandler?language=objc. abstract class WKScriptMessageHandlerFlutterApi { - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _WKScriptMessageHandlerFlutterApiCodec(); void didReceiveScriptMessage(int identifier, int userContentControllerIdentifier, WKScriptMessageData message); - static void setup(WKScriptMessageHandlerFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + WKScriptMessageHandlerFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerFlutterApi.didReceiveScriptMessage', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerFlutterApi.didReceiveScriptMessage$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerFlutterApi.didReceiveScriptMessage was null.'); final List args = (message as List?)!; @@ -1712,29 +1785,36 @@ class WKNavigationDelegateHostApi { /// Constructor for [WKNavigationDelegateHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKNavigationDelegateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future create(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + WKNavigationDelegateHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future create(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -1804,7 +1884,7 @@ class _WKNavigationDelegateFlutterApiCodec extends StandardMessageCodec { /// /// See https://developer.apple.com/documentation/webkit/wknavigationdelegate?language=objc. abstract class WKNavigationDelegateFlutterApi { - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _WKNavigationDelegateFlutterApiCodec(); void didFinishNavigation(int identifier, int webViewIdentifier, String? url); @@ -1834,17 +1914,23 @@ abstract class WKNavigationDelegateFlutterApi { Future didReceiveAuthenticationChallenge( int identifier, int webViewIdentifier, int challengeIdentifier); - static void setup(WKNavigationDelegateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + WKNavigationDelegateFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFinishNavigation', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFinishNavigation$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFinishNavigation was null.'); final List args = (message as List?)!; @@ -1869,14 +1955,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didStartProvisionalNavigation', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didStartProvisionalNavigation$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didStartProvisionalNavigation was null.'); final List args = (message as List?)!; @@ -1901,14 +1988,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationAction', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationAction$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationAction was null.'); final List args = (message as List?)!; @@ -1937,14 +2025,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationResponse', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationResponse$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.decidePolicyForNavigationResponse was null.'); final List args = (message as List?)!; @@ -1973,14 +2062,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailNavigation', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailNavigation$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailNavigation was null.'); final List args = (message as List?)!; @@ -2007,14 +2097,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailProvisionalNavigation', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailProvisionalNavigation$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didFailProvisionalNavigation was null.'); final List args = (message as List?)!; @@ -2041,14 +2132,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.webViewWebContentProcessDidTerminate', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.webViewWebContentProcessDidTerminate$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.webViewWebContentProcessDidTerminate was null.'); final List args = (message as List?)!; @@ -2072,14 +2164,15 @@ abstract class WKNavigationDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didReceiveAuthenticationChallenge', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didReceiveAuthenticationChallenge$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateFlutterApi.didReceiveAuthenticationChallenge was null.'); final List args = (message as List?)!; @@ -2139,85 +2232,88 @@ class NSObjectHostApi { /// Constructor for [NSObjectHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - NSObjectHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = _NSObjectHostApiCodec(); - - Future dispose(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + NSObjectHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + _NSObjectHostApiCodec(); + + final String __pigeon_messageChannelSuffix; + + Future dispose(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future addObserver( - int arg_identifier, - int arg_observerIdentifier, - String arg_keyPath, - List arg_options) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_observerIdentifier, - arg_keyPath, - arg_options - ]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future addObserver(int identifier, int observerIdentifier, + String keyPath, List options) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, observerIdentifier, keyPath, options]) + as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future removeObserver(int arg_identifier, int arg_observerIdentifier, - String arg_keyPath) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send( - [arg_identifier, arg_observerIdentifier, arg_keyPath]) + Future removeObserver( + int identifier, int observerIdentifier, String keyPath) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, observerIdentifier, keyPath]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -2257,7 +2353,8 @@ class _NSObjectFlutterApiCodec extends StandardMessageCodec { /// /// See https://developer.apple.com/documentation/objectivec/nsobject. abstract class NSObjectFlutterApi { - static const MessageCodec codec = _NSObjectFlutterApiCodec(); + static const MessageCodec pigeonChannelCodec = + _NSObjectFlutterApiCodec(); void observeValue( int identifier, @@ -2268,17 +2365,23 @@ abstract class NSObjectFlutterApi { void dispose(int identifier); - static void setup(NSObjectFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + NSObjectFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.observeValue', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.observeValue$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.observeValue was null.'); final List args = (message as List?)!; @@ -2313,14 +2416,15 @@ abstract class NSObjectFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.dispose', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.dispose$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectFlutterApi.dispose was null.'); final List args = (message as List?)!; @@ -2472,56 +2576,60 @@ class WKWebViewHostApi { /// Constructor for [WKWebViewHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKWebViewHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = _WKWebViewHostApiCodec(); - - Future create( - int arg_identifier, int arg_configurationIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_configurationIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + WKWebViewHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + _WKWebViewHostApiCodec(); + + final String __pigeon_messageChannelSuffix; + + Future create(int identifier, int configurationIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, configurationIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setUIDelegate( - int arg_identifier, int? arg_uiDelegateIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_uiDelegateIdentifier]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setUIDelegate(int identifier, int? uiDelegateIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, uiDelegateIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -2529,99 +2637,102 @@ class WKWebViewHostApi { } Future setNavigationDelegate( - int arg_identifier, int? arg_navigationDelegateIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setNavigationDelegate', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_navigationDelegateIdentifier]) + int identifier, int? navigationDelegateIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setNavigationDelegate$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, navigationDelegateIdentifier]) as List?; - if (replyList == null) { + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future getUrl(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future getUrl(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { - return (replyList[0] as String?); + return (__pigeon_replyList[0] as String?); } } - Future getEstimatedProgress(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future getEstimatedProgress(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - } else if (replyList[0] == null) { + } else if (__pigeon_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as double?)!; + return (__pigeon_replyList[0] as double?)!; } } - Future loadRequest( - int arg_identifier, NSUrlRequestData arg_request) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_request]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future loadRequest(int identifier, NSUrlRequestData request) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, request]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -2629,24 +2740,24 @@ class WKWebViewHostApi { } Future loadHtmlString( - int arg_identifier, String arg_string, String? arg_baseUrl) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_string, arg_baseUrl]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, String string, String? baseUrl) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, string, baseUrl]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -2654,243 +2765,251 @@ class WKWebViewHostApi { } Future loadFileUrl( - int arg_identifier, String arg_url, String arg_readAccessUrl) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_url, arg_readAccessUrl]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, String url, String readAccessUrl) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, url, readAccessUrl]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future loadFlutterAsset(int arg_identifier, String arg_key) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_key]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future loadFlutterAsset(int identifier, String key) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, key]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future canGoBack(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future canGoBack(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - } else if (replyList[0] == null) { + } else if (__pigeon_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as bool?)!; + return (__pigeon_replyList[0] as bool?)!; } } - Future canGoForward(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future canGoForward(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - } else if (replyList[0] == null) { + } else if (__pigeon_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as bool?)!; + return (__pigeon_replyList[0] as bool?)!; } } - Future goBack(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future goBack(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future goForward(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future goForward(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future reload(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future reload(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future getTitle(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future getTitle(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { - return (replyList[0] as String?); + return (__pigeon_replyList[0] as String?); } } Future setAllowsBackForwardNavigationGestures( - int arg_identifier, bool arg_allow) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setAllowsBackForwardNavigationGestures', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_allow]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, bool allow) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setAllowsBackForwardNavigationGestures$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, allow]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setCustomUserAgent( - int arg_identifier, String? arg_userAgent) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_userAgent]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setCustomUserAgent(int identifier, String? userAgent) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, userAgent]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -2898,73 +3017,75 @@ class WKWebViewHostApi { } Future evaluateJavaScript( - int arg_identifier, String arg_javaScriptString) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier, arg_javaScriptString]) - as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + int identifier, String javaScriptString) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, javaScriptString]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { - return replyList[0]; + return __pigeon_replyList[0]; } } - Future setInspectable(int arg_identifier, bool arg_inspectable) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_inspectable]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setInspectable(int identifier, bool inspectable) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, inspectable]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future getCustomUserAgent(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future getCustomUserAgent(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { - return (replyList[0] as String?); + return (__pigeon_replyList[0] as String?); } } } @@ -2976,29 +3097,36 @@ class WKUIDelegateHostApi { /// Constructor for [WKUIDelegateHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKUIDelegateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future create(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + WKUIDelegateHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future create(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -3058,7 +3186,8 @@ class _WKUIDelegateFlutterApiCodec extends StandardMessageCodec { /// /// See https://developer.apple.com/documentation/webkit/wkuidelegate?language=objc. abstract class WKUIDelegateFlutterApi { - static const MessageCodec codec = _WKUIDelegateFlutterApiCodec(); + static const MessageCodec pigeonChannelCodec = + _WKUIDelegateFlutterApiCodec(); void onCreateWebView(int identifier, int webViewIdentifier, int configurationIdentifier, WKNavigationActionData navigationAction); @@ -3083,17 +3212,23 @@ abstract class WKUIDelegateFlutterApi { Future runJavaScriptTextInputPanel( int identifier, String prompt, String defaultText, WKFrameInfoData frame); - static void setup(WKUIDelegateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + WKUIDelegateFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.onCreateWebView', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.onCreateWebView$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.onCreateWebView was null.'); final List args = (message as List?)!; @@ -3124,14 +3259,15 @@ abstract class WKUIDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.requestMediaCapturePermission', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.requestMediaCapturePermission$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.requestMediaCapturePermission was null.'); final List args = (message as List?)!; @@ -3167,14 +3303,15 @@ abstract class WKUIDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptAlertPanel', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptAlertPanel$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptAlertPanel was null.'); final List args = (message as List?)!; @@ -3201,14 +3338,15 @@ abstract class WKUIDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptConfirmPanel', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptConfirmPanel$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptConfirmPanel was null.'); final List args = (message as List?)!; @@ -3235,14 +3373,15 @@ abstract class WKUIDelegateFlutterApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptTextInputPanel', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptTextInputPanel$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateFlutterApi.runJavaScriptTextInputPanel was null.'); final List args = (message as List?)!; @@ -3309,55 +3448,62 @@ class WKHttpCookieStoreHostApi { /// Constructor for [WKHttpCookieStoreHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - WKHttpCookieStoreHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + WKHttpCookieStoreHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; - static const MessageCodec codec = _WKHttpCookieStoreHostApiCodec(); + static const MessageCodec pigeonChannelCodec = + _WKHttpCookieStoreHostApiCodec(); + + final String __pigeon_messageChannelSuffix; Future createFromWebsiteDataStore( - int arg_identifier, int arg_websiteDataStoreIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.createFromWebsiteDataStore', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_websiteDataStoreIdentifier]) + int identifier, int websiteDataStoreIdentifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.createFromWebsiteDataStore$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, websiteDataStoreIdentifier]) as List?; - if (replyList == null) { + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; } } - Future setCookie( - int arg_identifier, NSHttpCookieData arg_cookie) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_identifier, arg_cookie]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future setCookie(int identifier, NSHttpCookieData cookie) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, cookie]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -3376,32 +3522,39 @@ class NSUrlHostApi { /// Constructor for [NSUrlHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - NSUrlHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future getAbsoluteString(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + NSUrlHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future getAbsoluteString(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { - return (replyList[0] as String?); + return (__pigeon_replyList[0] as String?); } } } @@ -3414,20 +3567,28 @@ class NSUrlHostApi { /// /// See https://developer.apple.com/documentation/foundation/nsurl?language=objc. abstract class NSUrlFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(NSUrlFlutterApi? api, {BinaryMessenger? binaryMessenger}) { + static void setUp( + NSUrlFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlFlutterApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlFlutterApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlFlutterApi.create was null.'); final List args = (message as List?)!; @@ -3460,29 +3621,36 @@ class UIScrollViewDelegateHostApi { /// Constructor for [UIScrollViewDelegateHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - UIScrollViewDelegateHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; - - static const MessageCodec codec = StandardMessageCodec(); - - Future create(int arg_identifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_identifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + UIScrollViewDelegateHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + final String __pigeon_messageChannelSuffix; + + Future create(int identifier) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -3494,22 +3662,29 @@ class UIScrollViewDelegateHostApi { /// /// See https://developer.apple.com/documentation/uikit/uiscrollviewdelegate?language=objc. abstract class UIScrollViewDelegateFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void scrollViewDidScroll( int identifier, int uiScrollViewIdentifier, double x, double y); - static void setup(UIScrollViewDelegateFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + UIScrollViewDelegateFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateFlutterApi.scrollViewDidScroll', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateFlutterApi.scrollViewDidScroll$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateFlutterApi.scrollViewDidScroll was null.'); final List args = (message as List?)!; @@ -3552,35 +3727,39 @@ class NSUrlCredentialHostApi { /// Constructor for [NSUrlCredentialHostApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - NSUrlCredentialHostApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + NSUrlCredentialHostApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : __pigeon_binaryMessenger = binaryMessenger, + __pigeon_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? __pigeon_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); - static const MessageCodec codec = StandardMessageCodec(); + final String __pigeon_messageChannelSuffix; /// Create a new native instance and add it to the `InstanceManager`. - Future createWithUser(int arg_identifier, String arg_user, - String arg_password, NSUrlCredentialPersistence arg_persistence) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send([ - arg_identifier, - arg_user, - arg_password, - arg_persistence.index - ]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future createWithUser(int identifier, String user, String password, + NSUrlCredentialPersistence persistence) async { + final String __pigeon_channelName = + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser$__pigeon_messageChannelSuffix'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([identifier, user, password, persistence.index]) + as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -3596,23 +3775,30 @@ class NSUrlCredentialHostApi { /// /// See https://developer.apple.com/documentation/foundation/nsurlprotectionspace?language=objc. abstract class NSUrlProtectionSpaceFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, String? host, String? realm, String? authenticationMethod); - static void setup(NSUrlProtectionSpaceFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + NSUrlProtectionSpaceFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlProtectionSpaceFlutterApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlProtectionSpaceFlutterApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlProtectionSpaceFlutterApi.create was null.'); final List args = (message as List?)!; @@ -3646,22 +3832,29 @@ abstract class NSUrlProtectionSpaceFlutterApi { /// /// See https://developer.apple.com/documentation/foundation/nsurlauthenticationchallenge?language=objc. abstract class NSUrlAuthenticationChallengeFlutterApi { - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); /// Create a new Dart instance and add it to the `InstanceManager`. void create(int identifier, int protectionSpaceIdentifier); - static void setup(NSUrlAuthenticationChallengeFlutterApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + NSUrlAuthenticationChallengeFlutterApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlAuthenticationChallengeFlutterApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlAuthenticationChallengeFlutterApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { - channel.setMessageHandler(null); + __pigeon_channel.setMessageHandler(null); } else { - channel.setMessageHandler((Object? message) async { + __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlAuthenticationChallengeFlutterApi.create was null.'); final List args = (message as List?)!; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation_api_impls.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation_api_impls.dart index fd8dc58a6ccd..293ce29bbbec 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation_api_impls.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation_api_impls.dart @@ -100,16 +100,16 @@ class FoundationFlutterApis { /// Ensures all the Flutter APIs have been set up to receive calls from native code. void ensureSetUp() { if (!_hasBeenSetUp) { - NSObjectFlutterApi.setup( + NSObjectFlutterApi.setUp( object, binaryMessenger: _binaryMessenger, ); - NSUrlFlutterApi.setup(url, binaryMessenger: _binaryMessenger); - NSUrlProtectionSpaceFlutterApi.setup( + NSUrlFlutterApi.setUp(url, binaryMessenger: _binaryMessenger); + NSUrlProtectionSpaceFlutterApi.setUp( urlProtectionSpace, binaryMessenger: _binaryMessenger, ); - NSUrlAuthenticationChallengeFlutterApi.setup( + NSUrlAuthenticationChallengeFlutterApi.setUp( urlAuthenticationChallenge, binaryMessenger: _binaryMessenger, ); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart index 6c984ec50bc8..7a3795096dec 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/legacy/web_kit_webview_widget.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'dart:async'; +import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; @@ -229,9 +230,16 @@ class WebKitWebViewPlatformController extends WebViewPlatformController { } if (params.backgroundColor != null) { - unawaited(webView.setOpaque(false)); - unawaited(webView.setBackgroundColor(Colors.transparent)); - unawaited(webView.scrollView.setBackgroundColor(params.backgroundColor)); + final WKWebView webView = this.webView; + if (webView is WKWebViewIOS) { + unawaited(webView.setOpaque(false)); + unawaited(webView.setBackgroundColor(Colors.transparent)); + unawaited( + webView.scrollView.setBackgroundColor(params.backgroundColor)); + } else { + // TODO(stuartmorgan): Investigate doing this via JS instead. + throw UnimplementedError('Background color is yet supported on macOS'); + } } if (params.initialUrl != null) { @@ -377,31 +385,51 @@ class WebKitWebViewPlatformController extends WebViewPlatformController { Future currentUrl() => webView.getUrl(); @override - Future scrollTo(int x, int y) { - return webView.scrollView.setContentOffset(Point( - x.toDouble(), - y.toDouble(), - )); + Future scrollTo(int x, int y) async { + final WKWebView webView = this.webView; + if (webView is WKWebViewIOS) { + return webView.scrollView.setContentOffset(Point( + x.toDouble(), + y.toDouble(), + )); + } else { + throw UnimplementedError('scrollTo is not supported on macOS'); + } } @override Future scrollBy(int x, int y) async { - await webView.scrollView.scrollBy(Point( - x.toDouble(), - y.toDouble(), - )); + final WKWebView webView = this.webView; + if (webView is WKWebViewIOS) { + await webView.scrollView.scrollBy(Point( + x.toDouble(), + y.toDouble(), + )); + } else { + throw UnimplementedError('scrollBy is not supported on macOS'); + } } @override Future getScrollX() async { - final Point offset = await webView.scrollView.getContentOffset(); - return offset.x.toInt(); + final WKWebView webView = this.webView; + if (webView is WKWebViewIOS) { + final Point offset = await webView.scrollView.getContentOffset(); + return offset.x.toInt(); + } else { + throw UnimplementedError('getScrollX is not supported on macOS'); + } } @override Future getScrollY() async { - final Point offset = await webView.scrollView.getContentOffset(); - return offset.y.toInt(); + final WKWebView webView = this.webView; + if (webView is WKWebViewIOS) { + final Point offset = await webView.scrollView.getContentOffset(); + return offset.y.toInt(); + } else { + throw UnimplementedError('getScrollY is not supported on macOS'); + } } @override @@ -640,7 +668,11 @@ class WebKitWebViewPlatformController extends WebViewPlatformController { @visibleForTesting class WebViewWidgetProxy { /// Constructs a [WebViewWidgetProxy]. - const WebViewWidgetProxy(); + const WebViewWidgetProxy({@visibleForTesting this.overriddenIsMacOS}); + + /// If set, replaces [Platform] checks when picking implementation classes. + @visibleForTesting + final bool? overriddenIsMacOS; /// Constructs a [WKWebView]. WKWebView createWebView( @@ -651,7 +683,11 @@ class WebViewWidgetProxy { Map change, )? observeValue, }) { - return WKWebView(configuration, observeValue: observeValue); + if (overriddenIsMacOS ?? Platform.isMacOS) { + return WKWebViewMacOS(configuration, observeValue: observeValue); + } else { + return WKWebViewIOS(configuration, observeValue: observeValue); + } } /// Constructs a [WKScriptMessageHandler]. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit.dart index b3f5ebe79f6e..fe5a0a3343b1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/ui_kit/ui_kit.dart @@ -18,7 +18,7 @@ import 'ui_kit_api_impls.dart'; /// /// Wraps [UIScrollView](https://developer.apple.com/documentation/uikit/uiscrollview?language=objc). @immutable -class UIScrollView extends UIView { +class UIScrollView extends UIViewBase { /// Constructs a [UIScrollView] that is owned by [webView]. factory UIScrollView.fromWebView( WKWebView webView, { @@ -94,17 +94,36 @@ class UIScrollView extends UIView { } } +/// Methods that anything implementing a class that inherits from UIView on the +/// native side must implement. +/// +/// Classes without a multiple inheritence problem should extend UIViewBase +/// instead of implementing this directly. +abstract class UIView implements NSObject { + /// The view’s background color. + /// + /// The default value is null, which results in a transparent background color. + /// + /// Sets [UIView.backgroundColor](https://developer.apple.com/documentation/uikit/uiview/1622591-backgroundcolor?language=objc). + Future setBackgroundColor(Color? color); + + /// Determines whether the view is opaque. + /// + /// Sets [UIView.opaque](https://developer.apple.com/documentation/uikit/uiview?language=objc). + Future setOpaque(bool opaque); +} + /// Manages the content for a rectangular area on the screen. /// /// Wraps [UIView](https://developer.apple.com/documentation/uikit/uiview?language=objc). @immutable -class UIView extends NSObject { +class UIViewBase extends NSObject implements UIView { /// Constructs a [UIView] without creating the associated /// Objective-C object. /// /// This should only be used by subclasses created by this library or to /// create copies. - UIView.detached({ + UIViewBase.detached({ super.observeValue, super.binaryMessenger, super.instanceManager, @@ -116,25 +135,19 @@ class UIView extends NSObject { final UIViewHostApiImpl _viewApi; - /// The view’s background color. - /// - /// The default value is null, which results in a transparent background color. - /// - /// Sets [UIView.backgroundColor](https://developer.apple.com/documentation/uikit/uiview/1622591-backgroundcolor?language=objc). + @override Future setBackgroundColor(Color? color) { return _viewApi.setBackgroundColorForInstances(this, color); } - /// Determines whether the view is opaque. - /// - /// Sets [UIView.opaque](https://developer.apple.com/documentation/uikit/uiview?language=objc). + @override Future setOpaque(bool opaque) { return _viewApi.setOpaqueForInstances(this, opaque); } @override UIView copy() { - return UIView.detached( + return UIViewBase.detached( observeValue: observeValue, binaryMessenger: _viewApi.binaryMessenger, instanceManager: _viewApi.instanceManager, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit.dart index 11065ad0805f..d5dcf0fff309 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit.dart @@ -8,6 +8,7 @@ import 'package:flutter/services.dart'; import '../common/instance_manager.dart'; import '../foundation/foundation.dart'; import '../ui_kit/ui_kit.dart'; +import '../ui_kit/ui_kit_api_impls.dart' show UIViewHostApiImpl; import 'web_kit_api_impls.dart'; export 'web_kit_api_impls.dart' @@ -1009,8 +1010,12 @@ class WKNavigationDelegate extends NSObject { /// Object that displays interactive web content, such as for an in-app browser. /// /// Wraps [WKWebView](https://developer.apple.com/documentation/webkit/wkwebview?language=objc). +/// +/// This is abstract, since iOS and macOS WKWebViews have different +/// implementation details; the concrete implementations are [WKWebViewIOS] and +/// [WKWebViewMacOS]. @immutable -class WKWebView extends UIView { +abstract class WKWebView extends NSObject { /// Constructs a [WKWebView]. /// /// [configuration] contains the configuration details for the web view. This @@ -1068,13 +1073,6 @@ class WKWebView extends UIView { instanceManager: _webViewApi.instanceManager, ); - /// The scrollable view associated with the web view. - late final UIScrollView scrollView = UIScrollView.fromWebView( - this, - binaryMessenger: _webViewApi.binaryMessenger, - instanceManager: _webViewApi.instanceManager, - ); - /// Used to integrate custom user interface elements into web view interactions. /// /// Sets [WKWebView.UIDelegate](https://developer.apple.com/documentation/webkit/wkwebview/1415009-uidelegate?language=objc). @@ -1163,6 +1161,13 @@ class WKWebView extends UIView { return _webViewApi.getTitleForInstances(this); } + /// The custom user agent string. + /// + /// Represents [WKWebView.customUserAgent](https://developer.apple.com/documentation/webkit/wkwebview/1414950-customuseragent?language=objc). + Future getCustomUserAgent() { + return _webViewApi.getCustomUserAgentForInstances(this); + } + /// Indicates whether horizontal swipe gestures trigger page navigation. /// /// The default value is false. @@ -1212,17 +1217,89 @@ class WKWebView extends UIView { inspectable, ); } +} - /// The custom user agent string. - /// - /// Represents [WKWebView.customUserAgent](https://developer.apple.com/documentation/webkit/wkwebview/1414950-customuseragent?language=objc). - Future getCustomUserAgent() { - return _webViewApi.getCustomUserAgentForInstances(this); +/// The iOS version of a WKWebView. +class WKWebViewIOS extends WKWebView implements UIView { + /// Constructs a new iOS WKWebView; see [WKWebView] for details. + WKWebViewIOS( + super.configuration, { + super.observeValue, + super.binaryMessenger, + super.instanceManager, + }) : _viewApi = UIViewHostApiImpl( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + super(); + + /// See [WKWebView.detached]. + WKWebViewIOS.detached({ + super.observeValue, + super.binaryMessenger, + super.instanceManager, + }) : _viewApi = UIViewHostApiImpl( + binaryMessenger: binaryMessenger, + instanceManager: instanceManager, + ), + super.detached(); + + /// The scrollable view associated with the web view. + late final UIScrollView scrollView = UIScrollView.fromWebView( + this, + binaryMessenger: _webViewApi.binaryMessenger, + instanceManager: _webViewApi.instanceManager, + ); + + @override + WKWebView copy() { + return WKWebViewIOS.detached( + observeValue: observeValue, + binaryMessenger: _webViewApi.binaryMessenger, + instanceManager: _webViewApi.instanceManager, + ); } + final UIViewHostApiImpl _viewApi; + + // UIView implementations. This is duplicated from the UIViewBase class since + // WKWebView can't inherit from UIView, so this is a workaround to multiple + // inheritance limitations. This is a way of dealing with the lack of + // preprocessor in Dart, which is how the native side has different base + // classes. If the amount of code here grows, this could become a mixin used + // by both UIViewBase and this class (at the cost of exposing the view API + // object, or adjusting files to allow it to stay private). + @override + Future setBackgroundColor(Color? color) { + return _viewApi.setBackgroundColorForInstances(this, color); + } + + @override + Future setOpaque(bool opaque) { + return _viewApi.setOpaqueForInstances(this, opaque); + } +} + +/// The macOS version of a WKWebView. +class WKWebViewMacOS extends WKWebView { + /// Constructs a new macOS WKWebView; see [WKWebView] for details. + WKWebViewMacOS( + super.configuration, { + super.observeValue, + super.binaryMessenger, + super.instanceManager, + }) : super(); + + /// See [WKWebView.detached]. + WKWebViewMacOS.detached({ + super.observeValue, + super.binaryMessenger, + super.instanceManager, + }) : super.detached(); + @override WKWebView copy() { - return WKWebView.detached( + return WKWebViewMacOS.detached( observeValue: observeValue, binaryMessenger: _webViewApi.binaryMessenger, instanceManager: _webViewApi.instanceManager, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit_api_impls.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit_api_impls.dart index bdcc19eafd6b..1caa1ccc5b09 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit_api_impls.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/web_kit/web_kit_api_impls.dart @@ -301,23 +301,23 @@ class WebKitFlutterApis { /// Ensures all the Flutter APIs have been set up to receive calls from native code. void ensureSetUp() { if (!_hasBeenSetUp) { - WKNavigationDelegateFlutterApi.setup( + WKNavigationDelegateFlutterApi.setUp( navigationDelegate, binaryMessenger: _binaryMessenger, ); - WKScriptMessageHandlerFlutterApi.setup( + WKScriptMessageHandlerFlutterApi.setUp( scriptMessageHandler, binaryMessenger: _binaryMessenger, ); - WKUIDelegateFlutterApi.setup( + WKUIDelegateFlutterApi.setUp( uiDelegate, binaryMessenger: _binaryMessenger, ); - WKWebViewConfigurationFlutterApi.setup( + WKWebViewConfigurationFlutterApi.setUp( webViewConfiguration, binaryMessenger: _binaryMessenger, ); - UIScrollViewDelegateFlutterApi.setup(uiScrollViewDelegate, + UIScrollViewDelegateFlutterApi.setUp(uiScrollViewDelegate, binaryMessenger: _binaryMessenger); _hasBeenSetUp = true; } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart index ffd9b845eab6..82277babadee 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_proxy.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'common/instance_manager.dart'; import 'foundation/foundation.dart'; import 'ui_kit/ui_kit.dart'; @@ -12,6 +14,24 @@ import 'web_kit/web_kit.dart'; WKWebsiteDataStore _defaultWebsiteDataStore() => WKWebsiteDataStore.defaultDataStore; +// This convenience method was added because Dart doesn't support constant +// function literals: https://github.com/dart-lang/language/issues/1048. +WKWebView _platformWebViewConstructor( + WKWebViewConfiguration configuration, { + void Function( + String keyPath, + NSObject object, + Map change, + )? observeValue, + InstanceManager? instanceManager, +}) { + return Platform.isIOS + ? WKWebViewIOS(configuration, + observeValue: observeValue, instanceManager: instanceManager) + : WKWebViewMacOS(configuration, + observeValue: observeValue, instanceManager: instanceManager); +} + /// Handles constructing objects and calling static methods for the WebKit /// native library. /// @@ -24,7 +44,7 @@ WKWebsiteDataStore _defaultWebsiteDataStore() => class WebKitProxy { /// Constructs a [WebKitProxy]. const WebKitProxy({ - this.createWebView = WKWebView.new, + this.createWebView = _platformWebViewConstructor, this.createWebViewConfiguration = WKWebViewConfiguration.new, this.createScriptMessageHandler = WKScriptMessageHandler.new, this.defaultWebsiteDataStore = _defaultWebsiteDataStore, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index c152f3262599..b62c457fd907 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; @@ -490,24 +491,42 @@ class WebKitWebViewController extends PlatformWebViewController { @override Future scrollTo(int x, int y) { - return _webView.scrollView.setContentOffset(Point( - x.toDouble(), - y.toDouble(), - )); + final WKWebView webView = _webView; + if (webView is WKWebViewIOS) { + return webView.scrollView.setContentOffset(Point( + x.toDouble(), + y.toDouble(), + )); + } else { + // TODO(stuartmorgan): Investigate doing this via JS instead. + throw UnimplementedError('scrollTo is not implemented on macOS'); + } } @override Future scrollBy(int x, int y) { - return _webView.scrollView.scrollBy(Point( - x.toDouble(), - y.toDouble(), - )); + final WKWebView webView = _webView; + if (webView is WKWebViewIOS) { + return webView.scrollView.scrollBy(Point( + x.toDouble(), + y.toDouble(), + )); + } else { + // TODO(stuartmorgan): Investigate doing this via JS instead. + throw UnimplementedError('scrollBy is not implemented on macOS'); + } } @override Future getScrollPosition() async { - final Point offset = await _webView.scrollView.getContentOffset(); - return Offset(offset.x, offset.y); + final WKWebView webView = _webView; + if (webView is WKWebViewIOS) { + final Point offset = await webView.scrollView.getContentOffset(); + return Offset(offset.x, offset.y); + } else { + // TODO(stuartmorgan): Investigate doing this via JS instead. + throw UnimplementedError('scrollTo is not implemented on macOS'); + } } /// Whether horizontal swipe gestures trigger page navigation. @@ -517,12 +536,19 @@ class WebKitWebViewController extends PlatformWebViewController { @override Future setBackgroundColor(Color color) { - return Future.wait(>[ - _webView.setOpaque(false), - _webView.setBackgroundColor(Colors.transparent), - // This method must be called last. - _webView.scrollView.setBackgroundColor(color), - ]); + final WKWebView webView = _webView; + if (webView is WKWebViewIOS) { + return Future.wait(>[ + webView.setOpaque(false), + webView.setBackgroundColor(Colors.transparent), + // This method must be called last. + webView.scrollView.setBackgroundColor(color), + ]); + } else { + // TODO(stuartmorgan): Implement background color support. + throw UnimplementedError( + 'Background color is not yet supported on macOS.'); + } } @override @@ -744,23 +770,30 @@ window.addEventListener("error", function(e) { Future setOnScrollPositionChange( void Function(ScrollPositionChange scrollPositionChange)? onScrollPositionChange) async { - _onScrollPositionChangeCallback = onScrollPositionChange; - - if (onScrollPositionChange != null) { - final WeakReference weakThis = - WeakReference(this); - _uiScrollViewDelegate = - _webKitParams.webKitProxy.createUIScrollViewDelegate( - scrollViewDidScroll: (UIScrollView uiScrollView, double x, double y) { - weakThis.target?._onScrollPositionChangeCallback?.call( - ScrollPositionChange(x, y), - ); - }, - ); - return _webView.scrollView.setDelegate(_uiScrollViewDelegate); + final WKWebView webView = _webView; + if (webView is WKWebViewIOS) { + _onScrollPositionChangeCallback = onScrollPositionChange; + + if (onScrollPositionChange != null) { + final WeakReference weakThis = + WeakReference(this); + _uiScrollViewDelegate = + _webKitParams.webKitProxy.createUIScrollViewDelegate( + scrollViewDidScroll: (UIScrollView uiScrollView, double x, double y) { + weakThis.target?._onScrollPositionChangeCallback?.call( + ScrollPositionChange(x, y), + ); + }, + ); + return webView.scrollView.setDelegate(_uiScrollViewDelegate); + } else { + _uiScrollViewDelegate = null; + return webView.scrollView.setDelegate(null); + } } else { - _uiScrollViewDelegate = null; - return _webView.scrollView.setDelegate(null); + // TODO(stuartmorgan): Investigate doing this via JS instead. + throw UnimplementedError( + 'setOnScrollPositionChange is not implemented on macOS'); } } @@ -917,20 +950,34 @@ class WebKitWebViewWidget extends PlatformWebViewWidget { @override Widget build(BuildContext context) { - return UiKitView( - // Setting a default key using `params` ensures the `UIKitView` recreates - // the PlatformView when changes are made. - key: _webKitParams.key ?? - ValueKey( - params as WebKitWebViewWidgetCreationParams), - viewType: 'plugins.flutter.io/webview', - onPlatformViewCreated: (_) {}, - layoutDirection: params.layoutDirection, - gestureRecognizers: params.gestureRecognizers, - creationParams: _webKitParams._instanceManager.getIdentifier( - (params.controller as WebKitWebViewController)._webView), - creationParamsCodec: const StandardMessageCodec(), - ); + // Setting a default key using `params` ensures the `UIKitView` recreates + // the PlatformView when changes are made. + final Key key = _webKitParams.key ?? + ValueKey( + params as WebKitWebViewWidgetCreationParams); + if (Platform.isMacOS) { + return AppKitView( + key: key, + viewType: 'plugins.flutter.io/webview', + onPlatformViewCreated: (_) {}, + layoutDirection: params.layoutDirection, + gestureRecognizers: params.gestureRecognizers, + creationParams: _webKitParams._instanceManager.getIdentifier( + (params.controller as WebKitWebViewController)._webView), + creationParamsCodec: const StandardMessageCodec(), + ); + } else { + return UiKitView( + key: key, + viewType: 'plugins.flutter.io/webview', + onPlatformViewCreated: (_) {}, + layoutDirection: params.layoutDirection, + gestureRecognizers: params.gestureRecognizers, + creationParams: _webKitParams._instanceManager.getIdentifier( + (params.controller as WebKitWebViewController)._webView), + creationParamsCodec: const StandardMessageCodec(), + ); + } } } diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart index 591460aa1e45..a7d2fbd488d2 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/pigeons/web_kit.dart @@ -9,9 +9,9 @@ import 'package:pigeon/pigeon.dart'; dartOut: 'lib/src/common/web_kit.g.dart', dartTestOut: 'test/src/common/test_web_kit.g.dart', objcHeaderOut: - 'ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h', + 'darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h', objcSourceOut: - 'ios/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m', + 'darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FWFGeneratedWebKitApis.m', objcOptions: ObjcOptions( headerIncludePath: './include/webview_flutter_wkwebview/FWFGeneratedWebKitApis.h', diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index baa0a0f654a9..38d6fafbf54f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,11 +2,11 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.14.0 +version: 3.15.0 environment: - sdk: ^3.3.0 - flutter: ">=3.19.0" + sdk: ^3.5.0 + flutter: ">=3.24.0" flutter: plugin: @@ -15,6 +15,11 @@ flutter: ios: pluginClass: FLTWebViewFlutterPlugin dartPluginClass: WebKitWebViewPlatform + sharedDarwinSource: true + macos: + pluginClass: FLTWebViewFlutterPlugin + dartPluginClass: WebKitWebViewPlatform + sharedDarwinSource: true dependencies: flutter: @@ -27,7 +32,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 - pigeon: ^13.0.0 + pigeon: ^18.0.0 topics: - html diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_cookie_manager_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_cookie_manager_test.mocks.dart index eb58b7eb11e2..fe13a87048e5 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_cookie_manager_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_cookie_manager_test.mocks.dart @@ -63,6 +63,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i2.WKHttpCookieStore copy() => (super.noSuchMethod( Invocation.method( @@ -77,6 +78,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { ), ), ) as _i2.WKHttpCookieStore); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -95,6 +97,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { @@ -129,6 +132,7 @@ class MockWKWebsiteDataStore extends _i1.Mock Invocation.getter(#httpCookieStore), ), ) as _i2.WKHttpCookieStore); + @override _i3.Future removeDataOfTypes( Set<_i2.WKWebsiteDataType>? dataTypes, @@ -144,6 +148,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), returnValue: _i3.Future.value(false), ) as _i3.Future); + @override _i2.WKWebsiteDataStore copy() => (super.noSuchMethod( Invocation.method( @@ -158,6 +163,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), ), ) as _i2.WKWebsiteDataStore); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -176,6 +182,7 @@ class MockWKWebsiteDataStore extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.dart index b5488a0e3931..ac2f19804ffd 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.dart @@ -23,7 +23,8 @@ import 'web_kit_webview_widget_test.mocks.dart'; WKNavigationDelegate, WKPreferences, WKScriptMessageHandler, - WKWebView, + WKWebViewIOS, + WKWebViewMacOS, WKWebViewConfiguration, WKWebsiteDataStore, WKUIDelegate, @@ -38,7 +39,7 @@ void main() { group('WebKitWebViewWidget', () { _WebViewMocks configureMocks() { final _WebViewMocks mocks = _WebViewMocks( - webView: MockWKWebView(), + webView: MockWKWebViewIOS(), webViewWidgetProxy: MockWebViewWidgetProxy(), userContentController: MockWKUserContentController(), preferences: MockWKPreferences(), @@ -1375,7 +1376,7 @@ class _WebViewMocks { required this.javascriptChannelRegistry, }); - final MockWKWebView webView; + final MockWKWebViewIOS webView; final MockWebViewWidgetProxy webViewWidgetProxy; final MockWKUserContentController userContentController; final MockWKPreferences preferences; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart index a33d5ac58302..0c8876b9df03 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/legacy/web_kit_webview_widget_test.mocks.dart @@ -174,6 +174,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { ), )), ) as _i5.Future<_i2.Point>); + @override _i5.Future scrollBy(_i2.Point? offset) => (super.noSuchMethod( Invocation.method( @@ -183,6 +184,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setContentOffset(_i2.Point? offset) => (super.noSuchMethod( @@ -193,6 +195,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setDelegate(_i3.UIScrollViewDelegate? delegate) => (super.noSuchMethod( @@ -203,6 +206,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i3.UIScrollView copy() => (super.noSuchMethod( Invocation.method( @@ -217,6 +221,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { ), ), ) as _i3.UIScrollView); + @override _i5.Future setBackgroundColor(_i6.Color? color) => (super.noSuchMethod( Invocation.method( @@ -226,6 +231,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setOpaque(bool? opaque) => (super.noSuchMethod( Invocation.method( @@ -235,6 +241,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -253,6 +260,7 @@ class MockUIScrollView extends _i1.Mock implements _i3.UIScrollView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -293,6 +301,7 @@ class MockWKNavigationDelegate extends _i1.Mock ), ), ) as _i4.WKNavigationDelegate); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -311,6 +320,7 @@ class MockWKNavigationDelegate extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -345,6 +355,7 @@ class MockWKPreferences extends _i1.Mock implements _i4.WKPreferences { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i4.WKPreferences copy() => (super.noSuchMethod( Invocation.method( @@ -359,6 +370,7 @@ class MockWKPreferences extends _i1.Mock implements _i4.WKPreferences { ), ), ) as _i4.WKPreferences); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -377,6 +389,7 @@ class MockWKPreferences extends _i1.Mock implements _i4.WKPreferences { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -417,6 +430,7 @@ class MockWKScriptMessageHandler extends _i1.Mock _i4.WKUserContentController, _i4.WKScriptMessage, )); + @override _i4.WKScriptMessageHandler copy() => (super.noSuchMethod( Invocation.method( @@ -431,6 +445,7 @@ class MockWKScriptMessageHandler extends _i1.Mock ), ), ) as _i4.WKScriptMessageHandler); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -449,6 +464,7 @@ class MockWKScriptMessageHandler extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -465,15 +481,23 @@ class MockWKScriptMessageHandler extends _i1.Mock ) as _i5.Future); } -/// A class which mocks [WKWebView]. +/// A class which mocks [WKWebViewIOS]. /// /// See the documentation for Mockito's code generation for more information. -// ignore: must_be_immutable -class MockWKWebView extends _i1.Mock implements _i4.WKWebView { - MockWKWebView() { +class MockWKWebViewIOS extends _i1.Mock implements _i4.WKWebViewIOS { + MockWKWebViewIOS() { _i1.throwOnMissingStub(this); } + @override + _i3.UIScrollView get scrollView => (super.noSuchMethod( + Invocation.getter(#scrollView), + returnValue: _FakeUIScrollView_1( + this, + Invocation.getter(#scrollView), + ), + ) as _i3.UIScrollView); + @override _i4.WKWebViewConfiguration get configuration => (super.noSuchMethod( Invocation.getter(#configuration), @@ -482,14 +506,42 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { Invocation.getter(#configuration), ), ) as _i4.WKWebViewConfiguration); + @override - _i3.UIScrollView get scrollView => (super.noSuchMethod( - Invocation.getter(#scrollView), - returnValue: _FakeUIScrollView_1( + _i4.WKWebView copy() => (super.noSuchMethod( + Invocation.method( + #copy, + [], + ), + returnValue: _FakeWKWebView_6( this, - Invocation.getter(#scrollView), + Invocation.method( + #copy, + [], + ), ), - ) as _i3.UIScrollView); + ) as _i4.WKWebView); + + @override + _i5.Future setBackgroundColor(_i6.Color? color) => (super.noSuchMethod( + Invocation.method( + #setBackgroundColor, + [color], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setOpaque(bool? opaque) => (super.noSuchMethod( + Invocation.method( + #setOpaque, + [opaque], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + @override _i5.Future setUIDelegate(_i4.WKUIDelegate? delegate) => (super.noSuchMethod( @@ -500,6 +552,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setNavigationDelegate(_i4.WKNavigationDelegate? delegate) => (super.noSuchMethod( @@ -510,6 +563,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future getUrl() => (super.noSuchMethod( Invocation.method( @@ -518,6 +572,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future getEstimatedProgress() => (super.noSuchMethod( Invocation.method( @@ -526,6 +581,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(0.0), ) as _i5.Future); + @override _i5.Future loadRequest(_i7.NSUrlRequest? request) => (super.noSuchMethod( @@ -536,6 +592,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future loadHtmlString( String? string, { @@ -550,6 +607,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future loadFileUrl( String? url, { @@ -564,6 +622,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future loadFlutterAsset(String? key) => (super.noSuchMethod( Invocation.method( @@ -573,6 +632,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future canGoBack() => (super.noSuchMethod( Invocation.method( @@ -581,6 +641,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(false), ) as _i5.Future); + @override _i5.Future canGoForward() => (super.noSuchMethod( Invocation.method( @@ -589,6 +650,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(false), ) as _i5.Future); + @override _i5.Future goBack() => (super.noSuchMethod( Invocation.method( @@ -598,6 +660,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future goForward() => (super.noSuchMethod( Invocation.method( @@ -607,6 +670,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future reload() => (super.noSuchMethod( Invocation.method( @@ -616,6 +680,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future getTitle() => (super.noSuchMethod( Invocation.method( @@ -624,6 +689,16 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(), ) as _i5.Future); + + @override + _i5.Future getCustomUserAgent() => (super.noSuchMethod( + Invocation.method( + #getCustomUserAgent, + [], + ), + returnValue: _i5.Future.value(), + ) as _i5.Future); + @override _i5.Future setAllowsBackForwardNavigationGestures(bool? allow) => (super.noSuchMethod( @@ -634,6 +709,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setCustomUserAgent(String? userAgent) => (super.noSuchMethod( Invocation.method( @@ -643,6 +719,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future evaluateJavaScript(String? javaScriptString) => (super.noSuchMethod( @@ -652,6 +729,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), returnValue: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setInspectable(bool? inspectable) => (super.noSuchMethod( Invocation.method( @@ -661,14 +739,59 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override - _i5.Future getCustomUserAgent() => (super.noSuchMethod( + _i5.Future addObserver( + _i7.NSObject? observer, { + required String? keyPath, + required Set<_i7.NSKeyValueObservingOptions>? options, + }) => + (super.noSuchMethod( Invocation.method( - #getCustomUserAgent, - [], + #addObserver, + [observer], + { + #keyPath: keyPath, + #options: options, + }, ), - returnValue: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future removeObserver( + _i7.NSObject? observer, { + required String? keyPath, + }) => + (super.noSuchMethod( + Invocation.method( + #removeObserver, + [observer], + {#keyPath: keyPath}, + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [WKWebViewMacOS]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWKWebViewMacOS extends _i1.Mock implements _i4.WKWebViewMacOS { + MockWKWebViewMacOS() { + _i1.throwOnMissingStub(this); + } + + @override + _i4.WKWebViewConfiguration get configuration => (super.noSuchMethod( + Invocation.getter(#configuration), + returnValue: _FakeWKWebViewConfiguration_5( + this, + Invocation.getter(#configuration), + ), + ) as _i4.WKWebViewConfiguration); + @override _i4.WKWebView copy() => (super.noSuchMethod( Invocation.method( @@ -683,24 +806,205 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { ), ), ) as _i4.WKWebView); + @override - _i5.Future setBackgroundColor(_i6.Color? color) => (super.noSuchMethod( + _i5.Future setUIDelegate(_i4.WKUIDelegate? delegate) => + (super.noSuchMethod( Invocation.method( - #setBackgroundColor, - [color], + #setUIDelegate, + [delegate], ), returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override - _i5.Future setOpaque(bool? opaque) => (super.noSuchMethod( + _i5.Future setNavigationDelegate(_i4.WKNavigationDelegate? delegate) => + (super.noSuchMethod( Invocation.method( - #setOpaque, - [opaque], + #setNavigationDelegate, + [delegate], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future getUrl() => (super.noSuchMethod( + Invocation.method( + #getUrl, + [], + ), + returnValue: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future getEstimatedProgress() => (super.noSuchMethod( + Invocation.method( + #getEstimatedProgress, + [], + ), + returnValue: _i5.Future.value(0.0), + ) as _i5.Future); + + @override + _i5.Future loadRequest(_i7.NSUrlRequest? request) => + (super.noSuchMethod( + Invocation.method( + #loadRequest, + [request], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future loadHtmlString( + String? string, { + String? baseUrl, + }) => + (super.noSuchMethod( + Invocation.method( + #loadHtmlString, + [string], + {#baseUrl: baseUrl}, + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future loadFileUrl( + String? url, { + required String? readAccessUrl, + }) => + (super.noSuchMethod( + Invocation.method( + #loadFileUrl, + [url], + {#readAccessUrl: readAccessUrl}, + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future loadFlutterAsset(String? key) => (super.noSuchMethod( + Invocation.method( + #loadFlutterAsset, + [key], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future canGoBack() => (super.noSuchMethod( + Invocation.method( + #canGoBack, + [], + ), + returnValue: _i5.Future.value(false), + ) as _i5.Future); + + @override + _i5.Future canGoForward() => (super.noSuchMethod( + Invocation.method( + #canGoForward, + [], + ), + returnValue: _i5.Future.value(false), + ) as _i5.Future); + + @override + _i5.Future goBack() => (super.noSuchMethod( + Invocation.method( + #goBack, + [], ), returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + + @override + _i5.Future goForward() => (super.noSuchMethod( + Invocation.method( + #goForward, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future reload() => (super.noSuchMethod( + Invocation.method( + #reload, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future getTitle() => (super.noSuchMethod( + Invocation.method( + #getTitle, + [], + ), + returnValue: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future getCustomUserAgent() => (super.noSuchMethod( + Invocation.method( + #getCustomUserAgent, + [], + ), + returnValue: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setAllowsBackForwardNavigationGestures(bool? allow) => + (super.noSuchMethod( + Invocation.method( + #setAllowsBackForwardNavigationGestures, + [allow], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setCustomUserAgent(String? userAgent) => (super.noSuchMethod( + Invocation.method( + #setCustomUserAgent, + [userAgent], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future evaluateJavaScript(String? javaScriptString) => + (super.noSuchMethod( + Invocation.method( + #evaluateJavaScript, + [javaScriptString], + ), + returnValue: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setInspectable(bool? inspectable) => (super.noSuchMethod( + Invocation.method( + #setInspectable, + [inspectable], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -719,6 +1023,7 @@ class MockWKWebView extends _i1.Mock implements _i4.WKWebView { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -753,6 +1058,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#userContentController), ), ) as _i4.WKUserContentController); + @override _i4.WKPreferences get preferences => (super.noSuchMethod( Invocation.getter(#preferences), @@ -761,6 +1067,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#preferences), ), ) as _i4.WKPreferences); + @override _i4.WKWebsiteDataStore get websiteDataStore => (super.noSuchMethod( Invocation.getter(#websiteDataStore), @@ -769,6 +1076,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#websiteDataStore), ), ) as _i4.WKWebsiteDataStore); + @override _i5.Future setAllowsInlineMediaPlayback(bool? allow) => (super.noSuchMethod( @@ -779,6 +1087,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setLimitsNavigationsToAppBoundDomains(bool? limit) => (super.noSuchMethod( @@ -789,6 +1098,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future setMediaTypesRequiringUserActionForPlayback( Set<_i4.WKAudiovisualMediaType>? types) => @@ -800,6 +1110,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i4.WKWebViewConfiguration copy() => (super.noSuchMethod( Invocation.method( @@ -814,6 +1125,7 @@ class MockWKWebViewConfiguration extends _i1.Mock ), ), ) as _i4.WKWebViewConfiguration); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -832,6 +1144,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -866,6 +1179,7 @@ class MockWKWebsiteDataStore extends _i1.Mock Invocation.getter(#httpCookieStore), ), ) as _i4.WKHttpCookieStore); + @override _i5.Future removeDataOfTypes( Set<_i4.WKWebsiteDataType>? dataTypes, @@ -881,6 +1195,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), returnValue: _i5.Future.value(false), ) as _i5.Future); + @override _i4.WKWebsiteDataStore copy() => (super.noSuchMethod( Invocation.method( @@ -895,6 +1210,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), ), ) as _i4.WKWebsiteDataStore); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -913,6 +1229,7 @@ class MockWKWebsiteDataStore extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -952,6 +1269,7 @@ class MockWKUIDelegate extends _i1.Mock implements _i4.WKUIDelegate { ), ), ) as _i4.WKUIDelegate); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -970,6 +1288,7 @@ class MockWKUIDelegate extends _i1.Mock implements _i4.WKUIDelegate { returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -1012,6 +1331,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeScriptMessageHandler(String? name) => (super.noSuchMethod( @@ -1022,6 +1342,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeAllScriptMessageHandlers() => (super.noSuchMethod( Invocation.method( @@ -1031,6 +1352,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future addUserScript(_i4.WKUserScript? userScript) => (super.noSuchMethod( @@ -1041,6 +1363,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeAllUserScripts() => (super.noSuchMethod( Invocation.method( @@ -1050,6 +1373,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i4.WKUserContentController copy() => (super.noSuchMethod( Invocation.method( @@ -1064,6 +1388,7 @@ class MockWKUserContentController extends _i1.Mock ), ), ) as _i4.WKUserContentController); + @override _i5.Future addObserver( _i7.NSObject? observer, { @@ -1082,6 +1407,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + @override _i5.Future removeObserver( _i7.NSObject? observer, { @@ -1112,6 +1438,7 @@ class MockJavascriptChannelRegistry extends _i1.Mock Invocation.getter(#channels), returnValue: {}, ) as Map); + @override void onJavascriptChannelMessage( String? channel, @@ -1127,6 +1454,7 @@ class MockJavascriptChannelRegistry extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void updateJavascriptChannelsFromSet(Set<_i9.JavascriptChannel>? channels) => super.noSuchMethod( @@ -1163,6 +1491,7 @@ class MockWebViewPlatformCallbacksHandler extends _i1.Mock ), returnValue: _i5.Future.value(false), ) as _i5.FutureOr); + @override void onPageStarted(String? url) => super.noSuchMethod( Invocation.method( @@ -1171,6 +1500,7 @@ class MockWebViewPlatformCallbacksHandler extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void onPageFinished(String? url) => super.noSuchMethod( Invocation.method( @@ -1179,6 +1509,7 @@ class MockWebViewPlatformCallbacksHandler extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void onProgress(int? progress) => super.noSuchMethod( Invocation.method( @@ -1187,6 +1518,7 @@ class MockWebViewPlatformCallbacksHandler extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void onWebResourceError(_i10.WebResourceError? error) => super.noSuchMethod( Invocation.method( @@ -1230,6 +1562,7 @@ class MockWebViewWidgetProxy extends _i1.Mock ), ), ) as _i4.WKWebView); + @override _i4.WKScriptMessageHandler createScriptMessageHandler( {required void Function( @@ -1251,6 +1584,7 @@ class MockWebViewWidgetProxy extends _i1.Mock ), ), ) as _i4.WKScriptMessageHandler); + @override _i4.WKUIDelegate createUIDelgate( {void Function( @@ -1273,6 +1607,7 @@ class MockWebViewWidgetProxy extends _i1.Mock ), ), ) as _i4.WKUIDelegate); + @override _i4.WKNavigationDelegate createNavigationDelegate({ void Function( diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/common/test_web_kit.g.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/common/test_web_kit.g.dart index 982b50810e6e..0a9e645fecd0 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/common/test_web_kit.g.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/common/test_web_kit.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v13.0.0), do not edit directly. +// Autogenerated from Pigeon (v18.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers // ignore_for_file: avoid_relative_lib_imports import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -42,7 +42,7 @@ class _TestWKWebsiteDataStoreHostApiCodec extends StandardMessageCodec { abstract class TestWKWebsiteDataStoreHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _TestWKWebsiteDataStoreHostApiCodec(); void createFromWebViewConfiguration( @@ -55,19 +55,25 @@ abstract class TestWKWebsiteDataStoreHostApi { List dataTypes, double modificationTimeInSecondsSinceEpoch); - static void setup(TestWKWebsiteDataStoreHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKWebsiteDataStoreHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createFromWebViewConfiguration', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createFromWebViewConfiguration$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createFromWebViewConfiguration was null.'); @@ -92,16 +98,17 @@ abstract class TestWKWebsiteDataStoreHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createDefaultDataStore', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createDefaultDataStore$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.createDefaultDataStore was null.'); @@ -122,16 +129,17 @@ abstract class TestWKWebsiteDataStoreHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.removeDataOfTypes', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.removeDataOfTypes$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebsiteDataStoreHostApi.removeDataOfTypes was null.'); @@ -169,25 +177,32 @@ abstract class TestWKWebsiteDataStoreHostApi { abstract class TestUIViewHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void setBackgroundColor(int identifier, int? value); void setOpaque(int identifier, bool opaque); - static void setup(TestUIViewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestUIViewHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setBackgroundColor was null.'); @@ -209,16 +224,17 @@ abstract class TestUIViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIViewHostApi.setOpaque was null.'); @@ -250,7 +266,8 @@ abstract class TestUIViewHostApi { abstract class TestUIScrollViewHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void createFromWebView(int identifier, int webViewIdentifier); @@ -262,19 +279,25 @@ abstract class TestUIScrollViewHostApi { void setDelegate(int identifier, int? uiScrollViewDelegateIdentifier); - static void setup(TestUIScrollViewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestUIScrollViewHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.createFromWebView was null.'); @@ -298,16 +321,17 @@ abstract class TestUIScrollViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.getContentOffset was null.'); @@ -328,16 +352,17 @@ abstract class TestUIScrollViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.scrollBy was null.'); @@ -364,16 +389,17 @@ abstract class TestUIScrollViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setContentOffset was null.'); @@ -400,16 +426,17 @@ abstract class TestUIScrollViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewHostApi.setDelegate was null.'); @@ -463,7 +490,7 @@ class _TestWKWebViewConfigurationHostApiCodec extends StandardMessageCodec { abstract class TestWKWebViewConfigurationHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _TestWKWebViewConfigurationHostApiCodec(); void create(int identifier); @@ -477,19 +504,25 @@ abstract class TestWKWebViewConfigurationHostApi { void setMediaTypesRequiringUserActionForPlayback( int identifier, List types); - static void setup(TestWKWebViewConfigurationHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKWebViewConfigurationHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.create was null.'); @@ -510,16 +543,17 @@ abstract class TestWKWebViewConfigurationHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.createFromWebView', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.createFromWebView$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.createFromWebView was null.'); @@ -543,16 +577,17 @@ abstract class TestWKWebViewConfigurationHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setAllowsInlineMediaPlayback was null.'); @@ -576,16 +611,17 @@ abstract class TestWKWebViewConfigurationHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setLimitsNavigationsToAppBoundDomains was null.'); @@ -610,16 +646,17 @@ abstract class TestWKWebViewConfigurationHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewConfigurationHostApi.setMediaTypesRequiringUserActionForPlayback was null.'); @@ -682,7 +719,7 @@ class _TestWKUserContentControllerHostApiCodec extends StandardMessageCodec { abstract class TestWKUserContentControllerHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _TestWKUserContentControllerHostApiCodec(); void createFromWebViewConfiguration( @@ -699,19 +736,25 @@ abstract class TestWKUserContentControllerHostApi { void removeAllUserScripts(int identifier); - static void setup(TestWKUserContentControllerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKUserContentControllerHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.createFromWebViewConfiguration', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.createFromWebViewConfiguration$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.createFromWebViewConfiguration was null.'); @@ -736,16 +779,17 @@ abstract class TestWKUserContentControllerHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addScriptMessageHandler', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addScriptMessageHandler$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addScriptMessageHandler was null.'); @@ -773,16 +817,17 @@ abstract class TestWKUserContentControllerHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeScriptMessageHandler', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeScriptMessageHandler$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeScriptMessageHandler was null.'); @@ -806,16 +851,17 @@ abstract class TestWKUserContentControllerHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllScriptMessageHandlers', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllScriptMessageHandlers$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllScriptMessageHandlers was null.'); @@ -836,16 +882,17 @@ abstract class TestWKUserContentControllerHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addUserScript', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addUserScript$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.addUserScript was null.'); @@ -870,16 +917,17 @@ abstract class TestWKUserContentControllerHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllUserScripts', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllUserScripts$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUserContentControllerHostApi.removeAllUserScripts was null.'); @@ -908,26 +956,33 @@ abstract class TestWKUserContentControllerHostApi { abstract class TestWKPreferencesHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void createFromWebViewConfiguration( int identifier, int configurationIdentifier); void setJavaScriptEnabled(int identifier, bool enabled); - static void setup(TestWKPreferencesHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKPreferencesHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.createFromWebViewConfiguration', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.createFromWebViewConfiguration$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.createFromWebViewConfiguration was null.'); @@ -952,16 +1007,17 @@ abstract class TestWKPreferencesHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.setJavaScriptEnabled', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.setJavaScriptEnabled$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKPreferencesHostApi.setJavaScriptEnabled was null.'); @@ -993,23 +1049,30 @@ abstract class TestWKPreferencesHostApi { abstract class TestWKScriptMessageHandlerHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(TestWKScriptMessageHandlerHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKScriptMessageHandlerHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKScriptMessageHandlerHostApi.create was null.'); @@ -1038,23 +1101,30 @@ abstract class TestWKScriptMessageHandlerHostApi { abstract class TestWKNavigationDelegateHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(TestWKNavigationDelegateHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKNavigationDelegateHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKNavigationDelegateHostApi.create was null.'); @@ -1106,7 +1176,8 @@ class _TestNSObjectHostApiCodec extends StandardMessageCodec { abstract class TestNSObjectHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = _TestNSObjectHostApiCodec(); + static const MessageCodec pigeonChannelCodec = + _TestNSObjectHostApiCodec(); void dispose(int identifier); @@ -1115,19 +1186,25 @@ abstract class TestNSObjectHostApi { void removeObserver(int identifier, int observerIdentifier, String keyPath); - static void setup(TestNSObjectHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestNSObjectHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.dispose was null.'); @@ -1148,16 +1225,17 @@ abstract class TestNSObjectHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.addObserver was null.'); @@ -1190,16 +1268,17 @@ abstract class TestNSObjectHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSObjectHostApi.removeObserver was null.'); @@ -1358,7 +1437,8 @@ class _TestWKWebViewHostApiCodec extends StandardMessageCodec { abstract class TestWKWebViewHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = _TestWKWebViewHostApiCodec(); + static const MessageCodec pigeonChannelCodec = + _TestWKWebViewHostApiCodec(); void create(int identifier, int configurationIdentifier); @@ -1400,19 +1480,25 @@ abstract class TestWKWebViewHostApi { String? getCustomUserAgent(int identifier); - static void setup(TestWKWebViewHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKWebViewHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.create was null.'); @@ -1436,16 +1522,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setUIDelegate was null.'); @@ -1467,16 +1554,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setNavigationDelegate', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setNavigationDelegate$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setNavigationDelegate was null.'); @@ -1499,16 +1587,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getUrl was null.'); @@ -1529,16 +1618,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getEstimatedProgress was null.'); @@ -1559,16 +1649,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadRequest was null.'); @@ -1592,16 +1683,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadHtmlString was null.'); @@ -1626,16 +1718,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFileUrl was null.'); @@ -1662,16 +1755,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.loadFlutterAsset was null.'); @@ -1695,16 +1789,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoBack was null.'); @@ -1725,16 +1820,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.canGoForward was null.'); @@ -1755,16 +1851,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goBack was null.'); @@ -1785,16 +1882,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.goForward was null.'); @@ -1815,16 +1913,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.reload was null.'); @@ -1845,16 +1944,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getTitle was null.'); @@ -1875,16 +1975,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setAllowsBackForwardNavigationGestures', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setAllowsBackForwardNavigationGestures$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setAllowsBackForwardNavigationGestures was null.'); @@ -1909,16 +2010,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setCustomUserAgent was null.'); @@ -1940,16 +2042,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.evaluateJavaScript was null.'); @@ -1974,16 +2077,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.setInspectable was null.'); @@ -2007,16 +2111,17 @@ abstract class TestWKWebViewHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKWebViewHostApi.getCustomUserAgent was null.'); @@ -2045,23 +2150,30 @@ abstract class TestWKWebViewHostApi { abstract class TestWKUIDelegateHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(TestWKUIDelegateHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKUIDelegateHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKUIDelegateHostApi.create was null.'); @@ -2118,7 +2230,7 @@ class _TestWKHttpCookieStoreHostApiCodec extends StandardMessageCodec { abstract class TestWKHttpCookieStoreHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = + static const MessageCodec pigeonChannelCodec = _TestWKHttpCookieStoreHostApiCodec(); void createFromWebsiteDataStore( @@ -2126,19 +2238,25 @@ abstract class TestWKHttpCookieStoreHostApi { Future setCookie(int identifier, NSHttpCookieData cookie); - static void setup(TestWKHttpCookieStoreHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestWKHttpCookieStoreHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.createFromWebsiteDataStore', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.createFromWebsiteDataStore$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.createFromWebsiteDataStore was null.'); @@ -2163,16 +2281,17 @@ abstract class TestWKHttpCookieStoreHostApi { } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.WKHttpCookieStoreHostApi.setCookie was null.'); @@ -2208,22 +2327,30 @@ abstract class TestWKHttpCookieStoreHostApi { abstract class TestNSUrlHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); String? getAbsoluteString(int identifier); - static void setup(TestNSUrlHostApi? api, {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestNSUrlHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlHostApi.getAbsoluteString was null.'); @@ -2256,23 +2383,30 @@ abstract class TestNSUrlHostApi { abstract class TestUIScrollViewDelegateHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); void create(int identifier); - static void setup(TestUIScrollViewDelegateHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestUIScrollViewDelegateHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.UIScrollViewDelegateHostApi.create was null.'); @@ -2305,25 +2439,32 @@ abstract class TestUIScrollViewDelegateHostApi { abstract class TestNSUrlCredentialHostApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); /// Create a new native instance and add it to the `InstanceManager`. void createWithUser(int identifier, String user, String password, NSUrlCredentialPersistence persistence); - static void setup(TestNSUrlCredentialHostApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestNSUrlCredentialHostApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser', - codec, + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(__pigeon_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(__pigeon_channel, (Object? message) async { assert(message != null, 'Argument for dev.flutter.pigeon.webview_flutter_wkwebview.NSUrlCredentialHostApi.createWithUser was null.'); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.dart index 345c6fad6776..5eb821fdfcbc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.dart @@ -37,14 +37,14 @@ void main() { setUp(() { mockPlatformHostApi = MockTestNSObjectHostApi(); - TestNSObjectHostApi.setup(mockPlatformHostApi); + TestNSObjectHostApi.setUp(mockPlatformHostApi); object = NSObject.detached(instanceManager: instanceManager); instanceManager.addDartCreatedInstance(object); }); tearDown(() { - TestNSObjectHostApi.setup(null); + TestNSObjectHostApi.setUp(null); }); test('addObserver', () async { @@ -222,11 +222,11 @@ void main() { group('NSUrl', () { // Ensure the test host api is removed after each test run. - tearDown(() => TestNSUrlHostApi.setup(null)); + tearDown(() => TestNSUrlHostApi.setUp(null)); test('getAbsoluteString', () async { final MockTestNSUrlHostApi mockApi = MockTestNSUrlHostApi(); - TestNSUrlHostApi.setup(mockApi); + TestNSUrlHostApi.setUp(mockApi); final NSUrl url = NSUrl.detached(instanceManager: instanceManager); instanceManager.addHostCreatedInstance(url, 0); @@ -249,13 +249,13 @@ void main() { group('NSUrlCredential', () { tearDown(() { - TestNSUrlCredentialHostApi.setup(null); + TestNSUrlCredentialHostApi.setUp(null); }); test('HostApi createWithUser', () { final MockTestNSUrlCredentialHostApi mockApi = MockTestNSUrlCredentialHostApi(); - TestNSUrlCredentialHostApi.setup(mockApi); + TestNSUrlCredentialHostApi.setUp(mockApi); final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.mocks.dart index a34a190ac497..df4e12e6082f 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/foundation/foundation_test.mocks.dart @@ -38,6 +38,7 @@ class MockTestNSObjectHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void addObserver( int? identifier, @@ -57,6 +58,7 @@ class MockTestNSObjectHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void removeObserver( int? identifier, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.dart index 576d0404693f..c6458b9d9335 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.dart @@ -42,13 +42,13 @@ void main() { setUp(() { mockPlatformHostApi = MockTestUIScrollViewHostApi(); - TestUIScrollViewHostApi.setup(mockPlatformHostApi); + TestUIScrollViewHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); - TestWKWebViewHostApi.setup(MockTestWKWebViewHostApi()); - final WKWebView webView = WKWebView( + TestWKWebViewHostApi.setUp(MockTestWKWebViewHostApi()); + final WKWebView webView = WKWebViewIOS( WKWebViewConfiguration(instanceManager: instanceManager), instanceManager: instanceManager, ); @@ -61,9 +61,9 @@ void main() { }); tearDown(() { - TestUIScrollViewHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); - TestWKWebViewHostApi.setup(null); + TestUIScrollViewHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); + TestWKWebViewHostApi.setUp(null); }); test('getContentOffset', () async { @@ -105,12 +105,12 @@ void main() { group('UIScrollViewDelegate', () { // Ensure the test host api is removed after each test run. - tearDown(() => TestUIScrollViewDelegateHostApi.setup(null)); + tearDown(() => TestUIScrollViewDelegateHostApi.setUp(null)); test('Host API create', () { final MockTestUIScrollViewDelegateHostApi mockApi = MockTestUIScrollViewDelegateHostApi(); - TestUIScrollViewDelegateHostApi.setup(mockApi); + TestUIScrollViewDelegateHostApi.setUp(mockApi); UIScrollViewDelegate(instanceManager: instanceManager); verify(mockApi.create(0)); @@ -150,14 +150,14 @@ void main() { setUp(() { mockPlatformHostApi = MockTestUIViewHostApi(); - TestUIViewHostApi.setup(mockPlatformHostApi); + TestUIViewHostApi.setUp(mockPlatformHostApi); - view = UIView.detached(instanceManager: instanceManager); + view = UIViewBase.detached(instanceManager: instanceManager); viewInstanceId = instanceManager.addDartCreatedInstance(view); }); tearDown(() { - TestUIViewHostApi.setup(null); + TestUIViewHostApi.setUp(null); }); test('setBackgroundColor', () async { diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.mocks.dart index 54e91efb6a66..66bbc7275e69 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/ui_kit/ui_kit_test.mocks.dart @@ -40,6 +40,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void createFromWebView( int? identifier, @@ -55,6 +56,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setAllowsInlineMediaPlayback( int? identifier, @@ -70,6 +72,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setLimitsNavigationsToAppBoundDomains( int? identifier, @@ -85,6 +88,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setMediaTypesRequiringUserActionForPlayback( int? identifier, @@ -126,6 +130,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setUIDelegate( int? identifier, @@ -141,6 +146,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setNavigationDelegate( int? identifier, @@ -156,11 +162,13 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getUrl(int? identifier) => (super.noSuchMethod(Invocation.method( #getUrl, [identifier], )) as String?); + @override double getEstimatedProgress(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -169,6 +177,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: 0.0, ) as double); + @override void loadRequest( int? identifier, @@ -184,6 +193,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadHtmlString( int? identifier, @@ -201,6 +211,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadFileUrl( int? identifier, @@ -218,6 +229,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadFlutterAsset( int? identifier, @@ -233,6 +245,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override bool canGoBack(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -241,6 +254,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: false, ) as bool); + @override bool canGoForward(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -249,6 +263,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: false, ) as bool); + @override void goBack(int? identifier) => super.noSuchMethod( Invocation.method( @@ -257,6 +272,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void goForward(int? identifier) => super.noSuchMethod( Invocation.method( @@ -265,6 +281,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void reload(int? identifier) => super.noSuchMethod( Invocation.method( @@ -273,11 +290,13 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getTitle(int? identifier) => (super.noSuchMethod(Invocation.method( #getTitle, [identifier], )) as String?); + @override void setAllowsBackForwardNavigationGestures( int? identifier, @@ -293,6 +312,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setCustomUserAgent( int? identifier, @@ -308,6 +328,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override _i4.Future evaluateJavaScript( int? identifier, @@ -323,6 +344,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: _i4.Future.value(), ) as _i4.Future); + @override void setInspectable( int? identifier, @@ -338,6 +360,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getCustomUserAgent(int? identifier) => (super.noSuchMethod(Invocation.method( @@ -370,6 +393,7 @@ class MockTestUIScrollViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override List getContentOffset(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -378,6 +402,7 @@ class MockTestUIScrollViewHostApi extends _i1.Mock ), returnValue: [], ) as List); + @override void scrollBy( int? identifier, @@ -395,6 +420,7 @@ class MockTestUIScrollViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setContentOffset( int? identifier, @@ -412,6 +438,7 @@ class MockTestUIScrollViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setDelegate( int? identifier, @@ -471,6 +498,7 @@ class MockTestUIViewHostApi extends _i1.Mock implements _i2.TestUIViewHostApi { ), returnValueForMissingStub: null, ); + @override void setOpaque( int? identifier, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart index d838bf996146..2f89e32e181d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.dart @@ -50,9 +50,9 @@ void main() { setUp(() { mockPlatformHostApi = MockTestWKWebsiteDataStoreHostApi(); - TestWKWebsiteDataStoreHostApi.setup(mockPlatformHostApi); + TestWKWebsiteDataStoreHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); webViewConfiguration = WKWebViewConfiguration( @@ -66,8 +66,8 @@ void main() { }); tearDown(() { - TestWKWebsiteDataStoreHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); + TestWKWebsiteDataStoreHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('WKWebViewConfigurationFlutterApi.create', () { @@ -139,12 +139,12 @@ void main() { setUp(() { mockPlatformHostApi = MockTestWKHttpCookieStoreHostApi(); - TestWKHttpCookieStoreHostApi.setup(mockPlatformHostApi); + TestWKHttpCookieStoreHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); - TestWKWebsiteDataStoreHostApi.setup( + TestWKWebsiteDataStoreHostApi.setUp( MockTestWKWebsiteDataStoreHostApi(), ); @@ -160,9 +160,9 @@ void main() { }); tearDown(() { - TestWKHttpCookieStoreHostApi.setup(null); - TestWKWebsiteDataStoreHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); + TestWKHttpCookieStoreHostApi.setUp(null); + TestWKWebsiteDataStoreHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('createFromWebsiteDataStore', () { @@ -200,7 +200,7 @@ void main() { setUp(() async { mockPlatformHostApi = MockTestWKScriptMessageHandlerHostApi(); - TestWKScriptMessageHandlerHostApi.setup(mockPlatformHostApi); + TestWKScriptMessageHandlerHostApi.setUp(mockPlatformHostApi); scriptMessageHandler = WKScriptMessageHandler( didReceiveScriptMessage: (_, __) {}, @@ -209,7 +209,7 @@ void main() { }); tearDown(() { - TestWKScriptMessageHandlerHostApi.setup(null); + TestWKScriptMessageHandlerHostApi.setUp(null); }); test('create', () async { @@ -264,9 +264,9 @@ void main() { setUp(() { mockPlatformHostApi = MockTestWKPreferencesHostApi(); - TestWKPreferencesHostApi.setup(mockPlatformHostApi); + TestWKPreferencesHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); webViewConfiguration = WKWebViewConfiguration( @@ -280,8 +280,8 @@ void main() { }); tearDown(() { - TestWKPreferencesHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); + TestWKPreferencesHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('createFromWebViewConfiguration', () async { @@ -309,9 +309,9 @@ void main() { setUp(() { mockPlatformHostApi = MockTestWKUserContentControllerHostApi(); - TestWKUserContentControllerHostApi.setup(mockPlatformHostApi); + TestWKUserContentControllerHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); webViewConfiguration = WKWebViewConfiguration( @@ -326,8 +326,8 @@ void main() { }); tearDown(() { - TestWKUserContentControllerHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); + TestWKUserContentControllerHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('createFromWebViewConfiguration', () async { @@ -338,7 +338,7 @@ void main() { }); test('addScriptMessageHandler', () async { - TestWKScriptMessageHandlerHostApi.setup( + TestWKScriptMessageHandlerHostApi.setUp( MockTestWKScriptMessageHandlerHostApi(), ); final WKScriptMessageHandler handler = WKScriptMessageHandler( @@ -397,7 +397,7 @@ void main() { setUp(() async { mockPlatformHostApi = MockTestWKWebViewConfigurationHostApi(); - TestWKWebViewConfigurationHostApi.setup(mockPlatformHostApi); + TestWKWebViewConfigurationHostApi.setUp(mockPlatformHostApi); webViewConfiguration = WKWebViewConfiguration( instanceManager: instanceManager, @@ -405,7 +405,7 @@ void main() { }); tearDown(() { - TestWKWebViewConfigurationHostApi.setup(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('create', () async { @@ -417,8 +417,8 @@ void main() { }); test('createFromWebView', () async { - TestWKWebViewHostApi.setup(MockTestWKWebViewHostApi()); - final WKWebView webView = WKWebView( + TestWKWebViewHostApi.setUp(MockTestWKWebViewHostApi()); + final WKWebView webView = WKWebViewIOS( webViewConfiguration, instanceManager: instanceManager, ); @@ -479,13 +479,13 @@ void main() { setUp(() async { mockPlatformHostApi = MockTestWKNavigationDelegateHostApi(); - TestWKNavigationDelegateHostApi.setup(mockPlatformHostApi); + TestWKNavigationDelegateHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi(), ); - TestWKWebViewHostApi.setup(MockTestWKWebViewHostApi()); - webView = WKWebView( + TestWKWebViewHostApi.setUp(MockTestWKWebViewHostApi()); + webView = WKWebViewIOS( WKWebViewConfiguration(instanceManager: instanceManager), instanceManager: instanceManager, ); @@ -496,9 +496,9 @@ void main() { }); tearDown(() { - TestWKNavigationDelegateHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); - TestWKWebViewHostApi.setup(null); + TestWKNavigationDelegateHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); + TestWKWebViewHostApi.setUp(null); }); test('create', () async { @@ -785,15 +785,15 @@ void main() { setUp(() { mockPlatformHostApi = MockTestWKWebViewHostApi(); - TestWKWebViewHostApi.setup(mockPlatformHostApi); + TestWKWebViewHostApi.setUp(mockPlatformHostApi); - TestWKWebViewConfigurationHostApi.setup( + TestWKWebViewConfigurationHostApi.setUp( MockTestWKWebViewConfigurationHostApi()); webViewConfiguration = WKWebViewConfiguration( instanceManager: instanceManager, ); - webView = WKWebView( + webView = WKWebViewIOS( webViewConfiguration, instanceManager: instanceManager, ); @@ -801,8 +801,8 @@ void main() { }); tearDown(() { - TestWKWebViewHostApi.setup(null); - TestWKWebViewConfigurationHostApi.setup(null); + TestWKWebViewHostApi.setUp(null); + TestWKWebViewConfigurationHostApi.setUp(null); }); test('create', () async { @@ -815,7 +815,7 @@ void main() { }); test('setUIDelegate', () async { - TestWKUIDelegateHostApi.setup(MockTestWKUIDelegateHostApi()); + TestWKUIDelegateHostApi.setUp(MockTestWKUIDelegateHostApi()); final WKUIDelegate uiDelegate = WKUIDelegate( instanceManager: instanceManager, ); @@ -826,11 +826,11 @@ void main() { instanceManager.getIdentifier(uiDelegate), )); - TestWKUIDelegateHostApi.setup(null); + TestWKUIDelegateHostApi.setUp(null); }); test('setNavigationDelegate', () async { - TestWKNavigationDelegateHostApi.setup( + TestWKNavigationDelegateHostApi.setUp( MockTestWKNavigationDelegateHostApi(), ); final WKNavigationDelegate navigationDelegate = WKNavigationDelegate( @@ -843,7 +843,7 @@ void main() { instanceManager.getIdentifier(navigationDelegate), )); - TestWKNavigationDelegateHostApi.setup(null); + TestWKNavigationDelegateHostApi.setUp(null); }); test('getUrl', () { @@ -979,13 +979,13 @@ void main() { setUp(() async { mockPlatformHostApi = MockTestWKUIDelegateHostApi(); - TestWKUIDelegateHostApi.setup(mockPlatformHostApi); + TestWKUIDelegateHostApi.setUp(mockPlatformHostApi); uiDelegate = WKUIDelegate(instanceManager: instanceManager); }); tearDown(() { - TestWKUIDelegateHostApi.setup(null); + TestWKUIDelegateHostApi.setUp(null); }); test('create', () async { @@ -1017,7 +1017,7 @@ void main() { }, ); - final WKWebView webView = WKWebView.detached( + final WKWebView webView = WKWebViewIOS.detached( instanceManager: instanceManager, ); instanceManager.addHostCreatedInstance(webView, 2); @@ -1090,7 +1090,7 @@ void main() { instanceManager: instanceManager, ); - final WKWebView webView = WKWebView.detached( + final WKWebView webView = WKWebViewIOS.detached( instanceManager: instanceManager, ); const int webViewIdentifier = 42; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.mocks.dart index 99aedf1659f7..d9a0ed01d50d 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/src/web_kit/web_kit_test.mocks.dart @@ -47,6 +47,7 @@ class MockTestWKHttpCookieStoreHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override _i3.Future setCookie( int? identifier, @@ -108,6 +109,7 @@ class MockTestWKPreferencesHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setJavaScriptEnabled( int? identifier, @@ -187,6 +189,7 @@ class MockTestWKUserContentControllerHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void addScriptMessageHandler( int? identifier, @@ -204,6 +207,7 @@ class MockTestWKUserContentControllerHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void removeScriptMessageHandler( int? identifier, @@ -219,6 +223,7 @@ class MockTestWKUserContentControllerHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void removeAllScriptMessageHandlers(int? identifier) => super.noSuchMethod( Invocation.method( @@ -227,6 +232,7 @@ class MockTestWKUserContentControllerHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void addUserScript( int? identifier, @@ -242,6 +248,7 @@ class MockTestWKUserContentControllerHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void removeAllUserScripts(int? identifier) => super.noSuchMethod( Invocation.method( @@ -269,6 +276,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void createFromWebView( int? identifier, @@ -284,6 +292,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setAllowsInlineMediaPlayback( int? identifier, @@ -299,6 +308,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setLimitsNavigationsToAppBoundDomains( int? identifier, @@ -314,6 +324,7 @@ class MockTestWKWebViewConfigurationHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setMediaTypesRequiringUserActionForPlayback( int? identifier, @@ -355,6 +366,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setUIDelegate( int? identifier, @@ -370,6 +382,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setNavigationDelegate( int? identifier, @@ -385,11 +398,13 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getUrl(int? identifier) => (super.noSuchMethod(Invocation.method( #getUrl, [identifier], )) as String?); + @override double getEstimatedProgress(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -398,6 +413,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: 0.0, ) as double); + @override void loadRequest( int? identifier, @@ -413,6 +429,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadHtmlString( int? identifier, @@ -430,6 +447,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadFileUrl( int? identifier, @@ -447,6 +465,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void loadFlutterAsset( int? identifier, @@ -462,6 +481,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override bool canGoBack(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -470,6 +490,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: false, ) as bool); + @override bool canGoForward(int? identifier) => (super.noSuchMethod( Invocation.method( @@ -478,6 +499,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: false, ) as bool); + @override void goBack(int? identifier) => super.noSuchMethod( Invocation.method( @@ -486,6 +508,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void goForward(int? identifier) => super.noSuchMethod( Invocation.method( @@ -494,6 +517,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void reload(int? identifier) => super.noSuchMethod( Invocation.method( @@ -502,11 +526,13 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getTitle(int? identifier) => (super.noSuchMethod(Invocation.method( #getTitle, [identifier], )) as String?); + @override void setAllowsBackForwardNavigationGestures( int? identifier, @@ -522,6 +548,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void setCustomUserAgent( int? identifier, @@ -537,6 +564,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override _i3.Future evaluateJavaScript( int? identifier, @@ -552,6 +580,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValue: _i3.Future.value(), ) as _i3.Future); + @override void setInspectable( int? identifier, @@ -567,6 +596,7 @@ class MockTestWKWebViewHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override String? getCustomUserAgent(int? identifier) => (super.noSuchMethod(Invocation.method( @@ -599,6 +629,7 @@ class MockTestWKWebsiteDataStoreHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override void createDefaultDataStore(int? identifier) => super.noSuchMethod( Invocation.method( @@ -607,6 +638,7 @@ class MockTestWKWebsiteDataStoreHostApi extends _i1.Mock ), returnValueForMissingStub: null, ); + @override _i3.Future removeDataOfTypes( int? identifier, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart index da8675886f7e..14561f15ff6c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart @@ -42,7 +42,7 @@ void main() { webKitDelegate.setOnPageFinished((String url) => callbackUrl = url); CapturingNavigationDelegate.lastCreatedDelegate.didFinishNavigation!( - WKWebView.detached(), + WKWebViewIOS.detached(), 'https://www.google.com', ); @@ -64,7 +64,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.didStartProvisionalNavigation!( - WKWebView.detached(), + WKWebViewIOS.detached(), 'https://www.google.com', ); @@ -90,7 +90,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.decidePolicyForNavigationResponse!( - WKWebView.detached(), + WKWebViewIOS.detached(), const WKNavigationResponse( response: NSHttpUrlResponse(statusCode: 401), forMainFrame: true), ); @@ -117,7 +117,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.decidePolicyForNavigationResponse!( - WKWebView.detached(), + WKWebViewIOS.detached(), const WKNavigationResponse( response: NSHttpUrlResponse(statusCode: 399), forMainFrame: true), ); @@ -143,7 +143,7 @@ void main() { webKitDelegate.setOnWebResourceError(onWebResourceError); CapturingNavigationDelegate.lastCreatedDelegate.didFailNavigation!( - WKWebView.detached(), + WKWebViewIOS.detached(), const NSError( code: WKErrorCode.webViewInvalidated, domain: 'domain', @@ -182,7 +182,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.didFailProvisionalNavigation!( - WKWebView.detached(), + WKWebViewIOS.detached(), const NSError( code: WKErrorCode.webViewInvalidated, domain: 'domain', @@ -221,7 +221,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.webViewWebContentProcessDidTerminate!( - WKWebView.detached(), + WKWebViewIOS.detached(), ); expect(callbackError.description, ''); @@ -256,7 +256,7 @@ void main() { expect( CapturingNavigationDelegate .lastCreatedDelegate.decidePolicyForNavigationAction!( - WKWebView.detached(), + WKWebViewIOS.detached(), const WKNavigationAction( request: NSUrlRequest(url: 'https://www.google.com'), targetFrame: WKFrameInfo( @@ -295,7 +295,7 @@ void main() { CapturingNavigationDelegate .lastCreatedDelegate.didReceiveAuthenticationChallenge!( - WKWebView.detached(), + WKWebViewIOS.detached(), NSUrlAuthenticationChallenge.detached( protectionSpace: NSUrlProtectionSpace.detached( host: expectedHost, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart index b5f731f97357..d7aab4b54266 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.dart @@ -27,7 +27,7 @@ import 'webkit_webview_controller_test.mocks.dart'; WKPreferences, WKUserContentController, WKWebsiteDataStore, - WKWebView, + WKWebViewIOS, WKWebViewConfiguration, WKScriptMessageHandler, ]) @@ -42,7 +42,7 @@ void main() { WKUIDelegate? uiDelegate, MockWKUserContentController? mockUserContentController, MockWKWebsiteDataStore? mockWebsiteDataStore, - MockWKWebView Function( + MockWKWebViewIOS Function( WKWebViewConfiguration configuration, { void Function( String keyPath, @@ -55,7 +55,7 @@ void main() { }) { final MockWKWebViewConfiguration nonNullMockWebViewConfiguration = mockWebViewConfiguration ?? MockWKWebViewConfiguration(); - late final MockWKWebView nonNullMockWebView; + late final MockWKWebViewIOS nonNullMockWebView; final PlatformWebViewControllerCreationParams controllerCreationParams = WebKitWebViewControllerCreationParams( @@ -73,7 +73,7 @@ void main() { InstanceManager? instanceManager, }) { nonNullMockWebView = createMockWebView == null - ? MockWKWebView() + ? MockWKWebViewIOS() : createMockWebView( nonNullMockWebViewConfiguration, observeValue: observeValue, @@ -275,7 +275,7 @@ void main() { }); test('loadFile', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -289,7 +289,7 @@ void main() { }); test('loadFlutterAsset', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -300,7 +300,7 @@ void main() { }); test('loadHtmlString', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -317,7 +317,7 @@ void main() { group('loadRequest', () { test('Throws ArgumentError for empty scheme', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -332,7 +332,7 @@ void main() { }); test('GET without headers', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -351,7 +351,7 @@ void main() { }); test('GET with headers', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -373,7 +373,7 @@ void main() { }); test('POST without body', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -392,7 +392,7 @@ void main() { }); test('POST with body', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -417,7 +417,7 @@ void main() { }); test('canGoBack', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -430,7 +430,7 @@ void main() { }); test('canGoForward', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -443,7 +443,7 @@ void main() { }); test('goBack', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -454,7 +454,7 @@ void main() { }); test('goForward', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -465,7 +465,7 @@ void main() { }); test('reload', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -476,7 +476,7 @@ void main() { }); test('setAllowsBackForwardNavigationGestures', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -487,7 +487,7 @@ void main() { }); test('runJavaScriptReturningResult', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -504,7 +504,7 @@ void main() { }); test('runJavaScriptReturningResult throws error on null return value', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -520,7 +520,7 @@ void main() { }); test('runJavaScript', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -537,7 +537,7 @@ void main() { test('runJavaScript ignores exception with unsupported javaScript type', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -558,7 +558,7 @@ void main() { }); test('getTitle', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -570,7 +570,7 @@ void main() { }); test('currentUrl', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -646,7 +646,7 @@ void main() { }); test('setBackgroundColor', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final MockUIScrollView mockScrollView = MockUIScrollView(); final WebKitWebViewController controller = createControllerWithMocks( @@ -665,7 +665,7 @@ void main() { }); test('userAgent', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -910,7 +910,7 @@ void main() { }); test('getUserAgent', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -925,7 +925,7 @@ void main() { }); test('setPlatformNavigationDelegate', () { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, @@ -951,7 +951,7 @@ void main() { }); test('setPlatformNavigationDelegate onProgress', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); late final void Function( String keyPath, @@ -1017,7 +1017,7 @@ void main() { // CapturingUIDelegate.lastCreatedDelegate. createControllerWithMocks(); - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); const NSUrlRequest request = NSUrlRequest(url: 'https://www.google.com'); CapturingUIDelegate.lastCreatedDelegate.onCreateWebView!( @@ -1038,7 +1038,7 @@ void main() { test( 'setPlatformNavigationDelegate onProgress can be changed by the WebKitNavigationDelegate', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); late final void Function( String keyPath, @@ -1090,7 +1090,7 @@ void main() { }); test('setPlatformNavigationDelegate onUrlChange', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); late final void Function( String keyPath, @@ -1154,7 +1154,7 @@ void main() { }); test('setPlatformNavigationDelegate onUrlChange to null NSUrl', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); late final void Function( String keyPath, @@ -1207,8 +1207,8 @@ void main() { final InstanceManager instanceManager = InstanceManager( onWeakReferenceRemoved: (_) {}, ); - final MockWKWebView mockWebView = MockWKWebView(); - when(mockWebView.copy()).thenReturn(MockWKWebView()); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); + when(mockWebView.copy()).thenReturn(MockWKWebViewIOS()); instanceManager.addHostCreatedInstance(mockWebView, 0); final WebKitWebViewController controller = createControllerWithMocks( @@ -1244,7 +1244,7 @@ void main() { final WKPermissionDecision decision = await onPermissionRequestCallback( CapturingUIDelegate.lastCreatedDelegate, - WKWebView.detached(), + WKWebViewIOS.detached(), const WKSecurityOrigin(host: '', port: 0, protocol: ''), const WKFrameInfo( isMainFrame: false, @@ -1337,7 +1337,7 @@ void main() { }); test('inspectable', () async { - final MockWKWebView mockWebView = MockWKWebView(); + final MockWKWebViewIOS mockWebView = MockWKWebViewIOS(); final WebKitWebViewController controller = createControllerWithMocks( createMockWebView: (_, {dynamic observeValue}) => mockWebView, diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart index 932c567fb1e5..0c4924df62dc 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_controller_test.mocks.dart @@ -159,6 +159,7 @@ class MockNSUrl extends _i1.Mock implements _i2.NSUrl { ), returnValue: _i6.Future.value(), ) as _i6.Future); + @override _i2.NSObject copy() => (super.noSuchMethod( Invocation.method( @@ -173,6 +174,7 @@ class MockNSUrl extends _i1.Mock implements _i2.NSUrl { ), ), ) as _i2.NSObject); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -191,6 +193,7 @@ class MockNSUrl extends _i1.Mock implements _i2.NSUrl { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -230,6 +233,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { ), )), ) as _i6.Future<_i3.Point>); + @override _i6.Future scrollBy(_i3.Point? offset) => (super.noSuchMethod( Invocation.method( @@ -239,6 +243,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setContentOffset(_i3.Point? offset) => (super.noSuchMethod( @@ -249,6 +254,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setDelegate(_i4.UIScrollViewDelegate? delegate) => (super.noSuchMethod( @@ -259,6 +265,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i4.UIScrollView copy() => (super.noSuchMethod( Invocation.method( @@ -273,6 +280,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { ), ), ) as _i4.UIScrollView); + @override _i6.Future setBackgroundColor(_i7.Color? color) => (super.noSuchMethod( Invocation.method( @@ -282,6 +290,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setOpaque(bool? opaque) => (super.noSuchMethod( Invocation.method( @@ -291,6 +300,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -309,6 +319,7 @@ class MockUIScrollView extends _i1.Mock implements _i4.UIScrollView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -349,6 +360,7 @@ class MockUIScrollViewDelegate extends _i1.Mock ), ), ) as _i4.UIScrollViewDelegate); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -367,6 +379,7 @@ class MockUIScrollViewDelegate extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -401,6 +414,7 @@ class MockWKPreferences extends _i1.Mock implements _i5.WKPreferences { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i5.WKPreferences copy() => (super.noSuchMethod( Invocation.method( @@ -415,6 +429,7 @@ class MockWKPreferences extends _i1.Mock implements _i5.WKPreferences { ), ), ) as _i5.WKPreferences); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -433,6 +448,7 @@ class MockWKPreferences extends _i1.Mock implements _i5.WKPreferences { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -475,6 +491,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeScriptMessageHandler(String? name) => (super.noSuchMethod( @@ -485,6 +502,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeAllScriptMessageHandlers() => (super.noSuchMethod( Invocation.method( @@ -494,6 +512,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future addUserScript(_i5.WKUserScript? userScript) => (super.noSuchMethod( @@ -504,6 +523,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeAllUserScripts() => (super.noSuchMethod( Invocation.method( @@ -513,6 +533,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i5.WKUserContentController copy() => (super.noSuchMethod( Invocation.method( @@ -527,6 +548,7 @@ class MockWKUserContentController extends _i1.Mock ), ), ) as _i5.WKUserContentController); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -545,6 +567,7 @@ class MockWKUserContentController extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -579,6 +602,7 @@ class MockWKWebsiteDataStore extends _i1.Mock Invocation.getter(#httpCookieStore), ), ) as _i5.WKHttpCookieStore); + @override _i6.Future removeDataOfTypes( Set<_i5.WKWebsiteDataType>? dataTypes, @@ -594,6 +618,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), returnValue: _i6.Future.value(false), ) as _i6.Future); + @override _i5.WKWebsiteDataStore copy() => (super.noSuchMethod( Invocation.method( @@ -608,6 +633,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), ), ) as _i5.WKWebsiteDataStore); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -626,6 +652,7 @@ class MockWKWebsiteDataStore extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -642,15 +669,23 @@ class MockWKWebsiteDataStore extends _i1.Mock ) as _i6.Future); } -/// A class which mocks [WKWebView]. +/// A class which mocks [WKWebViewIOS]. /// /// See the documentation for Mockito's code generation for more information. -// ignore: must_be_immutable -class MockWKWebView extends _i1.Mock implements _i5.WKWebView { - MockWKWebView() { +class MockWKWebViewIOS extends _i1.Mock implements _i5.WKWebViewIOS { + MockWKWebViewIOS() { _i1.throwOnMissingStub(this); } + @override + _i4.UIScrollView get scrollView => (super.noSuchMethod( + Invocation.getter(#scrollView), + returnValue: _FakeUIScrollView_2( + this, + Invocation.getter(#scrollView), + ), + ) as _i4.UIScrollView); + @override _i5.WKWebViewConfiguration get configuration => (super.noSuchMethod( Invocation.getter(#configuration), @@ -659,14 +694,42 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { Invocation.getter(#configuration), ), ) as _i5.WKWebViewConfiguration); + @override - _i4.UIScrollView get scrollView => (super.noSuchMethod( - Invocation.getter(#scrollView), - returnValue: _FakeUIScrollView_2( + _i5.WKWebView copy() => (super.noSuchMethod( + Invocation.method( + #copy, + [], + ), + returnValue: _FakeWKWebView_9( this, - Invocation.getter(#scrollView), + Invocation.method( + #copy, + [], + ), ), - ) as _i4.UIScrollView); + ) as _i5.WKWebView); + + @override + _i6.Future setBackgroundColor(_i7.Color? color) => (super.noSuchMethod( + Invocation.method( + #setBackgroundColor, + [color], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future setOpaque(bool? opaque) => (super.noSuchMethod( + Invocation.method( + #setOpaque, + [opaque], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + @override _i6.Future setUIDelegate(_i5.WKUIDelegate? delegate) => (super.noSuchMethod( @@ -677,6 +740,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setNavigationDelegate(_i5.WKNavigationDelegate? delegate) => (super.noSuchMethod( @@ -687,6 +751,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future getUrl() => (super.noSuchMethod( Invocation.method( @@ -695,6 +760,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future getEstimatedProgress() => (super.noSuchMethod( Invocation.method( @@ -703,6 +769,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(0.0), ) as _i6.Future); + @override _i6.Future loadRequest(_i2.NSUrlRequest? request) => (super.noSuchMethod( @@ -713,6 +780,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future loadHtmlString( String? string, { @@ -727,6 +795,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future loadFileUrl( String? url, { @@ -741,6 +810,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future loadFlutterAsset(String? key) => (super.noSuchMethod( Invocation.method( @@ -750,6 +820,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future canGoBack() => (super.noSuchMethod( Invocation.method( @@ -758,6 +829,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(false), ) as _i6.Future); + @override _i6.Future canGoForward() => (super.noSuchMethod( Invocation.method( @@ -766,6 +838,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(false), ) as _i6.Future); + @override _i6.Future goBack() => (super.noSuchMethod( Invocation.method( @@ -775,6 +848,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future goForward() => (super.noSuchMethod( Invocation.method( @@ -784,6 +858,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future reload() => (super.noSuchMethod( Invocation.method( @@ -793,6 +868,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future getTitle() => (super.noSuchMethod( Invocation.method( @@ -801,6 +877,16 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(), ) as _i6.Future); + + @override + _i6.Future getCustomUserAgent() => (super.noSuchMethod( + Invocation.method( + #getCustomUserAgent, + [], + ), + returnValue: _i6.Future.value(), + ) as _i6.Future); + @override _i6.Future setAllowsBackForwardNavigationGestures(bool? allow) => (super.noSuchMethod( @@ -811,6 +897,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setCustomUserAgent(String? userAgent) => (super.noSuchMethod( Invocation.method( @@ -820,6 +907,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future evaluateJavaScript(String? javaScriptString) => (super.noSuchMethod( @@ -829,6 +917,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { ), returnValue: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setInspectable(bool? inspectable) => (super.noSuchMethod( Invocation.method( @@ -838,46 +927,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); - @override - _i6.Future getCustomUserAgent() => (super.noSuchMethod( - Invocation.method( - #getCustomUserAgent, - [], - ), - returnValue: _i6.Future.value(), - ) as _i6.Future); - @override - _i5.WKWebView copy() => (super.noSuchMethod( - Invocation.method( - #copy, - [], - ), - returnValue: _FakeWKWebView_9( - this, - Invocation.method( - #copy, - [], - ), - ), - ) as _i5.WKWebView); - @override - _i6.Future setBackgroundColor(_i7.Color? color) => (super.noSuchMethod( - Invocation.method( - #setBackgroundColor, - [color], - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); - @override - _i6.Future setOpaque(bool? opaque) => (super.noSuchMethod( - Invocation.method( - #setOpaque, - [opaque], - ), - returnValue: _i6.Future.value(), - returnValueForMissingStub: _i6.Future.value(), - ) as _i6.Future); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -896,6 +946,7 @@ class MockWKWebView extends _i1.Mock implements _i5.WKWebView { returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -930,6 +981,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#userContentController), ), ) as _i5.WKUserContentController); + @override _i5.WKPreferences get preferences => (super.noSuchMethod( Invocation.getter(#preferences), @@ -938,6 +990,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#preferences), ), ) as _i5.WKPreferences); + @override _i5.WKWebsiteDataStore get websiteDataStore => (super.noSuchMethod( Invocation.getter(#websiteDataStore), @@ -946,6 +999,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#websiteDataStore), ), ) as _i5.WKWebsiteDataStore); + @override _i6.Future setAllowsInlineMediaPlayback(bool? allow) => (super.noSuchMethod( @@ -956,6 +1010,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setLimitsNavigationsToAppBoundDomains(bool? limit) => (super.noSuchMethod( @@ -966,6 +1021,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future setMediaTypesRequiringUserActionForPlayback( Set<_i5.WKAudiovisualMediaType>? types) => @@ -977,6 +1033,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i5.WKWebViewConfiguration copy() => (super.noSuchMethod( Invocation.method( @@ -991,6 +1048,7 @@ class MockWKWebViewConfiguration extends _i1.Mock ), ), ) as _i5.WKWebViewConfiguration); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -1009,6 +1067,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { @@ -1049,6 +1108,7 @@ class MockWKScriptMessageHandler extends _i1.Mock _i5.WKUserContentController, _i5.WKScriptMessage, )); + @override _i5.WKScriptMessageHandler copy() => (super.noSuchMethod( Invocation.method( @@ -1063,6 +1123,7 @@ class MockWKScriptMessageHandler extends _i1.Mock ), ), ) as _i5.WKScriptMessageHandler); + @override _i6.Future addObserver( _i2.NSObject? observer, { @@ -1081,6 +1142,7 @@ class MockWKScriptMessageHandler extends _i1.Mock returnValue: _i6.Future.value(), returnValueForMissingStub: _i6.Future.value(), ) as _i6.Future); + @override _i6.Future removeObserver( _i2.NSObject? observer, { diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_cookie_manager_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_cookie_manager_test.mocks.dart index d9d21dab8db5..bda15f7cec78 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_cookie_manager_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_cookie_manager_test.mocks.dart @@ -63,6 +63,7 @@ class MockWKWebsiteDataStore extends _i1.Mock Invocation.getter(#httpCookieStore), ), ) as _i2.WKHttpCookieStore); + @override _i3.Future removeDataOfTypes( Set<_i2.WKWebsiteDataType>? dataTypes, @@ -78,6 +79,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), returnValue: _i3.Future.value(false), ) as _i3.Future); + @override _i2.WKWebsiteDataStore copy() => (super.noSuchMethod( Invocation.method( @@ -92,6 +94,7 @@ class MockWKWebsiteDataStore extends _i1.Mock ), ), ) as _i2.WKWebsiteDataStore); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -110,6 +113,7 @@ class MockWKWebsiteDataStore extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { @@ -144,6 +148,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i2.WKHttpCookieStore copy() => (super.noSuchMethod( Invocation.method( @@ -158,6 +163,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { ), ), ) as _i2.WKHttpCookieStore); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -176,6 +182,7 @@ class MockWKHttpCookieStore extends _i1.Mock implements _i2.WKHttpCookieStore { returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart index ff7da8715218..3a17047c3edb 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:io'; + import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/annotations.dart'; @@ -41,7 +43,8 @@ void main() { Builder(builder: (BuildContext context) => widget.build(context)), ); - expect(find.byType(UiKitView), findsOneWidget); + expect(find.byType(Platform.isMacOS ? AppKitView : UiKitView), + findsOneWidget); expect(find.byKey(const Key('keyValue')), findsOneWidget); }); @@ -187,7 +190,7 @@ WebKitWebViewController createTestWebViewController( )? observeValue, InstanceManager? instanceManager, }) { - final WKWebView webView = WKWebView.detached( + final WKWebView webView = WKWebViewIOS.detached( instanceManager: testInstanceManager, ); testInstanceManager.addDartCreatedInstance(webView); diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart index 8c511d9f8025..2aff8e964b60 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_webview_widget_test.mocks.dart @@ -99,6 +99,7 @@ class MockWKUIDelegate extends _i1.Mock implements _i2.WKUIDelegate { ), ), ) as _i2.WKUIDelegate); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -117,6 +118,7 @@ class MockWKUIDelegate extends _i1.Mock implements _i2.WKUIDelegate { returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { @@ -151,6 +153,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#userContentController), ), ) as _i2.WKUserContentController); + @override _i2.WKPreferences get preferences => (super.noSuchMethod( Invocation.getter(#preferences), @@ -159,6 +162,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#preferences), ), ) as _i2.WKPreferences); + @override _i2.WKWebsiteDataStore get websiteDataStore => (super.noSuchMethod( Invocation.getter(#websiteDataStore), @@ -167,6 +171,7 @@ class MockWKWebViewConfiguration extends _i1.Mock Invocation.getter(#websiteDataStore), ), ) as _i2.WKWebsiteDataStore); + @override _i3.Future setAllowsInlineMediaPlayback(bool? allow) => (super.noSuchMethod( @@ -177,6 +182,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future setLimitsNavigationsToAppBoundDomains(bool? limit) => (super.noSuchMethod( @@ -187,6 +193,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future setMediaTypesRequiringUserActionForPlayback( Set<_i2.WKAudiovisualMediaType>? types) => @@ -198,6 +205,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i2.WKWebViewConfiguration copy() => (super.noSuchMethod( Invocation.method( @@ -212,6 +220,7 @@ class MockWKWebViewConfiguration extends _i1.Mock ), ), ) as _i2.WKWebViewConfiguration); + @override _i3.Future addObserver( _i4.NSObject? observer, { @@ -230,6 +239,7 @@ class MockWKWebViewConfiguration extends _i1.Mock returnValue: _i3.Future.value(), returnValueForMissingStub: _i3.Future.value(), ) as _i3.Future); + @override _i3.Future removeObserver( _i4.NSObject? observer, { diff --git a/script/tool/lib/src/common/package_state_utils.dart b/script/tool/lib/src/common/package_state_utils.dart index 316251d4f01a..3d985cf9caf6 100644 --- a/script/tool/lib/src/common/package_state_utils.dart +++ b/script/tool/lib/src/common/package_state_utils.dart @@ -226,6 +226,7 @@ bool _isExampleBuildFile(List pathComponents) { pathComponents.contains('Podfile') || pathComponents.contains('CMakeLists.txt') || pathComponents.contains('.pluginToolsConfig.yaml') || + pathComponents.contains('settings.gradle') || pathComponents.contains('pubspec.yaml'); }