| // Copyright 2014 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 'url_strategy.dart'; |
| |
| /// Function type that handles pop state events. |
| typedef EventListener = dynamic Function(Object event); |
| |
| /// Encapsulates all calls to DOM apis, which allows the [UrlStrategy] classes |
| /// to be platform agnostic and testable. |
| /// |
| /// For convenience, the [PlatformLocation] class can be used by implementations |
| /// of [UrlStrategy] to interact with DOM apis like pushState, popState, etc. |
| abstract interface class PlatformLocation { |
| /// Registers an event listener for the `popstate` event. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate |
| void addPopStateListener(EventListener fn); |
| |
| /// Unregisters the given listener (added by [addPopStateListener]) from the |
| /// `popstate` event. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate |
| void removePopStateListener(EventListener fn); |
| |
| /// The `pathname` part of the URL in the browser address bar. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/Location/pathname |
| String get pathname; |
| |
| /// The `query` part of the URL in the browser address bar. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/Location/search |
| String get search; |
| |
| /// The `hash` part of the URL in the browser address bar. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/Location/hash |
| String get hash; |
| |
| /// The `state` in the current history entry. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/state |
| Object? get state; |
| |
| /// 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); |
| |
| /// 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); |
| |
| /// Moves forwards or backwards through the history stack. |
| /// |
| /// A negative [count] value causes a backward move in the history stack. And |
| /// a positive [count] value causes a forward move. |
| /// |
| /// Examples: |
| /// |
| /// * `go(-2)` moves back 2 steps in history. |
| /// * `go(3)` moves forward 3 steps in history. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/API/History/go |
| void go(int count); |
| |
| /// The base href where the Flutter app is being served. |
| /// |
| /// See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base |
| String? getBaseHref(); |
| } |
| |
| /// Delegates to real browser APIs to provide platform location functionality. |
| class BrowserPlatformLocation implements PlatformLocation { |
| @override |
| void addPopStateListener(EventListener fn) { |
| // No-op. |
| } |
| |
| @override |
| void removePopStateListener(EventListener fn) { |
| // No-op. |
| } |
| |
| @override |
| String get pathname => ''; |
| |
| @override |
| String get search => ''; |
| |
| @override |
| String get hash => ''; |
| |
| @override |
| Object? get state => null; |
| |
| @override |
| void pushState(Object? state, String title, String url) { |
| // No-op. |
| } |
| |
| @override |
| void replaceState(Object? state, String title, String url) { |
| // No-op. |
| } |
| |
| @override |
| void go(int count) { |
| // No-op. |
| } |
| |
| @override |
| String? getBaseHref() => null; |
| } |