Fix bug where dispose message requires a map (#61035)
diff --git a/packages/flutter/lib/src/services/platform_views.dart b/packages/flutter/lib/src/services/platform_views.dart
index b3fe37b..0373b84 100644
--- a/packages/flutter/lib/src/services/platform_views.dart
+++ b/packages/flutter/lib/src/services/platform_views.dart
@@ -1041,7 +1041,11 @@
@override
Future<void> _sendDisposeMessage() {
- return SystemChannels.platform_views.invokeMethod<void>('dispose', viewId);
+ return SystemChannels
+ .platform_views.invokeMethod<void>('dispose', <String, dynamic>{
+ 'id': viewId,
+ 'hybrid': false,
+ });
}
}
diff --git a/packages/flutter/test/services/fake_platform_views.dart b/packages/flutter/test/services/fake_platform_views.dart
index 6dbca4c..b925385 100644
--- a/packages/flutter/test/services/fake_platform_views.dart
+++ b/packages/flutter/test/services/fake_platform_views.dart
@@ -214,11 +214,15 @@
}
Future<dynamic> _dispose(MethodCall call) {
- int id;
- if (call.arguments is int) {
- id = call.arguments as int;
- } else if (call.arguments is Map && call.arguments['hybrid'] == true) {
- id = call.arguments['id'] as int;
+ assert(call.arguments is Map);
+
+ final int id = call.arguments['id'] as int;
+ final bool hybrid = call.arguments['hybrid'] as bool;
+
+ if (hybrid && !_views[id].hybrid) {
+ throw ArgumentError('An $AndroidViewController using hybrid composition must pass `hybrid: true`');
+ } else if (!hybrid && _views[id].hybrid != null && _views[id].hybrid) {
+ throw ArgumentError('An $AndroidViewController not using hybrid composition must pass `hybrid: false`');
}
if (!_views.containsKey(id))