diff --git a/packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart b/packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart index 86621eb390..79084eeeb9 100644 --- a/packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart +++ b/packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart @@ -90,12 +90,12 @@ abstract class JsUrlStrategy { /// Push a new history entry. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState - external void pushState(Object state, String title, String url); + external void pushState(Object? state, String title, String url); /// Replace the currently active history entry. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState - external void replaceState(Object state, String title, String url); + external void replaceState(Object? state, String title, String url); /// Moves forwards or backwards through the history stack. /// diff --git a/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart b/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart index 59360cb595..d07c54fec9 100644 --- a/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart +++ b/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart @@ -48,12 +48,12 @@ abstract class UrlStrategy { /// Push a new history entry. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState - void pushState(Object state, String title, String url); + void pushState(Object? state, String title, String url); /// Replace the currently active history entry. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState - void replaceState(Object state, String title, String url); + void replaceState(Object? state, String title, String url); /// Moves forwards or backwards through the history stack. /// @@ -129,12 +129,12 @@ class HashUrlStrategy extends UrlStrategy { } @override - void pushState(Object state, String title, String url) { + void pushState(Object? state, String title, String url) { _platformLocation.pushState(state, title, prepareExternalUrl(url)); } @override - void replaceState(Object state, String title, String url) { + void replaceState(Object? state, String title, String url) { _platformLocation.replaceState(state, title, prepareExternalUrl(url)); } @@ -245,12 +245,12 @@ abstract class PlatformLocation { /// Adds a new entry to the browser history stack. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/pushState - void pushState(Object state, String title, String url); + void pushState(Object? state, String title, String url); /// Replaces the current entry in the browser history stack. /// /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState - void replaceState(Object state, String title, String url); + void replaceState(Object? state, String title, String url); /// Moves forwards or backwards through the history stack. /// @@ -310,12 +310,12 @@ class BrowserPlatformLocation extends PlatformLocation { Object? get state => _history.state; @override - void pushState(Object state, String title, String url) { + void pushState(Object? state, String title, String url) { _history.pushState(state, title, url); } @override - void replaceState(Object state, String title, String url) { + void replaceState(Object? state, String title, String url) { _history.replaceState(state, title, url); } diff --git a/packages/flutter_web_plugins/test/navigation/url_strategy_test.dart b/packages/flutter_web_plugins/test/navigation/url_strategy_test.dart index 7e0c6896a7..aa919d48cb 100644 --- a/packages/flutter_web_plugins/test/navigation/url_strategy_test.dart +++ b/packages/flutter_web_plugins/test/navigation/url_strategy_test.dart @@ -17,6 +17,12 @@ void main() { location = TestPlatformLocation(); }); + test('allows null state', () { + final HashUrlStrategy strategy = HashUrlStrategy(location); + expect(() => strategy.pushState(null, '', '/'), returnsNormally); + expect(() => strategy.replaceState(null, '', '/'), returnsNormally); + }); + test('leading slash is optional', () { final HashUrlStrategy strategy = HashUrlStrategy(location); @@ -48,6 +54,13 @@ void main() { location = TestPlatformLocation(); }); + test('allows null state', () { + location.baseHref = '/'; + final PathUrlStrategy strategy = PathUrlStrategy(location); + expect(() => strategy.pushState(null, '', '/'), returnsNormally); + expect(() => strategy.replaceState(null, '', '/'), returnsNormally); + }); + test('validates base href', () { location.baseHref = '/'; expect( @@ -159,14 +172,10 @@ class TestPlatformLocation extends PlatformLocation { } @override - void pushState(dynamic state, String title, String url) { - throw UnimplementedError(); - } + void pushState(Object? state, String title, String url) {} @override - void replaceState(dynamic state, String title, String url) { - throw UnimplementedError(); - } + void replaceState(Object? state, String title, String url) {} @override void go(int count) {