[web] Fix url strategy null safety (#79888)

This commit is contained in:
Mouad Debbar 2021-04-06 17:59:03 -07:00 committed by GitHub
parent eb9a2f0ca5
commit 458f6f4513
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 16 deletions

View File

@ -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.
///

View File

@ -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);
}

View File

@ -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) {