Fix #31764: Show appropriate error message when fonts pubspec.yaml isn't iterable

Show appropriate error message when fonts isn't iterable
diff --git a/packages/flutter_tools/lib/src/flutter_manifest.dart b/packages/flutter_tools/lib/src/flutter_manifest.dart
index 5eb94d1..a757486 100644
--- a/packages/flutter_tools/lib/src/flutter_manifest.dart
+++ b/packages/flutter_tools/lib/src/flutter_manifest.dart
@@ -398,11 +398,11 @@
     if (fontMap['family'] != null && fontMap['family'] is! String) {
       errors.add('Font family must either be null or a String.');
     }
-    if (fontMap['fonts'] != null && fontMap['fonts'] is! YamlList) {
-      errors.add('Expected "fonts" to either be null or a list.');
-    }
     if (fontMap['fonts'] == null) {
       continue;
+    } else if (fontMap['fonts'] is! YamlList) {
+      errors.add('Expected "fonts" to either be null or a list.');
+      continue;
     }
     for (final YamlMap fontListItem in fontMap['fonts']) {
       for (final MapEntry<dynamic, dynamic> kvp in fontListItem.entries) {
diff --git a/packages/flutter_tools/test/flutter_manifest_test.dart b/packages/flutter_tools/test/flutter_manifest_test.dart
index b3cedf9..3bc9176 100644
--- a/packages/flutter_tools/test/flutter_manifest_test.dart
+++ b/packages/flutter_tools/test/flutter_manifest_test.dart
@@ -6,7 +6,9 @@
 
 import 'package:file/file.dart';
 import 'package:file/memory.dart';
+import 'package:flutter_tools/src/base/context.dart';
 import 'package:flutter_tools/src/base/file_system.dart';
+import 'package:flutter_tools/src/base/logger.dart';
 import 'package:flutter_tools/src/cache.dart';
 import 'package:flutter_tools/src/flutter_manifest.dart';
 
@@ -463,6 +465,7 @@
         expectedBuildNumber: null,
       );
     });
+
     test('parses no version clause', () async {
       const String manifest = '''
 name: test
@@ -478,6 +481,26 @@
         expectedBuildNumber: null,
       );
     });
+
+    // Regression test for https://github.com/flutter/flutter/issues/31764
+    testUsingContext('Returns proper error when font detail is malformed', () 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 either be null or a list.'));
+    });
   });
 
   group('FlutterManifest with MemoryFileSystem', () {