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
6e84a142
Unverified
Commit
6e84a142
authored
Nov 14, 2020
by
Jonah Williams
Committed by
GitHub
Nov 14, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Simplify the flutter_web_plugins plugin registration API. (#70337)" (#70505)
This reverts commit
8749d955
.
parent
d5b1cc5b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
89 additions
and
152 deletions
+89
-152
web.dart
packages/flutter_tools/lib/src/build_system/targets/web.dart
+1
-1
resident_web_runner.dart
...s/flutter_tools/lib/src/isolated/resident_web_runner.dart
+1
-1
plugins.dart
packages/flutter_tools/lib/src/plugins.dart
+5
-8
projectName_web.dart.tmpl
...tter_tools/templates/plugin/lib/projectName_web.dart.tmpl
+1
-1
web_test.dart
...ols/test/general.shard/build_system/targets/web_test.dart
+4
-4
flutter_web_plugins.dart
packages/flutter_web_plugins/lib/flutter_web_plugins.dart
+0
-2
utils.dart
packages/flutter_web_plugins/lib/src/navigation/utils.dart
+1
-0
plugin_registry.dart
packages/flutter_web_plugins/lib/src/plugin_registry.dart
+76
-135
No files found.
packages/flutter_tools/lib/src/build_system/targets/web.dart
View file @
6e84a142
...
...
@@ -132,7 +132,7 @@ import '$generatedImport';
import '
$mainImport
' as entrypoint;
Future<void> main() async {
registerPlugins(webPluginRegistr
ar
);
registerPlugins(webPluginRegistr
y
);
await ui.webOnlyInitializePlatform();
entrypoint.main();
}
...
...
packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
View file @
6e84a142
...
...
@@ -691,7 +691,7 @@ class _ResidentWebRunner extends ResidentWebRunner {
'typedef _NullaryFunction = dynamic Function();'
,
'Future<void> main() async {'
,
if
(
hasWebPlugins
)
' registerPlugins(webPluginRegistr
ar
);'
,
' registerPlugins(webPluginRegistr
y
);'
,
' await ui.webOnlyInitializePlatform();'
,
' if (entrypoint.main is _UnaryFunction) {'
,
' return (entrypoint.main as _UnaryFunction)(<String>[]);'
,
...
...
packages/flutter_tools/lib/src/plugins.dart
View file @
6e84a142
...
...
@@ -779,7 +779,8 @@ const String _dartPluginRegistryTemplate = '''
// Generated file. Do not edit.
//
import
'dart:ui'
as
ui
;
// ignore: unused_import
import
'dart:ui'
;
{{
#plugins
}}
import
'package:{{name}}/{{file}}'
;
...
...
@@ -788,15 +789,11 @@ import 'package:{{name}}/{{file}}';
import
'package:flutter_web_plugins/flutter_web_plugins.dart'
;
// ignore: public_member_api_docs
void
registerPlugins
(
Registrar
registrar
)
{
void
registerPlugins
(
PluginRegistry
registry
)
{
{{
#plugins
}}
{{
class
}}.
registerWith
(
registr
ar
);
{{
class
}}.
registerWith
(
registr
y
.
registrarFor
({{
class
}})
);
{{/
plugins
}}
// The function below is only defined in the web version of dart:ui,
// but the analyzer uses the VM version, so we have to explicitly
// tell the analyzer to ignore it here.
// ignore: undefined_function
ui
.
webOnlySetPluginHandler
(
registrar
.
handleFrameworkMessage
);
registry
.
registerMessageHandler
();
}
''';
...
...
packages/flutter_tools/templates/plugin/lib/projectName_web.dart.tmpl
View file @
6e84a142
...
...
@@ -14,7 +14,7 @@ class {{pluginDartClass}}Web {
final MethodChannel channel = MethodChannel(
'{{projectName}}',
const StandardMethodCodec(),
registrar,
registrar
.messenger
,
);
final pluginInstance = {{pluginDartClass}}Web();
...
...
packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart
View file @
6e84a142
...
...
@@ -83,7 +83,7 @@ void main() {
// Plugins
expect
(
generated
,
contains
(
"import 'package:foo/generated_plugin_registrant.dart';"
));
expect
(
generated
,
contains
(
'registerPlugins(webPluginRegistr
ar
);'
));
expect
(
generated
,
contains
(
'registerPlugins(webPluginRegistr
y
);'
));
// Main
expect
(
generated
,
contains
(
'entrypoint.main();'
));
...
...
@@ -185,7 +185,7 @@ void main() {
// Plugins
expect
(
generated
,
contains
(
"import 'package:foo/generated_plugin_registrant.dart';"
));
expect
(
generated
,
contains
(
'registerPlugins(webPluginRegistr
ar
);'
));
expect
(
generated
,
contains
(
'registerPlugins(webPluginRegistr
y
);'
));
// Main
expect
(
generated
,
contains
(
'entrypoint.main();'
));
...
...
@@ -208,7 +208,7 @@ void main() {
// Plugins
expect
(
generated
,
isNot
(
contains
(
"import 'package:foo/generated_plugin_registrant.dart';"
)));
expect
(
generated
,
isNot
(
contains
(
'registerPlugins(webPluginRegistr
ar
);'
)));
expect
(
generated
,
isNot
(
contains
(
'registerPlugins(webPluginRegistr
y
);'
)));
// Main
expect
(
generated
,
contains
(
'entrypoint.main();'
));
}));
...
...
@@ -253,7 +253,7 @@ void main() {
// Plugins
expect
(
generated
,
isNot
(
contains
(
"import 'package:foo/generated_plugin_registrant.dart';"
)));
expect
(
generated
,
isNot
(
contains
(
'registerPlugins(webPluginRegistr
ar
);'
)));
expect
(
generated
,
isNot
(
contains
(
'registerPlugins(webPluginRegistr
y
);'
)));
// Main
expect
(
generated
,
contains
(
'entrypoint.main();'
));
...
...
packages/flutter_web_plugins/lib/flutter_web_plugins.dart
View file @
6e84a142
...
...
@@ -15,8 +15,6 @@
/// describing how the `url_launcher` package was created using [flutter_web_plugins].
library
flutter_web_plugins
;
export
'src/navigation/js_url_strategy.dart'
;
export
'src/navigation/url_strategy.dart'
;
export
'src/navigation/utils.dart'
;
export
'src/plugin_event_channel.dart'
;
export
'src/plugin_registry.dart'
;
packages/flutter_web_plugins/lib/src/navigation/utils.dart
View file @
6e84a142
...
...
@@ -4,6 +4,7 @@
import
'dart:html'
;
// TODO(mdebbar): Use the `URI` class instead?
final
AnchorElement
_urlParsingNode
=
AnchorElement
();
/// Extracts the pathname part of a full [url].
...
...
packages/flutter_web_plugins/lib/src/plugin_registry.dart
View file @
6e84a142
...
...
@@ -8,106 +8,93 @@ import 'dart:ui' as ui;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/services.dart'
;
/// A registrar for Flutter plugins implemented in Dart.
///
/// Plugins for the web platform are implemented in Dart and are
/// registered with this class by code generated by the `flutter` tool
/// when compiling the application.
///
/// This class implements [BinaryMessenger] to route messages from the
/// framework to registered plugins.
///
/// Use this [BinaryMessenger] when creating platform channels in order for
/// them to receive messages from the platform side. For example:
// TODO(hterkelsen): Why is this _MessageHandler duplicated here?
typedef
_MessageHandler
=
Future
<
ByteData
?>?
Function
(
ByteData
?);
/// This class registers web platform plugins.
///
///
```dart
/// class MyPlugin
{
/// static void registerWith(Registrar registrar) {
/// final MethodChannel channel = MethodChannel(
/// 'com.my_plugin/my_plugin',
/// const StandardMethodCodec(),
/// registrar, // the registrar is used as the BinaryMessenger
/// );
/// final MyPlugin instance = MyPlugin()
;
/// channel.setMethodCallHandler(instance.handleMethodCall);
/// }
/// // ...
/// }
/// ```
class
Registrar
extends
BinaryMessenger
{
///
Creates a [Registrar]
.
///
An instance of this class is available as [webPluginRegistry].
class
PluginRegistry
{
/// Creates a plugin registry.
///
/// The argument selects the [BinaryMessenger] to use. An
/// appropriate value would be [pluginBinaryMessenger].
PluginRegistry
(
this
.
_binaryMessenger
);
final
BinaryMessenger
_binaryMessenger
;
/// Creates a registrar for the given plugin implementation class.
Registrar
registrarFor
(
Type
key
)
=>
Registrar
(
_binaryMessenger
);
/// Registers this plugin handler with the engine, so that unrecognized
/// platform messages are forwarded to the registry, where they can be
///
correctly dispatched to one of the registered plugins
.
///
/// The argument is ignored. To create a test [Registrar] with custom behavior,
/// subclass the [Registrar] class and override methods as appropriate.
Registrar
([
@Deprecated
(
'This argument is ignored. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
BinaryMessenger
?
binaryMessenger
,
]);
/// Registers the registrar's message handler
/// ([handlePlatformMessage]) with the engine, so that plugin
/// messages are correctly dispatched to the relevant registered
/// plugin.
/// Code generated by the `flutter` tool automatically calls this method
/// for the global [webPluginRegistry] at startup.
///
/// Only one handler can be registered at a time. Calling this
/// method a second time silently unregisters any
/// previously-registered handler and replaces it with the handler
/// from this object.
/// Only one [PluginRegistry] can be registered at a time. Calling this
/// method a second time silently unregisters the first [PluginRegistry]
/// and replaces it with the new one.
///
/// This method uses a function called `webOnlySetPluginHandler` in
/// the [dart:ui] library. That function is only available when
/// compiling for the web.
@Deprecated
(
'This method is no longer used by the tool; ui.webOnlySetPluginHandler is called directly. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
void
registerMessageHandler
()
{
// The function below is only defined in the Web dart:ui.
// ignore: undefined_function
ui
.
webOnlySetPluginHandler
(
handleFramework
Message
);
ui
.
webOnlySetPluginHandler
(
_binaryMessenger
.
handlePlatform
Message
);
}
}
/// Receives a platform message from the framework.
///
/// This method has been replaced with the more clearly-named [handleFrameworkMessage].
@Deprecated
(
'Use handleFrameworkMessage instead. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
@override
Future
<
void
>
handlePlatformMessage
(
String
channel
,
ByteData
?
data
,
ui
.
PlatformMessageResponseCallback
?
callback
,
)
=>
handleFrameworkMessage
(
channel
,
data
,
callback
);
/// Message handler for web plugins.
///
/// This method is called when handling messages from the framework.
///
/// If a handler has been registered for the given `channel`, it is
/// invoked, and the value it returns is passed to `callback` (if that
/// is non-null). Then, the method's future is completed.
///
/// If no handler has been registered for that channel, then the
/// callback (if any) is invoked with null, then the method's future
/// is completed.
///
/// Messages are not buffered (unlike platform messages headed to
/// the framework, which are managed by [ChannelBuffers]).
/// A registrar for a particular plugin.
///
/// Gives access to a [BinaryMessenger] which has been configured to receive
/// platform messages from the framework side.
class
Registrar
{
/// Creates a registrar with the given [BinaryMessenger].
Registrar
(
this
.
messenger
);
/// A [BinaryMessenger] configured to receive platform messages from the
/// framework side.
///
/// This method is registered as the message handler by code
/// autogenerated by the `flutter` tool when the application is
/// compiled, if any web plugins are used. The code in question is
/// the following:
/// Use this [BinaryMessenger] when creating platform channels in order for
/// them to receive messages from the platform side. For example:
///
/// ```dart
/// ui.webOnlySetPluginHandler(webPluginRegistrar.handleFrameworkMessage);
/// class MyPlugin {
/// static void registerWith(Registrar registrar) {
/// final MethodChannel channel = MethodChannel(
/// 'com.my_plugin/my_plugin',
/// const StandardMethodCodec(),
/// registrar.messenger,
/// );
/// final MyPlugin instance = MyPlugin();
/// channel.setMethodCallHandler(instance.handleMethodCall);
/// }
/// // ...
/// }
/// ```
Future
<
void
>
handleFrameworkMessage
(
final
BinaryMessenger
messenger
;
}
/// The default plugin registry for the web.
///
/// Uses [pluginBinaryMessenger] as the [BinaryMessenger].
final
PluginRegistry
webPluginRegistry
=
PluginRegistry
(
pluginBinaryMessenger
);
/// A [BinaryMessenger] which does the inverse of the default framework
/// messenger.
///
/// Instead of sending messages from the framework to the engine, this
/// receives messages from the framework and dispatches them to registered
/// plugins.
class
_PlatformBinaryMessenger
extends
BinaryMessenger
{
final
Map
<
String
,
_MessageHandler
>
_handlers
=
<
String
,
_MessageHandler
>{};
/// Receives a platform message from the framework.
@override
Future
<
void
>
handlePlatformMessage
(
String
channel
,
ByteData
?
data
,
ui
.
PlatformMessageResponseCallback
?
callback
,
...
...
@@ -132,15 +119,6 @@ class Registrar extends BinaryMessenger {
}
}
/// Returns `this`.
@Deprecated
(
'This property is redundant. It returns the object on which it is called. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
BinaryMessenger
get
messenger
=>
this
;
final
Map
<
String
,
MessageHandler
>
_handlers
=
<
String
,
MessageHandler
>{};
/// Sends a platform message from the platform side back to the framework.
@override
Future
<
ByteData
>
send
(
String
channel
,
ByteData
?
message
)
{
...
...
@@ -189,45 +167,8 @@ class Registrar extends BinaryMessenger {
}
}
/// This class was previously separate from [Registrar] but was merged into it
/// as part of a simplification of the web plugins API.
@Deprecated
(
'Use Registrar instead. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
class
PluginRegistry
extends
Registrar
{
/// Creates a [Registrar].
///
/// The argument is ignored.
PluginRegistry
([
@Deprecated
(
'This argument is ignored. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
BinaryMessenger
?
binaryMessenger
,
])
:
super
();
// ignore: avoid_unused_constructor_parameters
/// Returns `this`. The argument is ignored.
@Deprecated
(
'This method is redundant. It returns the object on which it is called. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
Registrar
registrarFor
(
Type
key
)
=>
this
;
}
/// The default plugin registrar for the web.
final
Registrar
webPluginRegistrar
=
PluginRegistry
();
/// A deprecated alias for [webPluginRegistrar].
@Deprecated
(
'Use webPluginRegistrar instead. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
PluginRegistry
get
webPluginRegistry
=>
webPluginRegistrar
as
PluginRegistry
;
/// A deprecated alias for [webPluginRegistrar].
@Deprecated
(
'Use webPluginRegistrar instead. '
'This feature was deprecated after v1.24.0-7.0.pre.'
)
BinaryMessenger
get
pluginBinaryMessenger
=>
webPluginRegistrar
;
/// The default [BinaryMessenger] for Flutter web plugins.
///
/// This is the value used for [webPluginRegistry]'s [PluginRegistry]
/// constructor argument.
final
BinaryMessenger
pluginBinaryMessenger
=
_PlatformBinaryMessenger
();
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