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))