[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 = '''