[flutter_tool] Fix bug in manifest yaml validation (#38472)

diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index b1100ab..bc384d8 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -355,8 +355,9 @@
       case 'fonts':
         if (kvp.value is! YamlList || kvp.value[0] is! YamlMap) {
           errors.add('Expected "${kvp.key}" to be a list, but got ${kvp.value} (${kvp.value.runtimeType}).');
+        } else {
+          _validateFonts(kvp.value, errors);
         }
-        _validateFonts(kvp.value, errors);
         break;
       case 'module':
         if (kvp.value is! YamlMap) {
diff --git a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
index 79b1664..706c0f8 100644
--- a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
+++ b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
@@ -519,6 +519,25 @@
       expect(logger.errorText, contains('Expected "fonts" to either be null or a list.'));
     });
 
+    testUsingContext('Returns proper error when font is a map instead of a list', () async {
+      final BufferLogger logger = context.get<Logger>();
+      const String manifest = '''
+name: test
+dependencies:
+  flutter:
+    sdk: flutter
+flutter:
+  fonts:
+    family: foo
+    fonts:
+      -asset: a/bar
+''';
+      final FlutterManifest flutterManifest = FlutterManifest.createFromString(manifest);
+
+      expect(flutterManifest, null);
+      expect(logger.errorText, contains('Expected "fonts" to be a list'));
+    });
+
     testUsingContext('Returns proper error when second font family is invalid', () async {
       final BufferLogger logger = context.get<Logger>();
       const String manifest = '''