diff --git a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md index e708df3f64b7..1f9edc0a754d 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.0 + +* Adds `WebResourceRequest` and `WebResourceResponse` to `HttpResponseError`. + ## 2.8.0 * Adds support to track scroll position changes. See `PlatformWebViewController.setOnScrollPositionChange`. diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/http_response_error.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/http_response_error.dart index e51b8cf7e2c5..beca1f680dff 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/http_response_error.dart +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/http_response_error.dart @@ -4,6 +4,9 @@ import 'package:flutter/foundation.dart'; +import 'web_resource_request.dart'; +import 'web_resource_response.dart'; + /// Error returned in `PlatformNavigationDelegate.setOnHttpError` when an HTTP /// response error has been received. /// @@ -37,9 +40,13 @@ import 'package:flutter/foundation.dart'; class HttpResponseError { /// Used by the platform implementation to create a new [HttpResponseError]. const HttpResponseError({ - required this.statusCode, + this.request, + this.response, }); - /// The HTTP status code. - final int statusCode; + /// The associated request. + final WebResourceRequest? request; + + /// The associated response. + final WebResourceResponse? response; } diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_request.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_request.dart new file mode 100644 index 000000000000..18ba83badbe1 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_request.dart @@ -0,0 +1,43 @@ +// 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 'package:flutter/foundation.dart'; + +/// Defines the parameters of the web resource request from the associated request. +/// +/// Platform specific implementations can add additional fields by extending +/// this class. +/// +/// This example demonstrates how to extend the [WebResourceRequest] to +/// provide additional platform specific parameters. +/// +/// When extending [WebResourceRequest] additional parameters should always +/// accept `null` or have a default value to prevent breaking changes. +/// +/// ```dart +/// class AndroidWebResourceRequest extends WebResourceRequest { +/// WebResourceRequest._({ +/// required WebResourceRequest request, +/// }) : super( +/// uri: request.uri, +/// ); +/// +/// factory AndroidWebResourceRequest.fromWebResourceRequest( +/// WebResourceRequest request, { +/// Map headers, +/// }) { +/// return AndroidWebResourceRequest._(request, headers: headers); +/// } +/// +/// final Map headers; +/// } +/// ``` +@immutable +class WebResourceRequest { + /// Used by the platform implementation to create a new [WebResourceRequest]. + const WebResourceRequest({required this.uri}); + + /// URI for the request. + final Uri uri; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_response.dart b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_response.dart new file mode 100644 index 000000000000..6f8b5285e276 --- /dev/null +++ b/packages/webview_flutter/webview_flutter_platform_interface/lib/src/types/web_resource_response.dart @@ -0,0 +1,55 @@ +// 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 'package:flutter/foundation.dart'; + +/// Contains information about the response for a request. +/// +/// Platform specific implementations can add additional fields by extending +/// this class. +/// +/// This example demonstrates how to extend the [WebResourceResponse] to +/// provide additional platform specific parameters. +/// +/// When extending [WebResourceResponse] additional parameters should always +/// accept `null` or have a default value to prevent breaking changes. +/// +/// ```dart +/// class AndroidWebResourceResponse extends WebResourceResponse { +/// WebResourceResponse._({ +/// required WebResourceResponse response, +/// }) : super( +/// uri: response.uri, +/// statusCode: response.statusCode, +/// headers: response.headers, +/// ); +/// +/// factory AndroidWebResourceResponse.fromWebResourceResponse( +/// WebResourceResponse response, { +/// Uri? historyUrl, +/// }) { +/// return AndroidWebResourceResponse._(response, historyUrl: historyUrl); +/// } +/// +/// final Uri? historyUrl; +/// } +/// ``` +@immutable +class WebResourceResponse { + /// Used by the platform implementation to create a new [WebResourceResponse]. + const WebResourceResponse({ + required this.uri, + required this.statusCode, + this.headers = const {}, + }); + + /// The URI that this response is associated with. + final String? uri; + + /// The HTTP status code. + final int statusCode; + + /// Headers for the request. + final Map headers; +} diff --git a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml index 774da3ce458c..1a900c2b4d42 100644 --- a/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/webview_flutt issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview_flutter%22 # NOTE: We strongly prefer non-breaking changes, even at the expense of a # less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes -version: 2.8.0 +version: 2.9.0 environment: sdk: ">=3.0.0 <4.0.0"