Unverified Commit 821602ae authored by Michael Klimushyn's avatar Michael Klimushyn Committed by GitHub

Revert "Moved the default BinaryMessenger instance to ServicesBinding (#37489)" (#37983)

This reverts commit 92ef2b9c.

This requires either runApp() or
WidgetsFlutterBinding.ensureInitialized() to have been called before
using any MethodChannels. Plugins broadly rely on MethodChannels and
right now there's no general requirements that they be constructed
within the runApp call, so the ecosystem breakages from this are broader
than originally thought. Reverting for now.
parent 77e15103
...@@ -11,6 +11,6 @@ void main() { ...@@ -11,6 +11,6 @@ void main() {
Ticker((Duration duration) { })..start(); Ticker((Duration duration) { })..start();
final ByteData message = const StringCodec().encodeMessage('AppLifecycleState.paused'); final ByteData message = const StringCodec().encodeMessage('AppLifecycleState.paused');
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', message, (_) {}); await defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', message, (_) {});
}); });
} }
...@@ -36,9 +36,9 @@ Future<String> respondToHostRequestForSplashLog(String _) { ...@@ -36,9 +36,9 @@ Future<String> respondToHostRequestForSplashLog(String _) {
void createTestChannelBetweenAndroidAndFlutter() { void createTestChannelBetweenAndroidAndFlutter() {
// Channel used for Android to send Flutter changes to the splash display. // Channel used for Android to send Flutter changes to the splash display.
const BasicMessageChannel<String> testChannel = BasicMessageChannel<String>( final BasicMessageChannel<String> testChannel = BasicMessageChannel<String>(
'testChannel', 'testChannel',
StringCodec() const StringCodec()
); );
// Every splash display change message that we receive from Android is either // Every splash display change message that we receive from Android is either
......
...@@ -25,8 +25,6 @@ const BasicMessageChannel<String> _kReloadChannel = ...@@ -25,8 +25,6 @@ const BasicMessageChannel<String> _kReloadChannel =
BasicMessageChannel<String>(_kReloadChannelName, StringCodec()); BasicMessageChannel<String>(_kReloadChannelName, StringCodec());
void main() { void main() {
// Ensures bindings are initialized before doing anything.
WidgetsFlutterBinding.ensureInitialized();
// Start listening immediately for messages from the iOS side. ObjC calls // Start listening immediately for messages from the iOS side. ObjC calls
// will be made to let us know when we should be changing the app state. // will be made to let us know when we should be changing the app state.
_kReloadChannel.setMessageHandler(run); _kReloadChannel.setMessageHandler(run);
......
...@@ -9,7 +9,7 @@ import 'dart:typed_data'; ...@@ -9,7 +9,7 @@ import 'dart:typed_data';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'binding.dart'; import 'binary_messenger.dart';
/// A collection of resources used by the application. /// A collection of resources used by the application.
/// ///
...@@ -212,12 +212,11 @@ abstract class CachingAssetBundle extends AssetBundle { ...@@ -212,12 +212,11 @@ abstract class CachingAssetBundle extends AssetBundle {
/// An [AssetBundle] that loads resources using platform messages. /// An [AssetBundle] that loads resources using platform messages.
class PlatformAssetBundle extends CachingAssetBundle { class PlatformAssetBundle extends CachingAssetBundle {
@override @override
Future<ByteData> load(String key) async { Future<ByteData> load(String key) async {
final Uint8List encoded = utf8.encoder.convert(Uri(path: Uri.encodeFull(key)).path); final Uint8List encoded = utf8.encoder.convert(Uri(path: Uri.encodeFull(key)).path);
final ByteData asset = final ByteData asset =
await ServicesBinding.instance.defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData()); await defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData());
if (asset == null) if (asset == null)
throw FlutterError('Unable to load asset: $key'); throw FlutterError('Unable to load asset: $key');
return asset; return asset;
......
...@@ -6,7 +6,7 @@ import 'dart:async'; ...@@ -6,7 +6,7 @@ import 'dart:async';
import 'dart:typed_data'; import 'dart:typed_data';
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'binding.dart'; import 'package:flutter/foundation.dart';
/// A function which takes a platform message and asynchronously returns an encoded response. /// A function which takes a platform message and asynchronously returns an encoded response.
typedef MessageHandler = Future<ByteData> Function(ByteData message); typedef MessageHandler = Future<ByteData> Function(ByteData message);
...@@ -56,14 +56,99 @@ abstract class BinaryMessenger { ...@@ -56,14 +56,99 @@ abstract class BinaryMessenger {
void setMockMessageHandler(String channel, Future<ByteData> handler(ByteData message)); void setMockMessageHandler(String channel, Future<ByteData> handler(ByteData message));
} }
/// The default instance of [BinaryMessenger]. /// The default implementation of [BinaryMessenger].
/// ///
/// This API has been deprecated in favor of [ServicesBinding.defaultBinaryMessenger]. /// This messenger sends messages from the app-side to the platform-side and
/// Please use [ServicesBinding.defaultBinaryMessenger] as the default /// dispatches incoming messages from the platform-side to the appropriate
/// instance of [BinaryMessenger]. /// handler.
class _DefaultBinaryMessenger extends BinaryMessenger {
const _DefaultBinaryMessenger._();
// Handlers for incoming messages from platform plugins.
// This is static so that this class can have a const constructor.
static final Map<String, MessageHandler> _handlers =
<String, MessageHandler>{};
// Mock handlers that intercept and respond to outgoing messages.
// This is static so that this class can have a const constructor.
static final Map<String, MessageHandler> _mockHandlers =
<String, MessageHandler>{};
Future<ByteData> _sendPlatformMessage(String channel, ByteData message) {
final Completer<ByteData> completer = Completer<ByteData>();
// ui.window is accessed directly instead of using ServicesBinding.instance.window
// because this method might be invoked before any binding is initialized.
// This issue was reported in #27541. It is not ideal to statically access
// ui.window because the Window may be dependency injected elsewhere with
// a different instance. However, static access at this location seems to be
// the least bad option.
ui.window.sendPlatformMessage(channel, message, (ByteData reply) {
try {
completer.complete(reply);
} catch (exception, stack) {
FlutterError.reportError(FlutterErrorDetails(
exception: exception,
stack: stack,
library: 'services library',
context: ErrorDescription('during a platform message response callback'),
));
}
});
return completer.future;
}
@override
Future<void> handlePlatformMessage(
String channel,
ByteData data,
ui.PlatformMessageResponseCallback callback,
) async {
ByteData response;
try {
final MessageHandler handler = _handlers[channel];
if (handler != null)
response = await handler(data);
} catch (exception, stack) {
FlutterError.reportError(FlutterErrorDetails(
exception: exception,
stack: stack,
library: 'services library',
context: ErrorDescription('during a platform message callback'),
));
} finally {
callback(response);
}
}
@override
Future<ByteData> send(String channel, ByteData message) {
final MessageHandler handler = _mockHandlers[channel];
if (handler != null)
return handler(message);
return _sendPlatformMessage(channel, message);
}
@override
void setMessageHandler(String channel, MessageHandler handler) {
if (handler == null)
_handlers.remove(channel);
else
_handlers[channel] = handler;
}
@override
void setMockMessageHandler(String channel, MessageHandler handler) {
if (handler == null)
_mockHandlers.remove(channel);
else
_mockHandlers[channel] = handler;
}
}
/// The default instance of [BinaryMessenger].
/// ///
/// This is used to send messages from the application to the platform, and /// This is used to send messages from the application to the platform, and
/// keeps track of which handlers have been registered on each channel so /// keeps track of which handlers have been registered on each channel so
/// it may dispatch incoming messages to the registered handler. /// it may dispatch incoming messages to the registered handler.
@Deprecated('Use ServicesBinding.instance.defaultBinaryMessenger instead.') const BinaryMessenger defaultBinaryMessenger = _DefaultBinaryMessenger._();
BinaryMessenger get defaultBinaryMessenger => ServicesBinding.instance.defaultBinaryMessenger;
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
// found in the LICENSE file. // found in the LICENSE file.
import 'dart:async'; import 'dart:async';
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
...@@ -22,7 +20,6 @@ mixin ServicesBinding on BindingBase { ...@@ -22,7 +20,6 @@ mixin ServicesBinding on BindingBase {
void initInstances() { void initInstances() {
super.initInstances(); super.initInstances();
_instance = this; _instance = this;
_defaultBinaryMessenger = createBinaryMessenger();
window window
..onPlatformMessage = defaultBinaryMessenger.handlePlatformMessage; ..onPlatformMessage = defaultBinaryMessenger.handlePlatformMessage;
initLicenses(); initLicenses();
...@@ -32,21 +29,6 @@ mixin ServicesBinding on BindingBase { ...@@ -32,21 +29,6 @@ mixin ServicesBinding on BindingBase {
static ServicesBinding get instance => _instance; static ServicesBinding get instance => _instance;
static ServicesBinding _instance; static ServicesBinding _instance;
/// The default instance of [BinaryMessenger].
///
/// This is used to send messages from the application to the platform, and
/// keeps track of which handlers have been registered on each channel so
/// it may dispatch incoming messages to the registered handler.
BinaryMessenger get defaultBinaryMessenger => _defaultBinaryMessenger;
BinaryMessenger _defaultBinaryMessenger;
/// Creates a default [BinaryMessenger] instance that can be used for sending
/// platform messages.
@protected
BinaryMessenger createBinaryMessenger() {
return const _DefaultBinaryMessenger._();
}
/// Adds relevant licenses to the [LicenseRegistry]. /// Adds relevant licenses to the [LicenseRegistry].
/// ///
/// By default, the [ServicesBinding]'s implementation of [initLicenses] adds /// By default, the [ServicesBinding]'s implementation of [initLicenses] adds
...@@ -135,92 +117,3 @@ mixin ServicesBinding on BindingBase { ...@@ -135,92 +117,3 @@ mixin ServicesBinding on BindingBase {
rootBundle.evict(asset); rootBundle.evict(asset);
} }
} }
/// The default implementation of [BinaryMessenger].
///
/// This messenger sends messages from the app-side to the platform-side and
/// dispatches incoming messages from the platform-side to the appropriate
/// handler.
class _DefaultBinaryMessenger extends BinaryMessenger {
const _DefaultBinaryMessenger._();
// Handlers for incoming messages from platform plugins.
// This is static so that this class can have a const constructor.
static final Map<String, MessageHandler> _handlers =
<String, MessageHandler>{};
// Mock handlers that intercept and respond to outgoing messages.
// This is static so that this class can have a const constructor.
static final Map<String, MessageHandler> _mockHandlers =
<String, MessageHandler>{};
Future<ByteData> _sendPlatformMessage(String channel, ByteData message) {
final Completer<ByteData> completer = Completer<ByteData>();
// ui.window is accessed directly instead of using ServicesBinding.instance.window
// because this method might be invoked before any binding is initialized.
// This issue was reported in #27541. It is not ideal to statically access
// ui.window because the Window may be dependency injected elsewhere with
// a different instance. However, static access at this location seems to be
// the least bad option.
ui.window.sendPlatformMessage(channel, message, (ByteData reply) {
try {
completer.complete(reply);
} catch (exception, stack) {
FlutterError.reportError(FlutterErrorDetails(
exception: exception,
stack: stack,
library: 'services library',
context: ErrorDescription('during a platform message response callback'),
));
}
});
return completer.future;
}
@override
Future<void> handlePlatformMessage(
String channel,
ByteData data,
ui.PlatformMessageResponseCallback callback,
) async {
ByteData response;
try {
final MessageHandler handler = _handlers[channel];
if (handler != null)
response = await handler(data);
} catch (exception, stack) {
FlutterError.reportError(FlutterErrorDetails(
exception: exception,
stack: stack,
library: 'services library',
context: ErrorDescription('during a platform message callback'),
));
} finally {
callback(response);
}
}
@override
Future<ByteData> send(String channel, ByteData message) {
final MessageHandler handler = _mockHandlers[channel];
if (handler != null)
return handler(message);
return _sendPlatformMessage(channel, message);
}
@override
void setMessageHandler(String channel, MessageHandler handler) {
if (handler == null)
_handlers.remove(channel);
else
_handlers[channel] = handler;
}
@override
void setMockMessageHandler(String channel, MessageHandler handler) {
if (handler == null)
_mockHandlers.remove(channel);
else
_mockHandlers[channel] = handler;
}
}
...@@ -8,7 +8,6 @@ import 'dart:typed_data'; ...@@ -8,7 +8,6 @@ import 'dart:typed_data';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'binary_messenger.dart'; import 'binary_messenger.dart';
import 'binding.dart';
import 'message_codec.dart'; import 'message_codec.dart';
import 'message_codecs.dart'; import 'message_codecs.dart';
...@@ -32,12 +31,11 @@ import 'message_codecs.dart'; ...@@ -32,12 +31,11 @@ import 'message_codecs.dart';
class BasicMessageChannel<T> { class BasicMessageChannel<T> {
/// Creates a [BasicMessageChannel] with the specified [name], [codec] and [binaryMessenger]. /// Creates a [BasicMessageChannel] with the specified [name], [codec] and [binaryMessenger].
/// ///
/// The [name] and [codec] arguments cannot be null. The default [ServicesBinding.defaultBinaryMessenger] /// None of [name], [codec], or [binaryMessenger] may be null.
/// instance is used if [binaryMessenger] is null. const BasicMessageChannel(this.name, this.codec, { this.binaryMessenger = defaultBinaryMessenger })
const BasicMessageChannel(this.name, this.codec, { BinaryMessenger binaryMessenger }) : assert(name != null),
: assert(name != null), assert(codec != null),
assert(codec != null), assert(binaryMessenger != null);
_binaryMessenger = binaryMessenger;
/// The logical channel on which communication happens, not null. /// The logical channel on which communication happens, not null.
final String name; final String name;
...@@ -46,8 +44,7 @@ class BasicMessageChannel<T> { ...@@ -46,8 +44,7 @@ class BasicMessageChannel<T> {
final MessageCodec<T> codec; final MessageCodec<T> codec;
/// The messenger which sends the bytes for this channel, not null. /// The messenger which sends the bytes for this channel, not null.
BinaryMessenger get binaryMessenger => _binaryMessenger ?? ServicesBinding.instance.defaultBinaryMessenger; final BinaryMessenger binaryMessenger;
final BinaryMessenger _binaryMessenger;
/// Sends the specified [message] to the platform plugins on this channel. /// Sends the specified [message] to the platform plugins on this channel.
/// ///
...@@ -121,12 +118,11 @@ class MethodChannel { ...@@ -121,12 +118,11 @@ class MethodChannel {
/// The [codec] used will be [StandardMethodCodec], unless otherwise /// The [codec] used will be [StandardMethodCodec], unless otherwise
/// specified. /// specified.
/// ///
/// The [name] and [codec] arguments cannot be null. The default [ServicesBinding.defaultBinaryMessenger] /// None of [name], [binaryMessenger], or [codec] may be null.
/// instance is used if [binaryMessenger] is null. const MethodChannel(this.name, [this.codec = const StandardMethodCodec(), this.binaryMessenger = defaultBinaryMessenger ])
const MethodChannel(this.name, [this.codec = const StandardMethodCodec(), BinaryMessenger binaryMessenger ]) : assert(name != null),
: assert(name != null), assert(binaryMessenger != null),
assert(codec != null), assert(codec != null);
_binaryMessenger = binaryMessenger;
/// The logical channel on which communication happens, not null. /// The logical channel on which communication happens, not null.
final String name; final String name;
...@@ -134,9 +130,10 @@ class MethodChannel { ...@@ -134,9 +130,10 @@ class MethodChannel {
/// The message codec used by this channel, not null. /// The message codec used by this channel, not null.
final MethodCodec codec; final MethodCodec codec;
/// The messenger used by this channel to send platform messages, not null. /// The messenger used by this channel to send platform messages.
BinaryMessenger get binaryMessenger => _binaryMessenger ?? ServicesBinding.instance.defaultBinaryMessenger; ///
final BinaryMessenger _binaryMessenger; /// The messenger may not be null.
final BinaryMessenger binaryMessenger;
/// Invokes a [method] on this channel with the specified [arguments]. /// Invokes a [method] on this channel with the specified [arguments].
/// ///
...@@ -465,12 +462,8 @@ class EventChannel { ...@@ -465,12 +462,8 @@ class EventChannel {
/// The [codec] used will be [StandardMethodCodec], unless otherwise /// The [codec] used will be [StandardMethodCodec], unless otherwise
/// specified. /// specified.
/// ///
/// Neither [name] nor [codec] may be null. The default [ServicesBinding.defaultBinaryMessenger] /// Neither [name] nor [codec] may be null.
/// instance is used if [binaryMessenger] is null. const EventChannel(this.name, [this.codec = const StandardMethodCodec()]);
const EventChannel(this.name, [this.codec = const StandardMethodCodec(), BinaryMessenger binaryMessenger])
: assert(name != null),
assert(codec != null),
_binaryMessenger = binaryMessenger;
/// The logical channel on which communication happens, not null. /// The logical channel on which communication happens, not null.
final String name; final String name;
...@@ -478,10 +471,6 @@ class EventChannel { ...@@ -478,10 +471,6 @@ class EventChannel {
/// The message codec used by this channel, not null. /// The message codec used by this channel, not null.
final MethodCodec codec; final MethodCodec codec;
/// The messenger used by this channel to send platform messages, not null.
BinaryMessenger get binaryMessenger => _binaryMessenger ?? ServicesBinding.instance.defaultBinaryMessenger;
final BinaryMessenger _binaryMessenger;
/// Sets up a broadcast stream for receiving events on this channel. /// Sets up a broadcast stream for receiving events on this channel.
/// ///
/// Returns a broadcast [Stream] which emits events to listeners as follows: /// Returns a broadcast [Stream] which emits events to listeners as follows:
...@@ -499,7 +488,7 @@ class EventChannel { ...@@ -499,7 +488,7 @@ class EventChannel {
final MethodChannel methodChannel = MethodChannel(name, codec); final MethodChannel methodChannel = MethodChannel(name, codec);
StreamController<dynamic> controller; StreamController<dynamic> controller;
controller = StreamController<dynamic>.broadcast(onListen: () async { controller = StreamController<dynamic>.broadcast(onListen: () async {
binaryMessenger.setMessageHandler(name, (ByteData reply) async { defaultBinaryMessenger.setMessageHandler(name, (ByteData reply) async {
if (reply == null) { if (reply == null) {
controller.close(); controller.close();
} else { } else {
...@@ -522,7 +511,7 @@ class EventChannel { ...@@ -522,7 +511,7 @@ class EventChannel {
)); ));
} }
}, onCancel: () async { }, onCancel: () async {
binaryMessenger.setMessageHandler(name, null); defaultBinaryMessenger.setMessageHandler(name, null);
try { try {
await methodChannel.invokeMethod<void>('cancel', arguments); await methodChannel.invokeMethod<void>('cancel', arguments);
} catch (exception, stack) { } catch (exception, stack) {
......
...@@ -31,9 +31,6 @@ import 'platform_channel.dart'; ...@@ -31,9 +31,6 @@ import 'platform_channel.dart';
class BinaryMessages { class BinaryMessages {
BinaryMessages._(); BinaryMessages._();
/// The messenger which sends the platform messages, not null.
static final BinaryMessenger _binaryMessenger = ServicesBinding.instance.defaultBinaryMessenger;
/// Calls the handler registered for the given channel. /// Calls the handler registered for the given channel.
/// ///
/// Typically called by [ServicesBinding] to handle platform messages received /// Typically called by [ServicesBinding] to handle platform messages received
...@@ -46,7 +43,7 @@ class BinaryMessages { ...@@ -46,7 +43,7 @@ class BinaryMessages {
ByteData data, ByteData data,
ui.PlatformMessageResponseCallback callback, ui.PlatformMessageResponseCallback callback,
) { ) {
return _binaryMessenger.handlePlatformMessage(channel, data, callback); return defaultBinaryMessenger.handlePlatformMessage(channel, data, callback);
} }
/// Send a binary message to the platform plugins on the given channel. /// Send a binary message to the platform plugins on the given channel.
...@@ -55,7 +52,7 @@ class BinaryMessages { ...@@ -55,7 +52,7 @@ class BinaryMessages {
/// binary form. /// binary form.
@Deprecated('Use defaultBinaryMessenger.send instead.') @Deprecated('Use defaultBinaryMessenger.send instead.')
static Future<ByteData> send(String channel, ByteData message) { static Future<ByteData> send(String channel, ByteData message) {
return _binaryMessenger.send(channel, message); return defaultBinaryMessenger.send(channel, message);
} }
/// Set a callback for receiving messages from the platform plugins on the /// Set a callback for receiving messages from the platform plugins on the
...@@ -68,7 +65,7 @@ class BinaryMessages { ...@@ -68,7 +65,7 @@ class BinaryMessages {
/// The handler's return value, if non-null, is sent as a response, unencoded. /// The handler's return value, if non-null, is sent as a response, unencoded.
@Deprecated('Use defaultBinaryMessenger.setMessageHandler instead.') @Deprecated('Use defaultBinaryMessenger.setMessageHandler instead.')
static void setMessageHandler(String channel, Future<ByteData> handler(ByteData message)) { static void setMessageHandler(String channel, Future<ByteData> handler(ByteData message)) {
_binaryMessenger.setMessageHandler(channel, handler); defaultBinaryMessenger.setMessageHandler(channel, handler);
} }
/// Set a mock callback for intercepting messages from the `send*` methods on /// Set a mock callback for intercepting messages from the `send*` methods on
...@@ -84,6 +81,6 @@ class BinaryMessages { ...@@ -84,6 +81,6 @@ class BinaryMessages {
/// sent to platform plugins. /// sent to platform plugins.
@Deprecated('Use defaultBinaryMessenger.setMockMessageHandler instead.') @Deprecated('Use defaultBinaryMessenger.setMockMessageHandler instead.')
static void setMockMessageHandler(String channel, Future<ByteData> handler(ByteData message)) { static void setMockMessageHandler(String channel, Future<ByteData> handler(ByteData message)) {
_binaryMessenger.setMockMessageHandler(channel, handler); defaultBinaryMessenger.setMockMessageHandler(channel, handler);
} }
} }
...@@ -251,10 +251,6 @@ mixin WidgetsBinding on BindingBase, SchedulerBinding, GestureBinding, RendererB ...@@ -251,10 +251,6 @@ mixin WidgetsBinding on BindingBase, SchedulerBinding, GestureBinding, RendererB
void initInstances() { void initInstances() {
super.initInstances(); super.initInstances();
_instance = this; _instance = this;
// Initialization of [_buildOwner] has to be done after
// [super.initInstances] is called, as it requires [ServicesBinding] to
// properly setup the [defaultBinaryMessenger] instance.
_buildOwner = BuildOwner();
buildOwner.onBuildScheduled = _handleBuildScheduled; buildOwner.onBuildScheduled = _handleBuildScheduled;
window.onLocaleChanged = handleLocaleChanged; window.onLocaleChanged = handleLocaleChanged;
window.onAccessibilityFeaturesChanged = handleAccessibilityFeaturesChanged; window.onAccessibilityFeaturesChanged = handleAccessibilityFeaturesChanged;
...@@ -375,10 +371,7 @@ mixin WidgetsBinding on BindingBase, SchedulerBinding, GestureBinding, RendererB ...@@ -375,10 +371,7 @@ mixin WidgetsBinding on BindingBase, SchedulerBinding, GestureBinding, RendererB
/// The [BuildOwner] in charge of executing the build pipeline for the /// The [BuildOwner] in charge of executing the build pipeline for the
/// widget tree rooted at this binding. /// widget tree rooted at this binding.
BuildOwner get buildOwner => _buildOwner; BuildOwner get buildOwner => _buildOwner;
// Initialization of [_buildOwner] has to be done within the [initInstances] final BuildOwner _buildOwner = BuildOwner();
// method, as it requires [ServicesBinding] to properly setup the
// [defaultBinaryMessenger] instance.
BuildOwner _buildOwner;
/// The object in charge of the focus tree. /// The object in charge of the focus tree.
/// ///
......
...@@ -125,7 +125,6 @@ class PathPointsMatcher extends Matcher { ...@@ -125,7 +125,6 @@ class PathPointsMatcher extends Matcher {
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final MockClipboard mockClipboard = MockClipboard(); final MockClipboard mockClipboard = MockClipboard();
SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall); SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall);
......
...@@ -429,7 +429,7 @@ void main() { ...@@ -429,7 +429,7 @@ void main() {
bool completed; bool completed;
completed = false; completed = false;
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) async { defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) async {
expect(utf8.decode(message.buffer.asUint8List()), 'test'); expect(utf8.decode(message.buffer.asUint8List()), 'test');
completed = true; completed = true;
return ByteData(5); // 0x0000000000 return ByteData(5); // 0x0000000000
...@@ -448,7 +448,7 @@ void main() { ...@@ -448,7 +448,7 @@ void main() {
data = await rootBundle.loadStructuredData<bool>('test', (String value) async { expect(value, '\x00\x00\x00\x00\x00'); return false; }); data = await rootBundle.loadStructuredData<bool>('test', (String value) async { expect(value, '\x00\x00\x00\x00\x00'); return false; });
expect(data, isFalse); expect(data, isFalse);
expect(completed, isTrue); expect(completed, isTrue);
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/assets', null); defaultBinaryMessenger.setMockMessageHandler('flutter/assets', null);
}); });
test('Service extensions - exit', () async { test('Service extensions - exit', () async {
......
...@@ -72,7 +72,7 @@ void main() { ...@@ -72,7 +72,7 @@ void main() {
// Simulate system back button // Simulate system back button
final ByteData message = const JSONMethodCodec().encodeMethodCall(const MethodCall('popRoute')); final ByteData message = const JSONMethodCodec().encodeMethodCall(const MethodCall('popRoute'));
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(selectedResults, <void>[null]); expect(selectedResults, <void>[null]);
......
...@@ -129,7 +129,6 @@ double getOpacity(WidgetTester tester, Finder finder) { ...@@ -129,7 +129,6 @@ double getOpacity(WidgetTester tester, Finder finder) {
} }
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final MockClipboard mockClipboard = MockClipboard(); final MockClipboard mockClipboard = MockClipboard();
SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall); SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall);
...@@ -3392,7 +3391,7 @@ void main() { ...@@ -3392,7 +3391,7 @@ void main() {
}); });
void sendFakeKeyEvent(Map<String, dynamic> data) { void sendFakeKeyEvent(Map<String, dynamic> data) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.keyEvent.name, SystemChannels.keyEvent.name,
SystemChannels.keyEvent.codec.encodeMessage(data), SystemChannels.keyEvent.codec.encodeMessage(data),
(ByteData data) { }, (ByteData data) { },
......
...@@ -129,7 +129,7 @@ void main() { ...@@ -129,7 +129,7 @@ void main() {
expect(tickCount, equals(0)); expect(tickCount, equals(0));
final ByteData message = const StringCodec().encodeMessage('AppLifecycleState.paused'); final ByteData message = const StringCodec().encodeMessage('AppLifecycleState.paused');
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', message, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', message, (_) { });
expect(ticker.isTicking, isFalse); expect(ticker.isTicking, isFalse);
expect(ticker.isActive, isTrue); expect(ticker.isActive, isTrue);
...@@ -138,7 +138,7 @@ void main() { ...@@ -138,7 +138,7 @@ void main() {
testWidgets('Ticker can be created before application unpauses', (WidgetTester tester) async { testWidgets('Ticker can be created before application unpauses', (WidgetTester tester) async {
final ByteData pausedMessage = const StringCodec().encodeMessage('AppLifecycleState.paused'); final ByteData pausedMessage = const StringCodec().encodeMessage('AppLifecycleState.paused');
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', pausedMessage, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', pausedMessage, (_) { });
int tickCount = 0; int tickCount = 0;
void handleTick(Duration duration) { void handleTick(Duration duration) {
...@@ -157,7 +157,7 @@ void main() { ...@@ -157,7 +157,7 @@ void main() {
expect(ticker.isTicking, isFalse); expect(ticker.isTicking, isFalse);
final ByteData resumedMessage = const StringCodec().encodeMessage('AppLifecycleState.resumed'); final ByteData resumedMessage = const StringCodec().encodeMessage('AppLifecycleState.resumed');
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', resumedMessage, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/lifecycle', resumedMessage, (_) { });
await tester.pump(const Duration(milliseconds: 10)); await tester.pump(const Duration(milliseconds: 10));
......
...@@ -6,15 +6,10 @@ import 'dart:ui' show TextDirection; ...@@ -6,15 +6,10 @@ import 'dart:ui' show TextDirection;
import 'package:flutter/semantics.dart'; import 'package:flutter/semantics.dart';
import 'package:flutter/services.dart' show SystemChannels; import 'package:flutter/services.dart' show SystemChannels;
import 'package:flutter_test/flutter_test.dart' show TestWidgetsFlutterBinding;
import '../flutter_test_alternative.dart'; import '../flutter_test_alternative.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
test('Semantic announcement', () async { test('Semantic announcement', () async {
final List<Map<dynamic, dynamic>> log = <Map<dynamic, dynamic>>[]; final List<Map<dynamic, dynamic>> log = <Map<dynamic, dynamic>>[];
......
...@@ -63,7 +63,7 @@ class FakeAndroidPlatformViewsController { ...@@ -63,7 +63,7 @@ class FakeAndroidPlatformViewsController {
void invokeViewFocused(int viewId) { void invokeViewFocused(int viewId) {
final MethodCodec codec = SystemChannels.platform_views.codec; final MethodCodec codec = SystemChannels.platform_views.codec;
final ByteData data = codec.encodeMethodCall(MethodCall('viewFocused', viewId)); final ByteData data = codec.encodeMethodCall(MethodCall('viewFocused', viewId));
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage(SystemChannels.platform_views.name, data, (ByteData data) {}); defaultBinaryMessenger.handlePlatformMessage(SystemChannels.platform_views.name, data, (ByteData data) {});
} }
Future<dynamic> _onMethodCall(MethodCall call) { Future<dynamic> _onMethodCall(MethodCall call) {
......
...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart'; ...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
test('Haptic feedback control test', () async { test('Haptic feedback control test', () async {
final List<MethodCall> log = <MethodCall>[]; final List<MethodCall> log = <MethodCall>[];
......
...@@ -6,20 +6,14 @@ import 'dart:async'; ...@@ -6,20 +6,14 @@ import 'dart:async';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart' show TestWidgetsFlutterBinding;
import '../flutter_test_alternative.dart'; import '../flutter_test_alternative.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
group('BasicMessageChannel', () { group('BasicMessageChannel', () {
const MessageCodec<String> string = StringCodec(); const MessageCodec<String> string = StringCodec();
const BasicMessageChannel<String> channel = BasicMessageChannel<String>('ch', string); const BasicMessageChannel<String> channel = BasicMessageChannel<String>('ch', string);
test('can send string message and get reply', () async { test('can send string message and get reply', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch', 'ch',
(ByteData message) async => string.encodeMessage(string.decodeMessage(message) + ' world'), (ByteData message) async => string.encodeMessage(string.decodeMessage(message) + ' world'),
); );
...@@ -29,7 +23,7 @@ void main() { ...@@ -29,7 +23,7 @@ void main() {
test('can receive string message and send reply', () async { test('can receive string message and send reply', () async {
channel.setMessageHandler((String message) async => message + ' world'); channel.setMessageHandler((String message) async => message + ' world');
String reply; String reply;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( await defaultBinaryMessenger.handlePlatformMessage(
'ch', 'ch',
const StringCodec().encodeMessage('hello'), const StringCodec().encodeMessage('hello'),
(ByteData replyBinary) { (ByteData replyBinary) {
...@@ -45,7 +39,7 @@ void main() { ...@@ -45,7 +39,7 @@ void main() {
const MethodCodec jsonMethod = JSONMethodCodec(); const MethodCodec jsonMethod = JSONMethodCodec();
const MethodChannel channel = MethodChannel('ch7', jsonMethod); const MethodChannel channel = MethodChannel('ch7', jsonMethod);
test('can invoke method and get result', () async { test('can invoke method and get result', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -60,7 +54,7 @@ void main() { ...@@ -60,7 +54,7 @@ void main() {
expect(result, equals('hello world')); expect(result, equals('hello world'));
}); });
test('can invoke list method and get result', () async { test('can invoke list method and get result', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -76,7 +70,7 @@ void main() { ...@@ -76,7 +70,7 @@ void main() {
}); });
test('can invoke list method and get null result', () async { test('can invoke list method and get null result', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -92,7 +86,7 @@ void main() { ...@@ -92,7 +86,7 @@ void main() {
test('can invoke map method and get result', () async { test('can invoke map method and get result', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -108,7 +102,7 @@ void main() { ...@@ -108,7 +102,7 @@ void main() {
}); });
test('can invoke map method and get null result', () async { test('can invoke map method and get null result', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -123,7 +117,7 @@ void main() { ...@@ -123,7 +117,7 @@ void main() {
}); });
test('can invoke method and get error', () async { test('can invoke method and get error', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async { (ByteData message) async {
return jsonMessage.encodeMessage(<dynamic>[ return jsonMessage.encodeMessage(<dynamic>[
...@@ -145,7 +139,7 @@ void main() { ...@@ -145,7 +139,7 @@ void main() {
} }
}); });
test('can invoke unimplemented method', () async { test('can invoke unimplemented method', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch7', 'ch7',
(ByteData message) async => null, (ByteData message) async => null,
); );
...@@ -163,7 +157,7 @@ void main() { ...@@ -163,7 +157,7 @@ void main() {
channel.setMethodCallHandler(null); channel.setMethodCallHandler(null);
final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello')); final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello'));
ByteData envelope; ByteData envelope;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) { await defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) {
envelope = result; envelope = result;
}); });
expect(envelope, isNull); expect(envelope, isNull);
...@@ -174,7 +168,7 @@ void main() { ...@@ -174,7 +168,7 @@ void main() {
}); });
final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello')); final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello'));
ByteData envelope; ByteData envelope;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) { await defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) {
envelope = result; envelope = result;
}); });
expect(envelope, isNull); expect(envelope, isNull);
...@@ -183,7 +177,7 @@ void main() { ...@@ -183,7 +177,7 @@ void main() {
channel.setMethodCallHandler((MethodCall call) async => '${call.arguments}, world'); channel.setMethodCallHandler((MethodCall call) async => '${call.arguments}, world');
final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello')); final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello'));
ByteData envelope; ByteData envelope;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) { await defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) {
envelope = result; envelope = result;
}); });
expect(jsonMethod.decodeEnvelope(envelope), equals('hello, world')); expect(jsonMethod.decodeEnvelope(envelope), equals('hello, world'));
...@@ -194,7 +188,7 @@ void main() { ...@@ -194,7 +188,7 @@ void main() {
}); });
final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello')); final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello'));
ByteData envelope; ByteData envelope;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) { await defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) {
envelope = result; envelope = result;
}); });
try { try {
...@@ -213,7 +207,7 @@ void main() { ...@@ -213,7 +207,7 @@ void main() {
}); });
final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello')); final ByteData call = jsonMethod.encodeMethodCall(const MethodCall('sayHello', 'hello'));
ByteData envelope; ByteData envelope;
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) { await defaultBinaryMessenger.handlePlatformMessage('ch7', call, (ByteData result) {
envelope = result; envelope = result;
}); });
try { try {
...@@ -232,7 +226,7 @@ void main() { ...@@ -232,7 +226,7 @@ void main() {
const MethodCodec jsonMethod = JSONMethodCodec(); const MethodCodec jsonMethod = JSONMethodCodec();
const EventChannel channel = EventChannel('ch', jsonMethod); const EventChannel channel = EventChannel('ch', jsonMethod);
void emitEvent(dynamic event) { void emitEvent(dynamic event) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
'ch', 'ch',
event, event,
(ByteData reply) { }, (ByteData reply) { },
...@@ -240,7 +234,7 @@ void main() { ...@@ -240,7 +234,7 @@ void main() {
} }
test('can receive event stream', () async { test('can receive event stream', () async {
bool canceled = false; bool canceled = false;
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch', 'ch',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
...@@ -264,7 +258,7 @@ void main() { ...@@ -264,7 +258,7 @@ void main() {
expect(canceled, isTrue); expect(canceled, isTrue);
}); });
test('can receive error event', () async { test('can receive error event', () async {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler( defaultBinaryMessenger.setMockMessageHandler(
'ch', 'ch',
(ByteData message) async { (ByteData message) async {
final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message); final Map<dynamic, dynamic> methodCall = jsonMessage.decodeMessage(message);
......
...@@ -16,18 +16,18 @@ void main() { ...@@ -16,18 +16,18 @@ void main() {
final List<ByteData> log = <ByteData>[]; final List<ByteData> log = <ByteData>[];
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('test1', (ByteData message) async { defaultBinaryMessenger.setMockMessageHandler('test1', (ByteData message) async {
log.add(message); log.add(message);
return null; return null;
}); });
final ByteData message = ByteData(2)..setUint16(0, 0xABCD); final ByteData message = ByteData(2)..setUint16(0, 0xABCD);
await ServicesBinding.instance.defaultBinaryMessenger.send('test1', message); await defaultBinaryMessenger.send('test1', message);
expect(log, equals(<ByteData>[message])); expect(log, equals(<ByteData>[message]));
log.clear(); log.clear();
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('test1', null); defaultBinaryMessenger.setMockMessageHandler('test1', null);
await ServicesBinding.instance.defaultBinaryMessenger.send('test1', message); await defaultBinaryMessenger.send('test1', message);
expect(log, isEmpty); expect(log, isEmpty);
}); });
} }
...@@ -4,17 +4,12 @@ ...@@ -4,17 +4,12 @@
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart' show TestWidgetsFlutterBinding;
import '../flutter_test_alternative.dart'; import '../flutter_test_alternative.dart';
import 'fake_platform_views.dart'; import 'fake_platform_views.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
group('Android', () { group('Android', () {
FakeAndroidPlatformViewsController viewsController; FakeAndroidPlatformViewsController viewsController;
setUp(() { setUp(() {
......
...@@ -61,7 +61,7 @@ void main() { ...@@ -61,7 +61,7 @@ void main() {
test('setApplicationSwitcherDescription missing plugin', () async { test('setApplicationSwitcherDescription missing plugin', () async {
final List<ByteData> log = <ByteData>[]; final List<ByteData> log = <ByteData>[];
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/platform', (ByteData message) { defaultBinaryMessenger.setMockMessageHandler('flutter/platform', (ByteData message) {
log.add(message); log.add(message);
return null; return null;
}); });
......
...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart'; ...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
test('System navigator control test', () async { test('System navigator control test', () async {
final List<MethodCall> log = <MethodCall>[]; final List<MethodCall> log = <MethodCall>[];
......
...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart'; ...@@ -6,10 +6,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
setUp(() {
TestWidgetsFlutterBinding.ensureInitialized();
});
test('System sound control test', () async { test('System sound control test', () async {
final List<MethodCall> log = <MethodCall>[]; final List<MethodCall> log = <MethodCall>[];
......
...@@ -46,13 +46,12 @@ void main() { ...@@ -46,13 +46,12 @@ void main() {
WidgetsBinding.instance.addObserver(observer); WidgetsBinding.instance.addObserver(observer);
final ByteData message = const JSONMessageCodec().encodeMessage( final ByteData message = const JSONMessageCodec().encodeMessage(
<String, dynamic>{'type': 'memoryPressure'}); <String, dynamic>{'type': 'memoryPressure'});
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/system', message, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/system', message, (_) { });
expect(observer.sawMemoryPressure, true); expect(observer.sawMemoryPressure, true);
WidgetsBinding.instance.removeObserver(observer); WidgetsBinding.instance.removeObserver(observer);
}); });
testWidgets('handleLifecycleStateChanged callback', (WidgetTester tester) async { testWidgets('handleLifecycleStateChanged callback', (WidgetTester tester) async {
final BinaryMessenger defaultBinaryMessenger = ServicesBinding.instance.defaultBinaryMessenger;
final AppLifecycleStateObserver observer = AppLifecycleStateObserver(); final AppLifecycleStateObserver observer = AppLifecycleStateObserver();
WidgetsBinding.instance.addObserver(observer); WidgetsBinding.instance.addObserver(observer);
...@@ -80,14 +79,13 @@ void main() { ...@@ -80,14 +79,13 @@ void main() {
const String testRouteName = 'testRouteName'; const String testRouteName = 'testRouteName';
final ByteData message = const JSONMethodCodec().encodeMethodCall( final ByteData message = const JSONMethodCodec().encodeMethodCall(
const MethodCall('pushRoute', testRouteName)); const MethodCall('pushRoute', testRouteName));
await ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { }); await defaultBinaryMessenger.handlePlatformMessage('flutter/navigation', message, (_) { });
expect(observer.pushedRoute, testRouteName); expect(observer.pushedRoute, testRouteName);
WidgetsBinding.instance.removeObserver(observer); WidgetsBinding.instance.removeObserver(observer);
}); });
testWidgets('Application lifecycle affects frame scheduling', (WidgetTester tester) async { testWidgets('Application lifecycle affects frame scheduling', (WidgetTester tester) async {
final BinaryMessenger defaultBinaryMessenger = ServicesBinding.instance.defaultBinaryMessenger;
ByteData message; ByteData message;
expect(tester.binding.hasScheduledFrame, isFalse); expect(tester.binding.hasScheduledFrame, isFalse);
......
...@@ -10,7 +10,7 @@ import 'package:flutter/widgets.dart'; ...@@ -10,7 +10,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void sendFakeKeyEvent(Map<String, dynamic> data) { void sendFakeKeyEvent(Map<String, dynamic> data) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.keyEvent.name, SystemChannels.keyEvent.name,
SystemChannels.keyEvent.codec.encodeMessage(data), SystemChannels.keyEvent.codec.encodeMessage(data),
(ByteData data) {}, (ByteData data) {},
......
...@@ -9,7 +9,7 @@ import 'package:flutter/widgets.dart'; ...@@ -9,7 +9,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void sendFakeKeyEvent(Map<String, dynamic> data) { void sendFakeKeyEvent(Map<String, dynamic> data) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.keyEvent.name, SystemChannels.keyEvent.name,
SystemChannels.keyEvent.codec.encodeMessage(data), SystemChannels.keyEvent.codec.encodeMessage(data),
(ByteData data) {}, (ByteData data) {},
......
...@@ -122,7 +122,6 @@ double getOpacity(WidgetTester tester, Finder finder) { ...@@ -122,7 +122,6 @@ double getOpacity(WidgetTester tester, Finder finder) {
} }
void main() { void main() {
TestWidgetsFlutterBinding.ensureInitialized();
final MockClipboard mockClipboard = MockClipboard(); final MockClipboard mockClipboard = MockClipboard();
SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall); SystemChannels.platform.setMockMethodCallHandler(mockClipboard.handleMethodCall);
...@@ -1248,7 +1247,7 @@ void main() { ...@@ -1248,7 +1247,7 @@ void main() {
}); });
void sendFakeKeyEvent(Map<String, dynamic> data) { void sendFakeKeyEvent(Map<String, dynamic> data) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.keyEvent.name, SystemChannels.keyEvent.name,
SystemChannels.keyEvent.codec.encodeMessage(data), SystemChannels.keyEvent.codec.encodeMessage(data),
(ByteData data) { }, (ByteData data) { },
......
...@@ -11,7 +11,7 @@ import 'package:flutter/widgets.dart'; ...@@ -11,7 +11,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
void sendFakeKeyEvent(Map<String, dynamic> data) { void sendFakeKeyEvent(Map<String, dynamic> data) {
ServicesBinding.instance.defaultBinaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.keyEvent.name, SystemChannels.keyEvent.name,
SystemChannels.keyEvent.codec.encodeMessage(data), SystemChannels.keyEvent.codec.encodeMessage(data),
(ByteData data) {}, (ByteData data) {},
......
...@@ -207,10 +207,10 @@ abstract class TestWidgetsFlutterBinding extends BindingBase ...@@ -207,10 +207,10 @@ abstract class TestWidgetsFlutterBinding extends BindingBase
@override @override
void initInstances() { void initInstances() {
super.initInstances();
timeDilation = 1.0; // just in case the developer has artificially changed it for development timeDilation = 1.0; // just in case the developer has artificially changed it for development
HttpOverrides.global = _MockHttpOverrides(); HttpOverrides.global = _MockHttpOverrides();
_testTextInput = TestTextInput(onCleared: _resetFocusedEditable)..register(); _testTextInput = TestTextInput(onCleared: _resetFocusedEditable)..register();
super.initInstances();
} }
@override @override
...@@ -808,7 +808,7 @@ class AutomatedTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding { ...@@ -808,7 +808,7 @@ class AutomatedTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding {
final String assetFolderPath = Platform.environment['UNIT_TEST_ASSETS']; final String assetFolderPath = Platform.environment['UNIT_TEST_ASSETS'];
final String prefix = 'packages/${Platform.environment['APP_NAME']}/'; final String prefix = 'packages/${Platform.environment['APP_NAME']}/';
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) { defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) {
String key = utf8.decode(message.buffer.asUint8List()); String key = utf8.decode(message.buffer.asUint8List());
File asset = File(path.join(assetFolderPath, key)); File asset = File(path.join(assetFolderPath, key));
......
...@@ -36,9 +36,6 @@ class TestTextInput { ...@@ -36,9 +36,6 @@ class TestTextInput {
/// first be requested, e.g. using [WidgetTester.showKeyboard]. /// first be requested, e.g. using [WidgetTester.showKeyboard].
final VoidCallback onCleared; final VoidCallback onCleared;
/// The messenger which sends the bytes for this channel, not null.
BinaryMessenger get _binaryMessenger => ServicesBinding.instance.defaultBinaryMessenger;
/// Installs this object as a mock handler for [SystemChannels.textInput]. /// Installs this object as a mock handler for [SystemChannels.textInput].
void register() { void register() {
SystemChannels.textInput.setMockMethodCallHandler(_handleTextInputCall); SystemChannels.textInput.setMockMethodCallHandler(_handleTextInputCall);
...@@ -111,7 +108,7 @@ class TestTextInput { ...@@ -111,7 +108,7 @@ class TestTextInput {
// test this code does not run in a package:test test zone. // test this code does not run in a package:test test zone.
if (_client == 0) if (_client == 0)
throw TestFailure('Tried to use TestTextInput with no keyboard attached. You must use WidgetTester.showKeyboard() first.'); throw TestFailure('Tried to use TestTextInput with no keyboard attached. You must use WidgetTester.showKeyboard() first.');
_binaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.textInput.name, SystemChannels.textInput.name,
SystemChannels.textInput.codec.encodeMethodCall( SystemChannels.textInput.codec.encodeMethodCall(
MethodCall( MethodCall(
...@@ -143,7 +140,7 @@ class TestTextInput { ...@@ -143,7 +140,7 @@ class TestTextInput {
final Completer<void> completer = Completer<void>(); final Completer<void> completer = Completer<void>();
_binaryMessenger.handlePlatformMessage( defaultBinaryMessenger.handlePlatformMessage(
SystemChannels.textInput.name, SystemChannels.textInput.name,
SystemChannels.textInput.codec.encodeMethodCall( SystemChannels.textInput.codec.encodeMethodCall(
MethodCall( MethodCall(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment