Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
19804929
Unverified
Commit
19804929
authored
Nov 02, 2021
by
Mouad Debbar
Committed by
GitHub
Nov 02, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[web] Allow the usage of url strategies without conditional imports (#77103)
parent
aed9f928
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
249 additions
and
122 deletions
+249
-122
flutter_web_plugins.dart
packages/flutter_web_plugins/lib/flutter_web_plugins.dart
+1
-0
js_url_strategy.dart
...utter_web_plugins/lib/src/navigation/js_url_strategy.dart
+2
-2
url_strategy.dart
.../flutter_web_plugins/lib/src/navigation/url_strategy.dart
+5
-118
url_strategy.dart
...r_web_plugins/lib/src/navigation_common/url_strategy.dart
+130
-0
url_strategy.dart
..._web_plugins/lib/src/navigation_non_web/url_strategy.dart
+103
-0
url_strategy.dart
packages/flutter_web_plugins/lib/url_strategy.dart
+8
-0
url_strategy_test.dart
...lutter_web_plugins/test/navigation/url_strategy_test.dart
+0
-2
No files found.
packages/flutter_web_plugins/lib/flutter_web_plugins.dart
View file @
19804929
...
...
@@ -18,5 +18,6 @@ library flutter_web_plugins;
export
'src/navigation/js_url_strategy.dart'
;
export
'src/navigation/url_strategy.dart'
;
export
'src/navigation/utils.dart'
;
export
'src/navigation_common/url_strategy.dart'
;
export
'src/plugin_event_channel.dart'
;
export
'src/plugin_registry.dart'
;
packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart
View file @
19804929
...
...
@@ -16,7 +16,7 @@ import 'dart:ui' as ui;
import
'package:js/js.dart'
;
import
'package:meta/meta.dart'
;
import
'url_strategy.dart'
;
import
'
../navigation_common/
url_strategy.dart'
;
typedef
_JsSetUrlStrategy
=
void
Function
(
JsUrlStrategy
?);
...
...
@@ -33,7 +33,7 @@ typedef _PathGetter = String Function();
typedef
_StateGetter
=
Object
?
Function
();
typedef
_AddPopStateListener
=
ui
.
VoidCallback
Function
(
html
.
EventListener
);
typedef
_AddPopStateListener
=
ui
.
VoidCallback
Function
(
EventListener
);
typedef
_StringToString
=
String
Function
(
String
);
...
...
packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart
View file @
19804929
...
...
@@ -6,6 +6,7 @@ import 'dart:async';
import
'dart:html'
as
html
;
import
'dart:ui'
as
ui
;
import
'../navigation_common/url_strategy.dart'
;
import
'js_url_strategy.dart'
;
import
'utils.dart'
;
...
...
@@ -40,53 +41,9 @@ void setUrlStrategy(UrlStrategy? strategy) {
jsSetUrlStrategy
(
jsUrlStrategy
);
}
/// Represents and reads route state from the browser's URL.
///
/// By default, the [HashUrlStrategy] subclass is used if the app doesn't
/// specify one.
abstract
class
UrlStrategy
{
/// Abstract const constructor. This constructor enables subclasses to provide
/// const constructors so that they can be used in const expressions.
const
UrlStrategy
();
/// Adds a listener to the `popstate` event and returns a function that, when
/// invoked, removes the listener.
ui
.
VoidCallback
addPopStateListener
(
html
.
EventListener
fn
);
/// Returns the active path in the browser.
String
getPath
();
/// The state of the current browser history entry.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/state
Object
?
getState
();
/// Given a path that's internal to the app, create the external url that
/// will be used in the browser.
String
prepareExternalUrl
(
String
internalUrl
);
/// 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
);
/// 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
);
/// 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
Future
<
void
>
go
(
int
count
);
/// Use the [PathUrlStrategy] to handle the browser URL.
void
usePathUrlStrategy
(
)
{
setUrlStrategy
(
PathUrlStrategy
());
}
/// Uses the browser URL's [hash fragments](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)
...
...
@@ -114,7 +71,7 @@ class HashUrlStrategy extends UrlStrategy {
final
PlatformLocation
_platformLocation
;
@override
ui
.
VoidCallback
addPopStateListener
(
html
.
EventListener
fn
)
{
ui
.
VoidCallback
addPopStateListener
(
EventListener
fn
)
{
_platformLocation
.
addPopStateListener
(
fn
);
return
()
=>
_platformLocation
.
removePopStateListener
(
fn
);
}
...
...
@@ -221,76 +178,6 @@ class PathUrlStrategy extends HashUrlStrategy {
}
}
/// 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
class
PlatformLocation
{
/// Abstract const constructor. This constructor enables subclasses to provide
/// const constructors so that they can be used in const expressions.
const
PlatformLocation
();
/// Registers an event listener for the `popstate` event.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
void
addPopStateListener
(
html
.
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
(
html
.
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
extends
PlatformLocation
{
/// Default constructor for [BrowserPlatformLocation].
...
...
packages/flutter_web_plugins/lib/src/navigation_common/url_strategy.dart
0 → 100644
View file @
19804929
// 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
'dart:async'
;
import
'dart:ui'
as
ui
;
/// Signature of an html event listener.
///
/// We have to redefine it because non-web platforms can't import dart:html.
typedef
EventListener
=
dynamic
Function
(
Object
event
);
/// Represents and reads route state from the browser's URL.
///
/// By default, the [HashUrlStrategy] subclass is used if the app doesn't
/// specify one.
abstract
class
UrlStrategy
{
/// Abstract const constructor. This constructor enables subclasses to provide
/// const constructors so that they can be used in const expressions.
const
UrlStrategy
();
/// Adds a listener to the `popstate` event and returns a function that, when
/// invoked, removes the listener.
ui
.
VoidCallback
addPopStateListener
(
EventListener
fn
);
/// Returns the active path in the browser.
String
getPath
();
/// The state of the current browser history entry.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/History/state
Object
?
getState
();
/// Given a path that's internal to the app, create the external url that
/// will be used in the browser.
String
prepareExternalUrl
(
String
internalUrl
);
/// 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
);
/// 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
);
/// 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
Future
<
void
>
go
(
int
count
);
}
/// 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
class
PlatformLocation
{
/// Abstract const constructor. This constructor enables subclasses to provide
/// const constructors so that they can be used in const expressions.
const
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
();
}
packages/flutter_web_plugins/lib/src/navigation_non_web/url_strategy.dart
0 → 100644
View file @
19804929
// 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
'dart:async'
;
import
'dart:ui'
as
ui
;
import
'../navigation_common/url_strategy.dart'
;
/// Returns the present [UrlStrategy] for handling the browser URL.
///
/// In case null is returned, the browser integration has been manually
/// disabled by [setUrlStrategy].
UrlStrategy
?
get
urlStrategy
=>
null
;
/// Change the strategy to use for handling browser URL.
///
/// Setting this to null disables all integration with the browser history.
void
setUrlStrategy
(
UrlStrategy
?
strategy
)
{
// No-op in non-web platforms.
}
/// Use the [PathUrlStrategy] to handle the browser URL.
void
usePathUrlStrategy
(
)
{
// No-op in non-web platforms.
}
/// Uses the browser URL's [hash fragments](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)
/// to represent its state.
///
/// By default, this class is used as the URL strategy for the app. However,
/// this class is still useful for apps that want to extend it.
///
/// In order to use [HashUrlStrategy] for an app, it needs to be set like this:
///
/// ```dart
/// import 'package:flutter_web_plugins/flutter_web_plugins.dart';
///
/// // Somewhere before calling `runApp()` do:
/// setUrlStrategy(const HashUrlStrategy());
/// ```
class
HashUrlStrategy
extends
UrlStrategy
{
/// Creates an instance of [HashUrlStrategy].
///
/// The [PlatformLocation] parameter is useful for testing to mock out browser
/// interations.
const
HashUrlStrategy
([
PlatformLocation
?
_
]);
@override
ui
.
VoidCallback
addPopStateListener
(
EventListener
fn
)
{
// No-op.
return
()
{};
}
@override
String
getPath
()
=>
''
;
@override
Object
?
getState
()
=>
null
;
@override
String
prepareExternalUrl
(
String
internalUrl
)
=>
''
;
@override
void
pushState
(
Object
?
state
,
String
title
,
String
url
)
{
// No-op.
}
@override
void
replaceState
(
Object
?
state
,
String
title
,
String
url
)
{
// No-op.
}
@override
Future
<
void
>
go
(
int
count
)
async
{
// No-op.
}
}
/// Uses the browser URL's pathname to represent Flutter's route name.
///
/// In order to use [PathUrlStrategy] for an app, it needs to be set like this:
///
/// ```dart
/// import 'package:flutter_web_plugins/flutter_web_plugins.dart';
///
/// // Somewhere before calling `runApp()` do:
/// setUrlStrategy(PathUrlStrategy());
/// ```
class
PathUrlStrategy
extends
HashUrlStrategy
{
/// Creates an instance of [PathUrlStrategy].
///
/// The [PlatformLocation] parameter is useful for testing to mock out browser
/// interations.
PathUrlStrategy
([
PlatformLocation
?
_platformLocation
])
:
super
(
_platformLocation
);
@override
String
getPath
()
=>
''
;
@override
String
prepareExternalUrl
(
String
internalUrl
)
=>
''
;
}
packages/flutter_web_plugins/lib/url_strategy.dart
0 → 100644
View file @
19804929
// 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.
export
'src/navigation_common/url_strategy.dart'
;
export
'src/navigation_non_web/url_strategy.dart'
if
(
dart
.
library
.
html
)
'src/navigation/url_strategy.dart'
;
packages/flutter_web_plugins/test/navigation/url_strategy_test.dart
View file @
19804929
...
...
@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:html'
;
@TestOn
(
'chrome'
)
// Uses web-only Flutter SDK
import
'package:flutter_test/flutter_test.dart'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment