ServiceExtensionManager: avoid switching on runtime type (#9286)

diff --git a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
index 5143b9d..7e1eda1 100644
--- a/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
+++ b/packages/devtools_app_shared/lib/src/service/service_extension_manager.dart
@@ -127,18 +127,14 @@
     }
   }
 
-  Object? _getExtensionValue(String name, String encodedValue) {
-    final expectedValueType =
-        extensions.serviceExtensionsAllowlist[name]!.values.first.runtimeType;
-    switch (expectedValueType) {
-      case const (bool):
-        return encodedValue == 'true';
-      case const (int):
-      case const (double):
-        return num.parse(encodedValue);
-      default:
-        return encodedValue;
-    }
+  Object _getExtensionValue(String name, String encodedValue) {
+    final firstValue =
+        extensions.serviceExtensionsAllowlist[name]!.values.first;
+    return switch (firstValue) {
+      bool() => encodedValue == 'true',
+      num() => num.parse(encodedValue),
+      _ => encodedValue,
+    };
   }
 
   Future<void> _onFrameEventReceived() async {
@@ -180,20 +176,19 @@
       return;
     }
 
-    if (mainIsolate.extensionRPCs != null) {
+    if (mainIsolate.extensionRPCs case final extensionRpcs?) {
       if (await connectedApp.isFlutterApp) {
         if (expectedMainIsolateRef != _isolateManager.mainIsolate.value) {
           // Isolate has changed again.
           return;
         }
         await [
-          for (final extension in mainIsolate.extensionRPCs!)
+          for (final extension in extensionRpcs)
             _maybeAddServiceExtension(extension)
         ].wait;
       } else {
         await [
-          for (final extension in mainIsolate.extensionRPCs!)
-            _addServiceExtension(extension)
+          for (final extension in extensionRpcs) _addServiceExtension(extension)
         ].wait;
       }
     }
@@ -303,11 +298,11 @@
     final isolateRef = _isolateManager.mainIsolate.value;
     if (isolateRef == null) return false;
 
-    if (!extensions.serviceExtensionsAllowlist.containsKey(name)) {
+    final serviceExtension = extensions.serviceExtensionsAllowlist[name];
+    if (serviceExtension == null) {
       return true;
     }
-    final expectedValueType =
-        extensions.serviceExtensionsAllowlist[name]!.values.first.runtimeType;
+    final firstValue = serviceExtension.values.first;
 
     if (isolateRef != _mainIsolate) return false;
 
@@ -329,21 +324,18 @@
 
         if (isolateRef != _mainIsolate) return false;
 
-        switch (expectedValueType) {
-          case const (bool):
-            final enabled = response.json!['enabled'] == 'true' ? true : false;
+        switch (firstValue) {
+          case bool():
+            final enabled = response.json!['enabled'] == 'true';
             await _maybeRestoreExtension(name, enabled);
-          case const (String):
+          case String():
             final String? value = response.json!['value'];
             await _maybeRestoreExtension(name, value);
-          case const (int):
-          case const (double):
+          case num():
             final value = num.parse(
               response.json![name.substring(name.lastIndexOf('.') + 1)],
             );
             await _maybeRestoreExtension(name, value);
-          default:
-            return true;
         }
       } on RPCError catch (e) {
         if (e.isServiceDisposedError) {