diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md
index 9c62479..4219492 100644
--- a/packages/pigeon/CHANGELOG.md
+++ b/packages/pigeon/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 6.0.2
+
+* [kotlin] Fixes a bug with a missed line break between generated statements in the `fromList` function of the companion object.
+
 ## 6.0.1
 
 * [c++] Fixes most non-class arguments and return values in Flutter APIs. The
diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart
index 40f2f5b..b01a798 100644
--- a/packages/pigeon/lib/generator_tools.dart
+++ b/packages/pigeon/lib/generator_tools.dart
@@ -9,7 +9,7 @@
 import 'ast.dart';
 
 /// The current version of pigeon. This must match the version in pubspec.yaml.
-const String pigeonVersion = '6.0.1';
+const String pigeonVersion = '6.0.2';
 
 /// Read all the content from [stdin] to a String.
 String readStdin() {
diff --git a/packages/pigeon/lib/kotlin_generator.dart b/packages/pigeon/lib/kotlin_generator.dart
index 76b270b..178309a 100644
--- a/packages/pigeon/lib/kotlin_generator.dart
+++ b/packages/pigeon/lib/kotlin_generator.dart
@@ -253,7 +253,7 @@
                   'val ${field.name} = $fieldType.fromList($listValue as List<Any?>)');
             } else if (!hostDatatype.isBuiltin &&
                 customEnumNames.contains(field.type.baseName)) {
-              indent.write(
+              indent.writeln(
                   'val ${field.name} = $fieldType.ofRaw($listValue as Int)!!');
             } else {
               indent.writeln('val ${field.name} = $listValue as $fieldType');
@@ -261,7 +261,6 @@
           }
         });
 
-        indent.writeln('');
         indent.write('return $className(');
         for (final NamedType field in getFieldsInSerializationOrder(klass)) {
           final String comma =
diff --git a/packages/pigeon/mock_handler_tester/test/message.dart b/packages/pigeon/mock_handler_tester/test/message.dart
index 0afd305..ae14da4 100644
--- a/packages/pigeon/mock_handler_tester/test/message.dart
+++ b/packages/pigeon/mock_handler_tester/test/message.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/mock_handler_tester/test/test.dart b/packages/pigeon/mock_handler_tester/test/test.dart
index 25f5d73..8e395a8 100644
--- a/packages/pigeon/mock_handler_tester/test/test.dart
+++ b/packages/pigeon/mock_handler_tester/test/test.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import
 // ignore_for_file: avoid_relative_lib_imports
diff --git a/packages/pigeon/pigeons/core_tests.dart b/packages/pigeon/pigeons/core_tests.dart
index 1699b0f..dd3be1d 100644
--- a/packages/pigeon/pigeons/core_tests.dart
+++ b/packages/pigeon/pigeons/core_tests.dart
@@ -16,7 +16,6 @@
     this.aBool = false,
     this.anInt = 0,
     this.aDouble = 0,
-    this.aString = '',
     required this.aByteArray,
     required this.a4ByteArray,
     required this.a8ByteArray,
@@ -24,12 +23,12 @@
     this.aList = const <Object?>[],
     this.aMap = const <String?, Object?>{},
     this.anEnum = AnEnum.one,
+    this.aString = '',
   });
 
   bool aBool;
   int anInt;
   double aDouble;
-  String aString;
   Uint8List aByteArray;
   Int32List a4ByteArray;
   Int64List a8ByteArray;
@@ -39,6 +38,7 @@
   // ignore: always_specify_types, strict_raw_type
   Map aMap;
   AnEnum anEnum;
+  String aString;
 }
 
 // A class containing all supported nullable types.
@@ -47,7 +47,6 @@
     this.aNullableBool,
     this.aNullableInt,
     this.aNullableDouble,
-    this.aNullableString,
     this.aNullableByteArray,
     this.aNullable4ByteArray,
     this.aNullable8ByteArray,
@@ -58,12 +57,12 @@
     this.nullableMapWithAnnotations,
     this.nullableMapWithObject,
     this.aNullableEnum,
+    this.aNullableString,
   );
 
   bool? aNullableBool;
   int? aNullableInt;
   double? aNullableDouble;
-  String? aNullableString;
   Uint8List? aNullableByteArray;
   Int32List? aNullable4ByteArray;
   Int64List? aNullable8ByteArray;
@@ -76,6 +75,7 @@
   Map<String?, String?>? nullableMapWithAnnotations;
   Map<String?, Object?>? nullableMapWithObject;
   AnEnum? aNullableEnum;
+  String? aNullableString;
 }
 
 // A class for testing nested object handling.
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
index 13367f2..d532105 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/CoreTests.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package com.example.alternate_language_test_plugin;
@@ -88,19 +88,6 @@
       this.aDouble = setterArg;
     }
 
-    private @NonNull String aString;
-
-    public @NonNull String getAString() {
-      return aString;
-    }
-
-    public void setAString(@NonNull String setterArg) {
-      if (setterArg == null) {
-        throw new IllegalStateException("Nonnull field \"aString\" is null.");
-      }
-      this.aString = setterArg;
-    }
-
     private @NonNull byte[] aByteArray;
 
     public @NonNull byte[] getAByteArray() {
@@ -192,6 +179,19 @@
       this.anEnum = setterArg;
     }
 
+    private @NonNull String aString;
+
+    public @NonNull String getAString() {
+      return aString;
+    }
+
+    public void setAString(@NonNull String setterArg) {
+      if (setterArg == null) {
+        throw new IllegalStateException("Nonnull field \"aString\" is null.");
+      }
+      this.aString = setterArg;
+    }
+
     /** Constructor is private to enforce null safety; use Builder. */
     private AllTypes() {}
 
@@ -217,13 +217,6 @@
         return this;
       }
 
-      private @Nullable String aString;
-
-      public @NonNull Builder setAString(@NonNull String setterArg) {
-        this.aString = setterArg;
-        return this;
-      }
-
       private @Nullable byte[] aByteArray;
 
       public @NonNull Builder setAByteArray(@NonNull byte[] setterArg) {
@@ -273,12 +266,18 @@
         return this;
       }
 
+      private @Nullable String aString;
+
+      public @NonNull Builder setAString(@NonNull String setterArg) {
+        this.aString = setterArg;
+        return this;
+      }
+
       public @NonNull AllTypes build() {
         AllTypes pigeonReturn = new AllTypes();
         pigeonReturn.setABool(aBool);
         pigeonReturn.setAnInt(anInt);
         pigeonReturn.setADouble(aDouble);
-        pigeonReturn.setAString(aString);
         pigeonReturn.setAByteArray(aByteArray);
         pigeonReturn.setA4ByteArray(a4ByteArray);
         pigeonReturn.setA8ByteArray(a8ByteArray);
@@ -286,6 +285,7 @@
         pigeonReturn.setAList(aList);
         pigeonReturn.setAMap(aMap);
         pigeonReturn.setAnEnum(anEnum);
+        pigeonReturn.setAString(aString);
         return pigeonReturn;
       }
     }
@@ -296,7 +296,6 @@
       toListResult.add(aBool);
       toListResult.add(anInt);
       toListResult.add(aDouble);
-      toListResult.add(aString);
       toListResult.add(aByteArray);
       toListResult.add(a4ByteArray);
       toListResult.add(a8ByteArray);
@@ -304,6 +303,7 @@
       toListResult.add(aList);
       toListResult.add(aMap);
       toListResult.add(anEnum == null ? null : anEnum.index);
+      toListResult.add(aString);
       return toListResult;
     }
 
@@ -316,22 +316,22 @@
           (anInt == null) ? null : ((anInt instanceof Integer) ? (Integer) anInt : (Long) anInt));
       Object aDouble = list.get(2);
       pigeonResult.setADouble((Double) aDouble);
-      Object aString = list.get(3);
-      pigeonResult.setAString((String) aString);
-      Object aByteArray = list.get(4);
+      Object aByteArray = list.get(3);
       pigeonResult.setAByteArray((byte[]) aByteArray);
-      Object a4ByteArray = list.get(5);
+      Object a4ByteArray = list.get(4);
       pigeonResult.setA4ByteArray((int[]) a4ByteArray);
-      Object a8ByteArray = list.get(6);
+      Object a8ByteArray = list.get(5);
       pigeonResult.setA8ByteArray((long[]) a8ByteArray);
-      Object aFloatArray = list.get(7);
+      Object aFloatArray = list.get(6);
       pigeonResult.setAFloatArray((double[]) aFloatArray);
-      Object aList = list.get(8);
+      Object aList = list.get(7);
       pigeonResult.setAList((List<Object>) aList);
-      Object aMap = list.get(9);
+      Object aMap = list.get(8);
       pigeonResult.setAMap((Map<Object, Object>) aMap);
-      Object anEnum = list.get(10);
+      Object anEnum = list.get(9);
       pigeonResult.setAnEnum(anEnum == null ? null : AnEnum.values()[(int) anEnum]);
+      Object aString = list.get(10);
+      pigeonResult.setAString((String) aString);
       return pigeonResult;
     }
   }
@@ -368,16 +368,6 @@
       this.aNullableDouble = setterArg;
     }
 
-    private @Nullable String aNullableString;
-
-    public @Nullable String getANullableString() {
-      return aNullableString;
-    }
-
-    public void setANullableString(@Nullable String setterArg) {
-      this.aNullableString = setterArg;
-    }
-
     private @Nullable byte[] aNullableByteArray;
 
     public @Nullable byte[] getANullableByteArray() {
@@ -478,6 +468,16 @@
       this.aNullableEnum = setterArg;
     }
 
+    private @Nullable String aNullableString;
+
+    public @Nullable String getANullableString() {
+      return aNullableString;
+    }
+
+    public void setANullableString(@Nullable String setterArg) {
+      this.aNullableString = setterArg;
+    }
+
     public static final class Builder {
       private @Nullable Boolean aNullableBool;
 
@@ -500,13 +500,6 @@
         return this;
       }
 
-      private @Nullable String aNullableString;
-
-      public @NonNull Builder setANullableString(@Nullable String setterArg) {
-        this.aNullableString = setterArg;
-        return this;
-      }
-
       private @Nullable byte[] aNullableByteArray;
 
       public @NonNull Builder setANullableByteArray(@Nullable byte[] setterArg) {
@@ -578,12 +571,18 @@
         return this;
       }
 
+      private @Nullable String aNullableString;
+
+      public @NonNull Builder setANullableString(@Nullable String setterArg) {
+        this.aNullableString = setterArg;
+        return this;
+      }
+
       public @NonNull AllNullableTypes build() {
         AllNullableTypes pigeonReturn = new AllNullableTypes();
         pigeonReturn.setANullableBool(aNullableBool);
         pigeonReturn.setANullableInt(aNullableInt);
         pigeonReturn.setANullableDouble(aNullableDouble);
-        pigeonReturn.setANullableString(aNullableString);
         pigeonReturn.setANullableByteArray(aNullableByteArray);
         pigeonReturn.setANullable4ByteArray(aNullable4ByteArray);
         pigeonReturn.setANullable8ByteArray(aNullable8ByteArray);
@@ -594,6 +593,7 @@
         pigeonReturn.setNullableMapWithAnnotations(nullableMapWithAnnotations);
         pigeonReturn.setNullableMapWithObject(nullableMapWithObject);
         pigeonReturn.setANullableEnum(aNullableEnum);
+        pigeonReturn.setANullableString(aNullableString);
         return pigeonReturn;
       }
     }
@@ -604,7 +604,6 @@
       toListResult.add(aNullableBool);
       toListResult.add(aNullableInt);
       toListResult.add(aNullableDouble);
-      toListResult.add(aNullableString);
       toListResult.add(aNullableByteArray);
       toListResult.add(aNullable4ByteArray);
       toListResult.add(aNullable8ByteArray);
@@ -615,6 +614,7 @@
       toListResult.add(nullableMapWithAnnotations);
       toListResult.add(nullableMapWithObject);
       toListResult.add(aNullableEnum == null ? null : aNullableEnum.index);
+      toListResult.add(aNullableString);
       return toListResult;
     }
 
@@ -629,29 +629,29 @@
               : ((aNullableInt instanceof Integer) ? (Integer) aNullableInt : (Long) aNullableInt));
       Object aNullableDouble = list.get(2);
       pigeonResult.setANullableDouble((Double) aNullableDouble);
-      Object aNullableString = list.get(3);
-      pigeonResult.setANullableString((String) aNullableString);
-      Object aNullableByteArray = list.get(4);
+      Object aNullableByteArray = list.get(3);
       pigeonResult.setANullableByteArray((byte[]) aNullableByteArray);
-      Object aNullable4ByteArray = list.get(5);
+      Object aNullable4ByteArray = list.get(4);
       pigeonResult.setANullable4ByteArray((int[]) aNullable4ByteArray);
-      Object aNullable8ByteArray = list.get(6);
+      Object aNullable8ByteArray = list.get(5);
       pigeonResult.setANullable8ByteArray((long[]) aNullable8ByteArray);
-      Object aNullableFloatArray = list.get(7);
+      Object aNullableFloatArray = list.get(6);
       pigeonResult.setANullableFloatArray((double[]) aNullableFloatArray);
-      Object aNullableList = list.get(8);
+      Object aNullableList = list.get(7);
       pigeonResult.setANullableList((List<Object>) aNullableList);
-      Object aNullableMap = list.get(9);
+      Object aNullableMap = list.get(8);
       pigeonResult.setANullableMap((Map<Object, Object>) aNullableMap);
-      Object nullableNestedList = list.get(10);
+      Object nullableNestedList = list.get(9);
       pigeonResult.setNullableNestedList((List<List<Boolean>>) nullableNestedList);
-      Object nullableMapWithAnnotations = list.get(11);
+      Object nullableMapWithAnnotations = list.get(10);
       pigeonResult.setNullableMapWithAnnotations((Map<String, String>) nullableMapWithAnnotations);
-      Object nullableMapWithObject = list.get(12);
+      Object nullableMapWithObject = list.get(11);
       pigeonResult.setNullableMapWithObject((Map<String, Object>) nullableMapWithObject);
-      Object aNullableEnum = list.get(13);
+      Object aNullableEnum = list.get(12);
       pigeonResult.setANullableEnum(
           aNullableEnum == null ? null : AnEnum.values()[(int) aNullableEnum]);
+      Object aNullableString = list.get(13);
+      pigeonResult.setANullableString((String) aNullableString);
       return pigeonResult;
     }
   }
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
index a5c55a3..613db6d 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.h
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #import <Foundation/Foundation.h>
@@ -30,18 +30,17 @@
 + (instancetype)makeWithABool:(NSNumber *)aBool
                         anInt:(NSNumber *)anInt
                       aDouble:(NSNumber *)aDouble
-                      aString:(NSString *)aString
                    aByteArray:(FlutterStandardTypedData *)aByteArray
                   a4ByteArray:(FlutterStandardTypedData *)a4ByteArray
                   a8ByteArray:(FlutterStandardTypedData *)a8ByteArray
                   aFloatArray:(FlutterStandardTypedData *)aFloatArray
                         aList:(NSArray *)aList
                          aMap:(NSDictionary *)aMap
-                       anEnum:(AnEnum)anEnum;
+                       anEnum:(AnEnum)anEnum
+                      aString:(NSString *)aString;
 @property(nonatomic, strong) NSNumber *aBool;
 @property(nonatomic, strong) NSNumber *anInt;
 @property(nonatomic, strong) NSNumber *aDouble;
-@property(nonatomic, copy) NSString *aString;
 @property(nonatomic, strong) FlutterStandardTypedData *aByteArray;
 @property(nonatomic, strong) FlutterStandardTypedData *a4ByteArray;
 @property(nonatomic, strong) FlutterStandardTypedData *a8ByteArray;
@@ -49,13 +48,13 @@
 @property(nonatomic, strong) NSArray *aList;
 @property(nonatomic, strong) NSDictionary *aMap;
 @property(nonatomic, assign) AnEnum anEnum;
+@property(nonatomic, copy) NSString *aString;
 @end
 
 @interface AllNullableTypes : NSObject
 + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool
                          aNullableInt:(nullable NSNumber *)aNullableInt
                       aNullableDouble:(nullable NSNumber *)aNullableDouble
-                      aNullableString:(nullable NSString *)aNullableString
                    aNullableByteArray:(nullable FlutterStandardTypedData *)aNullableByteArray
                   aNullable4ByteArray:(nullable FlutterStandardTypedData *)aNullable4ByteArray
                   aNullable8ByteArray:(nullable FlutterStandardTypedData *)aNullable8ByteArray
@@ -66,11 +65,11 @@
            nullableMapWithAnnotations:
                (nullable NSDictionary<NSString *, NSString *> *)nullableMapWithAnnotations
                 nullableMapWithObject:(nullable NSDictionary<NSString *, id> *)nullableMapWithObject
-                        aNullableEnum:(AnEnum)aNullableEnum;
+                        aNullableEnum:(AnEnum)aNullableEnum
+                      aNullableString:(nullable NSString *)aNullableString;
 @property(nonatomic, strong, nullable) NSNumber *aNullableBool;
 @property(nonatomic, strong, nullable) NSNumber *aNullableInt;
 @property(nonatomic, strong, nullable) NSNumber *aNullableDouble;
-@property(nonatomic, copy, nullable) NSString *aNullableString;
 @property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullableByteArray;
 @property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullable4ByteArray;
 @property(nonatomic, strong, nullable) FlutterStandardTypedData *aNullable8ByteArray;
@@ -82,6 +81,7 @@
     NSDictionary<NSString *, NSString *> *nullableMapWithAnnotations;
 @property(nonatomic, strong, nullable) NSDictionary<NSString *, id> *nullableMapWithObject;
 @property(nonatomic, assign) AnEnum aNullableEnum;
+@property(nonatomic, copy, nullable) NSString *aNullableString;
 @end
 
 @interface AllNullableTypesWrapper : NSObject
diff --git a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
index c8fa7d8..fac51db 100644
--- a/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
+++ b/packages/pigeon/platform_tests/alternate_language_test_plugin/ios/Classes/CoreTests.gen.m
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #import "CoreTests.gen.h"
@@ -51,19 +51,18 @@
 + (instancetype)makeWithABool:(NSNumber *)aBool
                         anInt:(NSNumber *)anInt
                       aDouble:(NSNumber *)aDouble
-                      aString:(NSString *)aString
                    aByteArray:(FlutterStandardTypedData *)aByteArray
                   a4ByteArray:(FlutterStandardTypedData *)a4ByteArray
                   a8ByteArray:(FlutterStandardTypedData *)a8ByteArray
                   aFloatArray:(FlutterStandardTypedData *)aFloatArray
                         aList:(NSArray *)aList
                          aMap:(NSDictionary *)aMap
-                       anEnum:(AnEnum)anEnum {
+                       anEnum:(AnEnum)anEnum
+                      aString:(NSString *)aString {
   AllTypes *pigeonResult = [[AllTypes alloc] init];
   pigeonResult.aBool = aBool;
   pigeonResult.anInt = anInt;
   pigeonResult.aDouble = aDouble;
-  pigeonResult.aString = aString;
   pigeonResult.aByteArray = aByteArray;
   pigeonResult.a4ByteArray = a4ByteArray;
   pigeonResult.a8ByteArray = a8ByteArray;
@@ -71,6 +70,7 @@
   pigeonResult.aList = aList;
   pigeonResult.aMap = aMap;
   pigeonResult.anEnum = anEnum;
+  pigeonResult.aString = aString;
   return pigeonResult;
 }
 + (AllTypes *)fromList:(NSArray *)list {
@@ -81,21 +81,21 @@
   NSAssert(pigeonResult.anInt != nil, @"");
   pigeonResult.aDouble = GetNullableObjectAtIndex(list, 2);
   NSAssert(pigeonResult.aDouble != nil, @"");
-  pigeonResult.aString = GetNullableObjectAtIndex(list, 3);
-  NSAssert(pigeonResult.aString != nil, @"");
-  pigeonResult.aByteArray = GetNullableObjectAtIndex(list, 4);
+  pigeonResult.aByteArray = GetNullableObjectAtIndex(list, 3);
   NSAssert(pigeonResult.aByteArray != nil, @"");
-  pigeonResult.a4ByteArray = GetNullableObjectAtIndex(list, 5);
+  pigeonResult.a4ByteArray = GetNullableObjectAtIndex(list, 4);
   NSAssert(pigeonResult.a4ByteArray != nil, @"");
-  pigeonResult.a8ByteArray = GetNullableObjectAtIndex(list, 6);
+  pigeonResult.a8ByteArray = GetNullableObjectAtIndex(list, 5);
   NSAssert(pigeonResult.a8ByteArray != nil, @"");
-  pigeonResult.aFloatArray = GetNullableObjectAtIndex(list, 7);
+  pigeonResult.aFloatArray = GetNullableObjectAtIndex(list, 6);
   NSAssert(pigeonResult.aFloatArray != nil, @"");
-  pigeonResult.aList = GetNullableObjectAtIndex(list, 8);
+  pigeonResult.aList = GetNullableObjectAtIndex(list, 7);
   NSAssert(pigeonResult.aList != nil, @"");
-  pigeonResult.aMap = GetNullableObjectAtIndex(list, 9);
+  pigeonResult.aMap = GetNullableObjectAtIndex(list, 8);
   NSAssert(pigeonResult.aMap != nil, @"");
-  pigeonResult.anEnum = [GetNullableObjectAtIndex(list, 10) integerValue];
+  pigeonResult.anEnum = [GetNullableObjectAtIndex(list, 9) integerValue];
+  pigeonResult.aString = GetNullableObjectAtIndex(list, 10);
+  NSAssert(pigeonResult.aString != nil, @"");
   return pigeonResult;
 }
 + (nullable AllTypes *)nullableFromList:(NSArray *)list {
@@ -106,7 +106,6 @@
     (self.aBool ?: [NSNull null]),
     (self.anInt ?: [NSNull null]),
     (self.aDouble ?: [NSNull null]),
-    (self.aString ?: [NSNull null]),
     (self.aByteArray ?: [NSNull null]),
     (self.a4ByteArray ?: [NSNull null]),
     (self.a8ByteArray ?: [NSNull null]),
@@ -114,6 +113,7 @@
     (self.aList ?: [NSNull null]),
     (self.aMap ?: [NSNull null]),
     @(self.anEnum),
+    (self.aString ?: [NSNull null]),
   ];
 }
 @end
@@ -122,7 +122,6 @@
 + (instancetype)makeWithANullableBool:(nullable NSNumber *)aNullableBool
                          aNullableInt:(nullable NSNumber *)aNullableInt
                       aNullableDouble:(nullable NSNumber *)aNullableDouble
-                      aNullableString:(nullable NSString *)aNullableString
                    aNullableByteArray:(nullable FlutterStandardTypedData *)aNullableByteArray
                   aNullable4ByteArray:(nullable FlutterStandardTypedData *)aNullable4ByteArray
                   aNullable8ByteArray:(nullable FlutterStandardTypedData *)aNullable8ByteArray
@@ -133,12 +132,12 @@
            nullableMapWithAnnotations:
                (nullable NSDictionary<NSString *, NSString *> *)nullableMapWithAnnotations
                 nullableMapWithObject:(nullable NSDictionary<NSString *, id> *)nullableMapWithObject
-                        aNullableEnum:(AnEnum)aNullableEnum {
+                        aNullableEnum:(AnEnum)aNullableEnum
+                      aNullableString:(nullable NSString *)aNullableString {
   AllNullableTypes *pigeonResult = [[AllNullableTypes alloc] init];
   pigeonResult.aNullableBool = aNullableBool;
   pigeonResult.aNullableInt = aNullableInt;
   pigeonResult.aNullableDouble = aNullableDouble;
-  pigeonResult.aNullableString = aNullableString;
   pigeonResult.aNullableByteArray = aNullableByteArray;
   pigeonResult.aNullable4ByteArray = aNullable4ByteArray;
   pigeonResult.aNullable8ByteArray = aNullable8ByteArray;
@@ -149,6 +148,7 @@
   pigeonResult.nullableMapWithAnnotations = nullableMapWithAnnotations;
   pigeonResult.nullableMapWithObject = nullableMapWithObject;
   pigeonResult.aNullableEnum = aNullableEnum;
+  pigeonResult.aNullableString = aNullableString;
   return pigeonResult;
 }
 + (AllNullableTypes *)fromList:(NSArray *)list {
@@ -156,17 +156,17 @@
   pigeonResult.aNullableBool = GetNullableObjectAtIndex(list, 0);
   pigeonResult.aNullableInt = GetNullableObjectAtIndex(list, 1);
   pigeonResult.aNullableDouble = GetNullableObjectAtIndex(list, 2);
-  pigeonResult.aNullableString = GetNullableObjectAtIndex(list, 3);
-  pigeonResult.aNullableByteArray = GetNullableObjectAtIndex(list, 4);
-  pigeonResult.aNullable4ByteArray = GetNullableObjectAtIndex(list, 5);
-  pigeonResult.aNullable8ByteArray = GetNullableObjectAtIndex(list, 6);
-  pigeonResult.aNullableFloatArray = GetNullableObjectAtIndex(list, 7);
-  pigeonResult.aNullableList = GetNullableObjectAtIndex(list, 8);
-  pigeonResult.aNullableMap = GetNullableObjectAtIndex(list, 9);
-  pigeonResult.nullableNestedList = GetNullableObjectAtIndex(list, 10);
-  pigeonResult.nullableMapWithAnnotations = GetNullableObjectAtIndex(list, 11);
-  pigeonResult.nullableMapWithObject = GetNullableObjectAtIndex(list, 12);
-  pigeonResult.aNullableEnum = [GetNullableObjectAtIndex(list, 13) integerValue];
+  pigeonResult.aNullableByteArray = GetNullableObjectAtIndex(list, 3);
+  pigeonResult.aNullable4ByteArray = GetNullableObjectAtIndex(list, 4);
+  pigeonResult.aNullable8ByteArray = GetNullableObjectAtIndex(list, 5);
+  pigeonResult.aNullableFloatArray = GetNullableObjectAtIndex(list, 6);
+  pigeonResult.aNullableList = GetNullableObjectAtIndex(list, 7);
+  pigeonResult.aNullableMap = GetNullableObjectAtIndex(list, 8);
+  pigeonResult.nullableNestedList = GetNullableObjectAtIndex(list, 9);
+  pigeonResult.nullableMapWithAnnotations = GetNullableObjectAtIndex(list, 10);
+  pigeonResult.nullableMapWithObject = GetNullableObjectAtIndex(list, 11);
+  pigeonResult.aNullableEnum = [GetNullableObjectAtIndex(list, 12) integerValue];
+  pigeonResult.aNullableString = GetNullableObjectAtIndex(list, 13);
   return pigeonResult;
 }
 + (nullable AllNullableTypes *)nullableFromList:(NSArray *)list {
@@ -177,7 +177,6 @@
     (self.aNullableBool ?: [NSNull null]),
     (self.aNullableInt ?: [NSNull null]),
     (self.aNullableDouble ?: [NSNull null]),
-    (self.aNullableString ?: [NSNull null]),
     (self.aNullableByteArray ?: [NSNull null]),
     (self.aNullable4ByteArray ?: [NSNull null]),
     (self.aNullable8ByteArray ?: [NSNull null]),
@@ -188,6 +187,7 @@
     (self.nullableMapWithAnnotations ?: [NSNull null]),
     (self.nullableMapWithObject ?: [NSNull null]),
     @(self.aNullableEnum),
+    (self.aNullableString ?: [NSNull null]),
   ];
 }
 @end
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
index 203f02b..8de1cc3 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/core_tests.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
@@ -23,7 +23,6 @@
     required this.aBool,
     required this.anInt,
     required this.aDouble,
-    required this.aString,
     required this.aByteArray,
     required this.a4ByteArray,
     required this.a8ByteArray,
@@ -31,6 +30,7 @@
     required this.aList,
     required this.aMap,
     required this.anEnum,
+    required this.aString,
   });
 
   bool aBool;
@@ -39,8 +39,6 @@
 
   double aDouble;
 
-  String aString;
-
   Uint8List aByteArray;
 
   Int32List a4ByteArray;
@@ -55,12 +53,13 @@
 
   AnEnum anEnum;
 
+  String aString;
+
   Object encode() {
     return <Object?>[
       aBool,
       anInt,
       aDouble,
-      aString,
       aByteArray,
       a4ByteArray,
       a8ByteArray,
@@ -68,6 +67,7 @@
       aList,
       aMap,
       anEnum.index,
+      aString,
     ];
   }
 
@@ -77,14 +77,14 @@
       aBool: result[0]! as bool,
       anInt: result[1]! as int,
       aDouble: result[2]! as double,
-      aString: result[3]! as String,
-      aByteArray: result[4]! as Uint8List,
-      a4ByteArray: result[5]! as Int32List,
-      a8ByteArray: result[6]! as Int64List,
-      aFloatArray: result[7]! as Float64List,
-      aList: result[8]! as List<Object?>,
-      aMap: result[9]! as Map<Object?, Object?>,
-      anEnum: AnEnum.values[result[10]! as int],
+      aByteArray: result[3]! as Uint8List,
+      a4ByteArray: result[4]! as Int32List,
+      a8ByteArray: result[5]! as Int64List,
+      aFloatArray: result[6]! as Float64List,
+      aList: result[7]! as List<Object?>,
+      aMap: result[8]! as Map<Object?, Object?>,
+      anEnum: AnEnum.values[result[9]! as int],
+      aString: result[10]! as String,
     );
   }
 }
@@ -94,7 +94,6 @@
     this.aNullableBool,
     this.aNullableInt,
     this.aNullableDouble,
-    this.aNullableString,
     this.aNullableByteArray,
     this.aNullable4ByteArray,
     this.aNullable8ByteArray,
@@ -105,6 +104,7 @@
     this.nullableMapWithAnnotations,
     this.nullableMapWithObject,
     this.aNullableEnum,
+    this.aNullableString,
   });
 
   bool? aNullableBool;
@@ -113,8 +113,6 @@
 
   double? aNullableDouble;
 
-  String? aNullableString;
-
   Uint8List? aNullableByteArray;
 
   Int32List? aNullable4ByteArray;
@@ -135,12 +133,13 @@
 
   AnEnum? aNullableEnum;
 
+  String? aNullableString;
+
   Object encode() {
     return <Object?>[
       aNullableBool,
       aNullableInt,
       aNullableDouble,
-      aNullableString,
       aNullableByteArray,
       aNullable4ByteArray,
       aNullable8ByteArray,
@@ -151,6 +150,7 @@
       nullableMapWithAnnotations,
       nullableMapWithObject,
       aNullableEnum?.index,
+      aNullableString,
     ];
   }
 
@@ -160,20 +160,20 @@
       aNullableBool: result[0] as bool?,
       aNullableInt: result[1] as int?,
       aNullableDouble: result[2] as double?,
-      aNullableString: result[3] as String?,
-      aNullableByteArray: result[4] as Uint8List?,
-      aNullable4ByteArray: result[5] as Int32List?,
-      aNullable8ByteArray: result[6] as Int64List?,
-      aNullableFloatArray: result[7] as Float64List?,
-      aNullableList: result[8] as List<Object?>?,
-      aNullableMap: result[9] as Map<Object?, Object?>?,
-      nullableNestedList: (result[10] as List<Object?>?)?.cast<List<bool?>?>(),
+      aNullableByteArray: result[3] as Uint8List?,
+      aNullable4ByteArray: result[4] as Int32List?,
+      aNullable8ByteArray: result[5] as Int64List?,
+      aNullableFloatArray: result[6] as Float64List?,
+      aNullableList: result[7] as List<Object?>?,
+      aNullableMap: result[8] as Map<Object?, Object?>?,
+      nullableNestedList: (result[9] as List<Object?>?)?.cast<List<bool?>?>(),
       nullableMapWithAnnotations:
-          (result[11] as Map<Object?, Object?>?)?.cast<String?, String?>(),
+          (result[10] as Map<Object?, Object?>?)?.cast<String?, String?>(),
       nullableMapWithObject:
-          (result[12] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
+          (result[11] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
       aNullableEnum:
-          result[13] != null ? AnEnum.values[result[13]! as int] : null,
+          result[12] != null ? AnEnum.values[result[12]! as int] : null,
+      aNullableString: result[13] as String?,
     );
   }
 }
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
index 76a6a34..0093673 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/multiple_arity.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
index f316971..18b4052 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/non_null_fields.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
index 60f9dc4..daed065 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_fields.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart
index 5d7f772..65f56b4 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/null_safe_pigeon.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
index d29b2eb..e426119 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/nullable_returns.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart
index 72c9ea2..6802456 100644
--- a/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart
+++ b/packages/pigeon/platform_tests/flutter_null_safe_unit_tests/lib/primitive.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
diff --git a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
index 203f02b..8de1cc3 100644
--- a/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
+++ b/packages/pigeon/platform_tests/shared_test_plugin_code/lib/src/generated/core_tests.gen.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import
 
@@ -23,7 +23,6 @@
     required this.aBool,
     required this.anInt,
     required this.aDouble,
-    required this.aString,
     required this.aByteArray,
     required this.a4ByteArray,
     required this.a8ByteArray,
@@ -31,6 +30,7 @@
     required this.aList,
     required this.aMap,
     required this.anEnum,
+    required this.aString,
   });
 
   bool aBool;
@@ -39,8 +39,6 @@
 
   double aDouble;
 
-  String aString;
-
   Uint8List aByteArray;
 
   Int32List a4ByteArray;
@@ -55,12 +53,13 @@
 
   AnEnum anEnum;
 
+  String aString;
+
   Object encode() {
     return <Object?>[
       aBool,
       anInt,
       aDouble,
-      aString,
       aByteArray,
       a4ByteArray,
       a8ByteArray,
@@ -68,6 +67,7 @@
       aList,
       aMap,
       anEnum.index,
+      aString,
     ];
   }
 
@@ -77,14 +77,14 @@
       aBool: result[0]! as bool,
       anInt: result[1]! as int,
       aDouble: result[2]! as double,
-      aString: result[3]! as String,
-      aByteArray: result[4]! as Uint8List,
-      a4ByteArray: result[5]! as Int32List,
-      a8ByteArray: result[6]! as Int64List,
-      aFloatArray: result[7]! as Float64List,
-      aList: result[8]! as List<Object?>,
-      aMap: result[9]! as Map<Object?, Object?>,
-      anEnum: AnEnum.values[result[10]! as int],
+      aByteArray: result[3]! as Uint8List,
+      a4ByteArray: result[4]! as Int32List,
+      a8ByteArray: result[5]! as Int64List,
+      aFloatArray: result[6]! as Float64List,
+      aList: result[7]! as List<Object?>,
+      aMap: result[8]! as Map<Object?, Object?>,
+      anEnum: AnEnum.values[result[9]! as int],
+      aString: result[10]! as String,
     );
   }
 }
@@ -94,7 +94,6 @@
     this.aNullableBool,
     this.aNullableInt,
     this.aNullableDouble,
-    this.aNullableString,
     this.aNullableByteArray,
     this.aNullable4ByteArray,
     this.aNullable8ByteArray,
@@ -105,6 +104,7 @@
     this.nullableMapWithAnnotations,
     this.nullableMapWithObject,
     this.aNullableEnum,
+    this.aNullableString,
   });
 
   bool? aNullableBool;
@@ -113,8 +113,6 @@
 
   double? aNullableDouble;
 
-  String? aNullableString;
-
   Uint8List? aNullableByteArray;
 
   Int32List? aNullable4ByteArray;
@@ -135,12 +133,13 @@
 
   AnEnum? aNullableEnum;
 
+  String? aNullableString;
+
   Object encode() {
     return <Object?>[
       aNullableBool,
       aNullableInt,
       aNullableDouble,
-      aNullableString,
       aNullableByteArray,
       aNullable4ByteArray,
       aNullable8ByteArray,
@@ -151,6 +150,7 @@
       nullableMapWithAnnotations,
       nullableMapWithObject,
       aNullableEnum?.index,
+      aNullableString,
     ];
   }
 
@@ -160,20 +160,20 @@
       aNullableBool: result[0] as bool?,
       aNullableInt: result[1] as int?,
       aNullableDouble: result[2] as double?,
-      aNullableString: result[3] as String?,
-      aNullableByteArray: result[4] as Uint8List?,
-      aNullable4ByteArray: result[5] as Int32List?,
-      aNullable8ByteArray: result[6] as Int64List?,
-      aNullableFloatArray: result[7] as Float64List?,
-      aNullableList: result[8] as List<Object?>?,
-      aNullableMap: result[9] as Map<Object?, Object?>?,
-      nullableNestedList: (result[10] as List<Object?>?)?.cast<List<bool?>?>(),
+      aNullableByteArray: result[3] as Uint8List?,
+      aNullable4ByteArray: result[4] as Int32List?,
+      aNullable8ByteArray: result[5] as Int64List?,
+      aNullableFloatArray: result[6] as Float64List?,
+      aNullableList: result[7] as List<Object?>?,
+      aNullableMap: result[8] as Map<Object?, Object?>?,
+      nullableNestedList: (result[9] as List<Object?>?)?.cast<List<bool?>?>(),
       nullableMapWithAnnotations:
-          (result[11] as Map<Object?, Object?>?)?.cast<String?, String?>(),
+          (result[10] as Map<Object?, Object?>?)?.cast<String?, String?>(),
       nullableMapWithObject:
-          (result[12] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
+          (result[11] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
       aNullableEnum:
-          result[13] != null ? AnEnum.values[result[13]! as int] : null,
+          result[12] != null ? AnEnum.values[result[12]! as int] : null,
+      aNullableString: result[13] as String?,
     );
   }
 }
diff --git a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
index c5f0ee0..4fb08d9 100644
--- a/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
+++ b/packages/pigeon/platform_tests/test_plugin/android/src/main/kotlin/com/example/test_plugin/CoreTests.gen.kt
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 // 
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 package com.example.test_plugin
@@ -44,14 +44,14 @@
   val aBool: Boolean,
   val anInt: Long,
   val aDouble: Double,
-  val aString: String,
   val aByteArray: ByteArray,
   val a4ByteArray: IntArray,
   val a8ByteArray: LongArray,
   val aFloatArray: DoubleArray,
   val aList: List<Any?>,
   val aMap: Map<Any, Any?>,
-  val anEnum: AnEnum
+  val anEnum: AnEnum,
+  val aString: String
 
 ) {
   companion object {
@@ -60,15 +60,15 @@
       val aBool = list[0] as Boolean
       val anInt = list[1] as Long
       val aDouble = list[2] as Double
-      val aString = list[3] as String
-      val aByteArray = list[4] as ByteArray
-      val a4ByteArray = list[5] as IntArray
-      val a8ByteArray = list[6] as LongArray
-      val aFloatArray = list[7] as DoubleArray
-      val aList = list[8] as List<Any?>
-      val aMap = list[9] as Map<Any, Any?>
-      val anEnum = AnEnum.ofRaw(list[10] as Int)!!
-      return AllTypes(aBool, anInt, aDouble, aString, aByteArray, a4ByteArray, a8ByteArray, aFloatArray, aList, aMap, anEnum)
+      val aByteArray = list[3] as ByteArray
+      val a4ByteArray = list[4] as IntArray
+      val a8ByteArray = list[5] as LongArray
+      val aFloatArray = list[6] as DoubleArray
+      val aList = list[7] as List<Any?>
+      val aMap = list[8] as Map<Any, Any?>
+      val anEnum = AnEnum.ofRaw(list[9] as Int)!!
+      val aString = list[10] as String
+      return AllTypes(aBool, anInt, aDouble, aByteArray, a4ByteArray, a8ByteArray, aFloatArray, aList, aMap, anEnum, aString)
     }
   }
   fun toList(): List<Any?> {
@@ -76,7 +76,6 @@
       aBool,
       anInt,
       aDouble,
-      aString,
       aByteArray,
       a4ByteArray,
       a8ByteArray,
@@ -84,6 +83,7 @@
       aList,
       aMap,
       anEnum?.raw,
+      aString,
     )
   }
 }
@@ -93,7 +93,6 @@
   val aNullableBool: Boolean? = null,
   val aNullableInt: Long? = null,
   val aNullableDouble: Double? = null,
-  val aNullableString: String? = null,
   val aNullableByteArray: ByteArray? = null,
   val aNullable4ByteArray: IntArray? = null,
   val aNullable8ByteArray: LongArray? = null,
@@ -103,7 +102,8 @@
   val nullableNestedList: List<List<Boolean?>?>? = null,
   val nullableMapWithAnnotations: Map<String?, String?>? = null,
   val nullableMapWithObject: Map<String?, Any?>? = null,
-  val aNullableEnum: AnEnum? = null
+  val aNullableEnum: AnEnum? = null,
+  val aNullableString: String? = null
 
 ) {
   companion object {
@@ -112,21 +112,20 @@
       val aNullableBool = list[0] as? Boolean
       val aNullableInt = list[1].let { if (it is Int) it.toLong() else it as? Long }
       val aNullableDouble = list[2] as? Double
-      val aNullableString = list[3] as? String
-      val aNullableByteArray = list[4] as? ByteArray
-      val aNullable4ByteArray = list[5] as? IntArray
-      val aNullable8ByteArray = list[6] as? LongArray
-      val aNullableFloatArray = list[7] as? DoubleArray
-      val aNullableList = list[8] as? List<Any?>
-      val aNullableMap = list[9] as? Map<Any, Any?>
-      val nullableNestedList = list[10] as? List<List<Boolean?>?>
-      val nullableMapWithAnnotations = list[11] as? Map<String?, String?>
-      val nullableMapWithObject = list[12] as? Map<String?, Any?>
-      val aNullableEnum: AnEnum? = (list[13] as? Int)?.let {
+      val aNullableByteArray = list[3] as? ByteArray
+      val aNullable4ByteArray = list[4] as? IntArray
+      val aNullable8ByteArray = list[5] as? LongArray
+      val aNullableFloatArray = list[6] as? DoubleArray
+      val aNullableList = list[7] as? List<Any?>
+      val aNullableMap = list[8] as? Map<Any, Any?>
+      val nullableNestedList = list[9] as? List<List<Boolean?>?>
+      val nullableMapWithAnnotations = list[10] as? Map<String?, String?>
+      val nullableMapWithObject = list[11] as? Map<String?, Any?>
+      val aNullableEnum: AnEnum? = (list[12] as? Int)?.let {
         AnEnum.ofRaw(it)
       }
-
-      return AllNullableTypes(aNullableBool, aNullableInt, aNullableDouble, aNullableString, aNullableByteArray, aNullable4ByteArray, aNullable8ByteArray, aNullableFloatArray, aNullableList, aNullableMap, nullableNestedList, nullableMapWithAnnotations, nullableMapWithObject, aNullableEnum)
+      val aNullableString = list[13] as? String
+      return AllNullableTypes(aNullableBool, aNullableInt, aNullableDouble, aNullableByteArray, aNullable4ByteArray, aNullable8ByteArray, aNullableFloatArray, aNullableList, aNullableMap, nullableNestedList, nullableMapWithAnnotations, nullableMapWithObject, aNullableEnum, aNullableString)
     }
   }
   fun toList(): List<Any?> {
@@ -134,7 +133,6 @@
       aNullableBool,
       aNullableInt,
       aNullableDouble,
-      aNullableString,
       aNullableByteArray,
       aNullable4ByteArray,
       aNullable8ByteArray,
@@ -145,6 +143,7 @@
       nullableMapWithAnnotations,
       nullableMapWithObject,
       aNullableEnum?.raw,
+      aNullableString,
     )
   }
 }
@@ -158,7 +157,6 @@
     @Suppress("UNCHECKED_CAST")
     fun fromList(list: List<Any?>): AllNullableTypesWrapper {
       val values = AllNullableTypes.fromList(list[0] as List<Any?>)
-
       return AllNullableTypesWrapper(values)
     }
   }
diff --git a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift
index ac439ca..4d35aff 100644
--- a/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift
+++ b/packages/pigeon/platform_tests/test_plugin/example/ios/RunnerTests/AllDatatypesTests.swift
@@ -40,7 +40,6 @@
       aNullableBool: false,
       aNullableInt: 1,
       aNullableDouble: 2.0,
-      aNullableString: "123",
       aNullableByteArray: FlutterStandardTypedData(bytes: "1234".data(using: .utf8)!),
       aNullable4ByteArray: FlutterStandardTypedData(int32: "1234".data(using: .utf8)!),
       aNullable8ByteArray: FlutterStandardTypedData(int64: "12345678".data(using: .utf8)!),
@@ -49,7 +48,8 @@
       aNullableMap: ["hello": 1234],
       nullableNestedList: [[true, false], [true]],
       nullableMapWithAnnotations: ["hello": "world"],
-      nullableMapWithObject: ["hello": 1234, "goodbye" : "world"]
+      nullableMapWithObject: ["hello": 1234, "goodbye" : "world"],
+      aNullableString: "123"
     )
     
     let binaryMessenger = EchoBinaryMessenger(codec: FlutterIntegrationCoreApiCodec.shared)
diff --git a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
index 522a9d7..f2c03de 100644
--- a/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
+++ b/packages/pigeon/platform_tests/test_plugin/ios/Classes/CoreTests.gen.swift
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 // 
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 import Foundation
@@ -39,7 +39,6 @@
   var aBool: Bool
   var anInt: Int32
   var aDouble: Double
-  var aString: String
   var aByteArray: FlutterStandardTypedData
   var a4ByteArray: FlutterStandardTypedData
   var a8ByteArray: FlutterStandardTypedData
@@ -47,32 +46,33 @@
   var aList: [Any?]
   var aMap: [AnyHashable: Any?]
   var anEnum: AnEnum
+  var aString: String
 
   static func fromList(_ list: [Any?]) -> AllTypes? {
     let aBool = list[0] as! Bool
     let anInt = list[1] as! Int32
     let aDouble = list[2] as! Double
-    let aString = list[3] as! String
-    let aByteArray = list[4] as! FlutterStandardTypedData
-    let a4ByteArray = list[5] as! FlutterStandardTypedData
-    let a8ByteArray = list[6] as! FlutterStandardTypedData
-    let aFloatArray = list[7] as! FlutterStandardTypedData
-    let aList = list[8] as! [Any?]
-    let aMap = list[9] as! [AnyHashable: Any?]
-    let anEnum = AnEnum(rawValue: list[10] as! Int)!
+    let aByteArray = list[3] as! FlutterStandardTypedData
+    let a4ByteArray = list[4] as! FlutterStandardTypedData
+    let a8ByteArray = list[5] as! FlutterStandardTypedData
+    let aFloatArray = list[6] as! FlutterStandardTypedData
+    let aList = list[7] as! [Any?]
+    let aMap = list[8] as! [AnyHashable: Any?]
+    let anEnum = AnEnum(rawValue: list[9] as! Int)!
+    let aString = list[10] as! String
 
     return AllTypes(
       aBool: aBool,
       anInt: anInt,
       aDouble: aDouble,
-      aString: aString,
       aByteArray: aByteArray,
       a4ByteArray: a4ByteArray,
       a8ByteArray: a8ByteArray,
       aFloatArray: aFloatArray,
       aList: aList,
       aMap: aMap,
-      anEnum: anEnum
+      anEnum: anEnum,
+      aString: aString
     )
   }
   func toList() -> [Any?] {
@@ -80,7 +80,6 @@
       aBool,
       anInt,
       aDouble,
-      aString,
       aByteArray,
       a4ByteArray,
       a8ByteArray,
@@ -88,6 +87,7 @@
       aList,
       aMap,
       anEnum.rawValue,
+      aString,
     ]
   }
 }
@@ -97,7 +97,6 @@
   var aNullableBool: Bool? = nil
   var aNullableInt: Int32? = nil
   var aNullableDouble: Double? = nil
-  var aNullableString: String? = nil
   var aNullableByteArray: FlutterStandardTypedData? = nil
   var aNullable4ByteArray: FlutterStandardTypedData? = nil
   var aNullable8ByteArray: FlutterStandardTypedData? = nil
@@ -108,31 +107,31 @@
   var nullableMapWithAnnotations: [String?: String?]? = nil
   var nullableMapWithObject: [String?: Any?]? = nil
   var aNullableEnum: AnEnum? = nil
+  var aNullableString: String? = nil
 
   static func fromList(_ list: [Any?]) -> AllNullableTypes? {
     let aNullableBool = list[0] as? Bool 
     let aNullableInt = list[1] as? Int32 
     let aNullableDouble = list[2] as? Double 
-    let aNullableString = list[3] as? String 
-    let aNullableByteArray = list[4] as? FlutterStandardTypedData 
-    let aNullable4ByteArray = list[5] as? FlutterStandardTypedData 
-    let aNullable8ByteArray = list[6] as? FlutterStandardTypedData 
-    let aNullableFloatArray = list[7] as? FlutterStandardTypedData 
-    let aNullableList = list[8] as? [Any?] 
-    let aNullableMap = list[9] as? [AnyHashable: Any?] 
-    let nullableNestedList = list[10] as? [[Bool?]?] 
-    let nullableMapWithAnnotations = list[11] as? [String?: String?] 
-    let nullableMapWithObject = list[12] as? [String?: Any?] 
+    let aNullableByteArray = list[3] as? FlutterStandardTypedData 
+    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData 
+    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData 
+    let aNullableFloatArray = list[6] as? FlutterStandardTypedData 
+    let aNullableList = list[7] as? [Any?] 
+    let aNullableMap = list[8] as? [AnyHashable: Any?] 
+    let nullableNestedList = list[9] as? [[Bool?]?] 
+    let nullableMapWithAnnotations = list[10] as? [String?: String?] 
+    let nullableMapWithObject = list[11] as? [String?: Any?] 
     var aNullableEnum: AnEnum? = nil
-    if let aNullableEnumRawValue = list[13] as? Int {
+    if let aNullableEnumRawValue = list[12] as? Int {
       aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
     }
+    let aNullableString = list[13] as? String 
 
     return AllNullableTypes(
       aNullableBool: aNullableBool,
       aNullableInt: aNullableInt,
       aNullableDouble: aNullableDouble,
-      aNullableString: aNullableString,
       aNullableByteArray: aNullableByteArray,
       aNullable4ByteArray: aNullable4ByteArray,
       aNullable8ByteArray: aNullable8ByteArray,
@@ -142,7 +141,8 @@
       nullableNestedList: nullableNestedList,
       nullableMapWithAnnotations: nullableMapWithAnnotations,
       nullableMapWithObject: nullableMapWithObject,
-      aNullableEnum: aNullableEnum
+      aNullableEnum: aNullableEnum,
+      aNullableString: aNullableString
     )
   }
   func toList() -> [Any?] {
@@ -150,7 +150,6 @@
       aNullableBool,
       aNullableInt,
       aNullableDouble,
-      aNullableString,
       aNullableByteArray,
       aNullable4ByteArray,
       aNullable8ByteArray,
@@ -161,6 +160,7 @@
       nullableMapWithAnnotations,
       nullableMapWithObject,
       aNullableEnum?.rawValue,
+      aNullableString,
     ]
   }
 }
diff --git a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
index 522a9d7..f2c03de 100644
--- a/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
+++ b/packages/pigeon/platform_tests/test_plugin/macos/Classes/CoreTests.gen.swift
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 // 
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 import Foundation
@@ -39,7 +39,6 @@
   var aBool: Bool
   var anInt: Int32
   var aDouble: Double
-  var aString: String
   var aByteArray: FlutterStandardTypedData
   var a4ByteArray: FlutterStandardTypedData
   var a8ByteArray: FlutterStandardTypedData
@@ -47,32 +46,33 @@
   var aList: [Any?]
   var aMap: [AnyHashable: Any?]
   var anEnum: AnEnum
+  var aString: String
 
   static func fromList(_ list: [Any?]) -> AllTypes? {
     let aBool = list[0] as! Bool
     let anInt = list[1] as! Int32
     let aDouble = list[2] as! Double
-    let aString = list[3] as! String
-    let aByteArray = list[4] as! FlutterStandardTypedData
-    let a4ByteArray = list[5] as! FlutterStandardTypedData
-    let a8ByteArray = list[6] as! FlutterStandardTypedData
-    let aFloatArray = list[7] as! FlutterStandardTypedData
-    let aList = list[8] as! [Any?]
-    let aMap = list[9] as! [AnyHashable: Any?]
-    let anEnum = AnEnum(rawValue: list[10] as! Int)!
+    let aByteArray = list[3] as! FlutterStandardTypedData
+    let a4ByteArray = list[4] as! FlutterStandardTypedData
+    let a8ByteArray = list[5] as! FlutterStandardTypedData
+    let aFloatArray = list[6] as! FlutterStandardTypedData
+    let aList = list[7] as! [Any?]
+    let aMap = list[8] as! [AnyHashable: Any?]
+    let anEnum = AnEnum(rawValue: list[9] as! Int)!
+    let aString = list[10] as! String
 
     return AllTypes(
       aBool: aBool,
       anInt: anInt,
       aDouble: aDouble,
-      aString: aString,
       aByteArray: aByteArray,
       a4ByteArray: a4ByteArray,
       a8ByteArray: a8ByteArray,
       aFloatArray: aFloatArray,
       aList: aList,
       aMap: aMap,
-      anEnum: anEnum
+      anEnum: anEnum,
+      aString: aString
     )
   }
   func toList() -> [Any?] {
@@ -80,7 +80,6 @@
       aBool,
       anInt,
       aDouble,
-      aString,
       aByteArray,
       a4ByteArray,
       a8ByteArray,
@@ -88,6 +87,7 @@
       aList,
       aMap,
       anEnum.rawValue,
+      aString,
     ]
   }
 }
@@ -97,7 +97,6 @@
   var aNullableBool: Bool? = nil
   var aNullableInt: Int32? = nil
   var aNullableDouble: Double? = nil
-  var aNullableString: String? = nil
   var aNullableByteArray: FlutterStandardTypedData? = nil
   var aNullable4ByteArray: FlutterStandardTypedData? = nil
   var aNullable8ByteArray: FlutterStandardTypedData? = nil
@@ -108,31 +107,31 @@
   var nullableMapWithAnnotations: [String?: String?]? = nil
   var nullableMapWithObject: [String?: Any?]? = nil
   var aNullableEnum: AnEnum? = nil
+  var aNullableString: String? = nil
 
   static func fromList(_ list: [Any?]) -> AllNullableTypes? {
     let aNullableBool = list[0] as? Bool 
     let aNullableInt = list[1] as? Int32 
     let aNullableDouble = list[2] as? Double 
-    let aNullableString = list[3] as? String 
-    let aNullableByteArray = list[4] as? FlutterStandardTypedData 
-    let aNullable4ByteArray = list[5] as? FlutterStandardTypedData 
-    let aNullable8ByteArray = list[6] as? FlutterStandardTypedData 
-    let aNullableFloatArray = list[7] as? FlutterStandardTypedData 
-    let aNullableList = list[8] as? [Any?] 
-    let aNullableMap = list[9] as? [AnyHashable: Any?] 
-    let nullableNestedList = list[10] as? [[Bool?]?] 
-    let nullableMapWithAnnotations = list[11] as? [String?: String?] 
-    let nullableMapWithObject = list[12] as? [String?: Any?] 
+    let aNullableByteArray = list[3] as? FlutterStandardTypedData 
+    let aNullable4ByteArray = list[4] as? FlutterStandardTypedData 
+    let aNullable8ByteArray = list[5] as? FlutterStandardTypedData 
+    let aNullableFloatArray = list[6] as? FlutterStandardTypedData 
+    let aNullableList = list[7] as? [Any?] 
+    let aNullableMap = list[8] as? [AnyHashable: Any?] 
+    let nullableNestedList = list[9] as? [[Bool?]?] 
+    let nullableMapWithAnnotations = list[10] as? [String?: String?] 
+    let nullableMapWithObject = list[11] as? [String?: Any?] 
     var aNullableEnum: AnEnum? = nil
-    if let aNullableEnumRawValue = list[13] as? Int {
+    if let aNullableEnumRawValue = list[12] as? Int {
       aNullableEnum = AnEnum(rawValue: aNullableEnumRawValue)
     }
+    let aNullableString = list[13] as? String 
 
     return AllNullableTypes(
       aNullableBool: aNullableBool,
       aNullableInt: aNullableInt,
       aNullableDouble: aNullableDouble,
-      aNullableString: aNullableString,
       aNullableByteArray: aNullableByteArray,
       aNullable4ByteArray: aNullable4ByteArray,
       aNullable8ByteArray: aNullable8ByteArray,
@@ -142,7 +141,8 @@
       nullableNestedList: nullableNestedList,
       nullableMapWithAnnotations: nullableMapWithAnnotations,
       nullableMapWithObject: nullableMapWithObject,
-      aNullableEnum: aNullableEnum
+      aNullableEnum: aNullableEnum,
+      aNullableString: aNullableString
     )
   }
   func toList() -> [Any?] {
@@ -150,7 +150,6 @@
       aNullableBool,
       aNullableInt,
       aNullableDouble,
-      aNullableString,
       aNullableByteArray,
       aNullable4ByteArray,
       aNullable8ByteArray,
@@ -161,6 +160,7 @@
       nullableMapWithAnnotations,
       nullableMapWithObject,
       aNullableEnum?.rawValue,
+      aNullableString,
     ]
   }
 }
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
index d205dbb..39fd2a8 100644
--- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.cpp
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #undef _HAS_EXCEPTIONS
@@ -31,11 +31,6 @@
 double AllTypes::a_double() const { return a_double_; }
 void AllTypes::set_a_double(double value_arg) { a_double_ = value_arg; }
 
-const std::string& AllTypes::a_string() const { return a_string_; }
-void AllTypes::set_a_string(std::string_view value_arg) {
-  a_string_ = value_arg;
-}
-
 const std::vector<uint8_t>& AllTypes::a_byte_array() const {
   return a_byte_array_;
 }
@@ -77,12 +72,16 @@
 const AnEnum& AllTypes::an_enum() const { return an_enum_; }
 void AllTypes::set_an_enum(const AnEnum& value_arg) { an_enum_ = value_arg; }
 
+const std::string& AllTypes::a_string() const { return a_string_; }
+void AllTypes::set_a_string(std::string_view value_arg) {
+  a_string_ = value_arg;
+}
+
 flutter::EncodableList AllTypes::ToEncodableList() const {
   return flutter::EncodableList{
       flutter::EncodableValue(a_bool_),
       flutter::EncodableValue(an_int_),
       flutter::EncodableValue(a_double_),
-      flutter::EncodableValue(a_string_),
       flutter::EncodableValue(a_byte_array_),
       flutter::EncodableValue(a4_byte_array_),
       flutter::EncodableValue(a8_byte_array_),
@@ -90,6 +89,7 @@
       flutter::EncodableValue(a_list_),
       flutter::EncodableValue(a_map_),
       flutter::EncodableValue((int)an_enum_),
+      flutter::EncodableValue(a_string_),
   };
 }
 
@@ -111,44 +111,44 @@
           std::get_if<double>(&encodable_a_double)) {
     a_double_ = *pointer_a_double;
   }
-  auto& encodable_a_string = list[3];
-  if (const std::string* pointer_a_string =
-          std::get_if<std::string>(&encodable_a_string)) {
-    a_string_ = *pointer_a_string;
-  }
-  auto& encodable_a_byte_array = list[4];
+  auto& encodable_a_byte_array = list[3];
   if (const std::vector<uint8_t>* pointer_a_byte_array =
           std::get_if<std::vector<uint8_t>>(&encodable_a_byte_array)) {
     a_byte_array_ = *pointer_a_byte_array;
   }
-  auto& encodable_a4_byte_array = list[5];
+  auto& encodable_a4_byte_array = list[4];
   if (const std::vector<int32_t>* pointer_a4_byte_array =
           std::get_if<std::vector<int32_t>>(&encodable_a4_byte_array)) {
     a4_byte_array_ = *pointer_a4_byte_array;
   }
-  auto& encodable_a8_byte_array = list[6];
+  auto& encodable_a8_byte_array = list[5];
   if (const std::vector<int64_t>* pointer_a8_byte_array =
           std::get_if<std::vector<int64_t>>(&encodable_a8_byte_array)) {
     a8_byte_array_ = *pointer_a8_byte_array;
   }
-  auto& encodable_a_float_array = list[7];
+  auto& encodable_a_float_array = list[6];
   if (const std::vector<double>* pointer_a_float_array =
           std::get_if<std::vector<double>>(&encodable_a_float_array)) {
     a_float_array_ = *pointer_a_float_array;
   }
-  auto& encodable_a_list = list[8];
+  auto& encodable_a_list = list[7];
   if (const flutter::EncodableList* pointer_a_list =
           std::get_if<flutter::EncodableList>(&encodable_a_list)) {
     a_list_ = *pointer_a_list;
   }
-  auto& encodable_a_map = list[9];
+  auto& encodable_a_map = list[8];
   if (const flutter::EncodableMap* pointer_a_map =
           std::get_if<flutter::EncodableMap>(&encodable_a_map)) {
     a_map_ = *pointer_a_map;
   }
-  auto& encodable_an_enum = list[10];
+  auto& encodable_an_enum = list[9];
   if (const int32_t* pointer_an_enum = std::get_if<int32_t>(&encodable_an_enum))
     an_enum_ = (AnEnum)*pointer_an_enum;
+  auto& encodable_a_string = list[10];
+  if (const std::string* pointer_a_string =
+          std::get_if<std::string>(&encodable_a_string)) {
+    a_string_ = *pointer_a_string;
+  }
 }
 
 // AllNullableTypes
@@ -185,18 +185,6 @@
   a_nullable_double_ = value_arg;
 }
 
-const std::string* AllNullableTypes::a_nullable_string() const {
-  return a_nullable_string_ ? &(*a_nullable_string_) : nullptr;
-}
-void AllNullableTypes::set_a_nullable_string(
-    const std::string_view* value_arg) {
-  a_nullable_string_ =
-      value_arg ? std::optional<std::string>(*value_arg) : std::nullopt;
-}
-void AllNullableTypes::set_a_nullable_string(std::string_view value_arg) {
-  a_nullable_string_ = value_arg;
-}
-
 const std::vector<uint8_t>* AllNullableTypes::a_nullable_byte_array() const {
   return a_nullable_byte_array_ ? &(*a_nullable_byte_array_) : nullptr;
 }
@@ -335,6 +323,18 @@
   a_nullable_enum_ = value_arg;
 }
 
+const std::string* AllNullableTypes::a_nullable_string() const {
+  return a_nullable_string_ ? &(*a_nullable_string_) : nullptr;
+}
+void AllNullableTypes::set_a_nullable_string(
+    const std::string_view* value_arg) {
+  a_nullable_string_ =
+      value_arg ? std::optional<std::string>(*value_arg) : std::nullopt;
+}
+void AllNullableTypes::set_a_nullable_string(std::string_view value_arg) {
+  a_nullable_string_ = value_arg;
+}
+
 flutter::EncodableList AllNullableTypes::ToEncodableList() const {
   return flutter::EncodableList{
       a_nullable_bool_ ? flutter::EncodableValue(*a_nullable_bool_)
@@ -343,8 +343,6 @@
                       : flutter::EncodableValue(),
       a_nullable_double_ ? flutter::EncodableValue(*a_nullable_double_)
                          : flutter::EncodableValue(),
-      a_nullable_string_ ? flutter::EncodableValue(*a_nullable_string_)
-                         : flutter::EncodableValue(),
       a_nullable_byte_array_ ? flutter::EncodableValue(*a_nullable_byte_array_)
                              : flutter::EncodableValue(),
       a_nullable4_byte_array_
@@ -370,6 +368,8 @@
           : flutter::EncodableValue(),
       a_nullable_enum_ ? flutter::EncodableValue((int)(*a_nullable_enum_))
                        : flutter::EncodableValue(),
+      a_nullable_string_ ? flutter::EncodableValue(*a_nullable_string_)
+                         : flutter::EncodableValue(),
   };
 }
 
@@ -393,65 +393,65 @@
           std::get_if<double>(&encodable_a_nullable_double)) {
     a_nullable_double_ = *pointer_a_nullable_double;
   }
-  auto& encodable_a_nullable_string = list[3];
-  if (const std::string* pointer_a_nullable_string =
-          std::get_if<std::string>(&encodable_a_nullable_string)) {
-    a_nullable_string_ = *pointer_a_nullable_string;
-  }
-  auto& encodable_a_nullable_byte_array = list[4];
+  auto& encodable_a_nullable_byte_array = list[3];
   if (const std::vector<uint8_t>* pointer_a_nullable_byte_array =
           std::get_if<std::vector<uint8_t>>(&encodable_a_nullable_byte_array)) {
     a_nullable_byte_array_ = *pointer_a_nullable_byte_array;
   }
-  auto& encodable_a_nullable4_byte_array = list[5];
+  auto& encodable_a_nullable4_byte_array = list[4];
   if (const std::vector<int32_t>* pointer_a_nullable4_byte_array =
           std::get_if<std::vector<int32_t>>(
               &encodable_a_nullable4_byte_array)) {
     a_nullable4_byte_array_ = *pointer_a_nullable4_byte_array;
   }
-  auto& encodable_a_nullable8_byte_array = list[6];
+  auto& encodable_a_nullable8_byte_array = list[5];
   if (const std::vector<int64_t>* pointer_a_nullable8_byte_array =
           std::get_if<std::vector<int64_t>>(
               &encodable_a_nullable8_byte_array)) {
     a_nullable8_byte_array_ = *pointer_a_nullable8_byte_array;
   }
-  auto& encodable_a_nullable_float_array = list[7];
+  auto& encodable_a_nullable_float_array = list[6];
   if (const std::vector<double>* pointer_a_nullable_float_array =
           std::get_if<std::vector<double>>(&encodable_a_nullable_float_array)) {
     a_nullable_float_array_ = *pointer_a_nullable_float_array;
   }
-  auto& encodable_a_nullable_list = list[8];
+  auto& encodable_a_nullable_list = list[7];
   if (const flutter::EncodableList* pointer_a_nullable_list =
           std::get_if<flutter::EncodableList>(&encodable_a_nullable_list)) {
     a_nullable_list_ = *pointer_a_nullable_list;
   }
-  auto& encodable_a_nullable_map = list[9];
+  auto& encodable_a_nullable_map = list[8];
   if (const flutter::EncodableMap* pointer_a_nullable_map =
           std::get_if<flutter::EncodableMap>(&encodable_a_nullable_map)) {
     a_nullable_map_ = *pointer_a_nullable_map;
   }
-  auto& encodable_nullable_nested_list = list[10];
+  auto& encodable_nullable_nested_list = list[9];
   if (const flutter::EncodableList* pointer_nullable_nested_list =
           std::get_if<flutter::EncodableList>(
               &encodable_nullable_nested_list)) {
     nullable_nested_list_ = *pointer_nullable_nested_list;
   }
-  auto& encodable_nullable_map_with_annotations = list[11];
+  auto& encodable_nullable_map_with_annotations = list[10];
   if (const flutter::EncodableMap* pointer_nullable_map_with_annotations =
           std::get_if<flutter::EncodableMap>(
               &encodable_nullable_map_with_annotations)) {
     nullable_map_with_annotations_ = *pointer_nullable_map_with_annotations;
   }
-  auto& encodable_nullable_map_with_object = list[12];
+  auto& encodable_nullable_map_with_object = list[11];
   if (const flutter::EncodableMap* pointer_nullable_map_with_object =
           std::get_if<flutter::EncodableMap>(
               &encodable_nullable_map_with_object)) {
     nullable_map_with_object_ = *pointer_nullable_map_with_object;
   }
-  auto& encodable_a_nullable_enum = list[13];
+  auto& encodable_a_nullable_enum = list[12];
   if (const int32_t* pointer_a_nullable_enum =
           std::get_if<int32_t>(&encodable_a_nullable_enum))
     a_nullable_enum_ = (AnEnum)*pointer_a_nullable_enum;
+  auto& encodable_a_nullable_string = list[13];
+  if (const std::string* pointer_a_nullable_string =
+          std::get_if<std::string>(&encodable_a_nullable_string)) {
+    a_nullable_string_ = *pointer_a_nullable_string;
+  }
 }
 
 // AllNullableTypesWrapper
diff --git a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
index 545a050..ee057d8 100644
--- a/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
+++ b/packages/pigeon/platform_tests/test_plugin/windows/pigeon/core_tests.gen.h
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Autogenerated from Pigeon (v6.0.1), do not edit directly.
+// Autogenerated from Pigeon (v6.0.2), do not edit directly.
 // See also: https://pub.dev/packages/pigeon
 
 #ifndef PIGEON_CORE_TESTS_GEN_H_
@@ -78,9 +78,6 @@
   double a_double() const;
   void set_a_double(double value_arg);
 
-  const std::string& a_string() const;
-  void set_a_string(std::string_view value_arg);
-
   const std::vector<uint8_t>& a_byte_array() const;
   void set_a_byte_array(const std::vector<uint8_t>& value_arg);
 
@@ -102,6 +99,9 @@
   const AnEnum& an_enum() const;
   void set_an_enum(const AnEnum& value_arg);
 
+  const std::string& a_string() const;
+  void set_a_string(std::string_view value_arg);
+
  private:
   AllTypes(const flutter::EncodableList& list);
   flutter::EncodableList ToEncodableList() const;
@@ -115,7 +115,6 @@
   bool a_bool_;
   int64_t an_int_;
   double a_double_;
-  std::string a_string_;
   std::vector<uint8_t> a_byte_array_;
   std::vector<int32_t> a4_byte_array_;
   std::vector<int64_t> a8_byte_array_;
@@ -123,6 +122,7 @@
   flutter::EncodableList a_list_;
   flutter::EncodableMap a_map_;
   AnEnum an_enum_;
+  std::string a_string_;
 };
 
 // Generated class from Pigeon that represents data sent in messages.
@@ -141,10 +141,6 @@
   void set_a_nullable_double(const double* value_arg);
   void set_a_nullable_double(double value_arg);
 
-  const std::string* a_nullable_string() const;
-  void set_a_nullable_string(const std::string_view* value_arg);
-  void set_a_nullable_string(std::string_view value_arg);
-
   const std::vector<uint8_t>* a_nullable_byte_array() const;
   void set_a_nullable_byte_array(const std::vector<uint8_t>* value_arg);
   void set_a_nullable_byte_array(const std::vector<uint8_t>& value_arg);
@@ -187,6 +183,10 @@
   void set_a_nullable_enum(const AnEnum* value_arg);
   void set_a_nullable_enum(const AnEnum& value_arg);
 
+  const std::string* a_nullable_string() const;
+  void set_a_nullable_string(const std::string_view* value_arg);
+  void set_a_nullable_string(std::string_view value_arg);
+
  private:
   AllNullableTypes(const flutter::EncodableList& list);
   flutter::EncodableList ToEncodableList() const;
@@ -201,7 +201,6 @@
   std::optional<bool> a_nullable_bool_;
   std::optional<int64_t> a_nullable_int_;
   std::optional<double> a_nullable_double_;
-  std::optional<std::string> a_nullable_string_;
   std::optional<std::vector<uint8_t>> a_nullable_byte_array_;
   std::optional<std::vector<int32_t>> a_nullable4_byte_array_;
   std::optional<std::vector<int64_t>> a_nullable8_byte_array_;
@@ -212,6 +211,7 @@
   std::optional<flutter::EncodableMap> nullable_map_with_annotations_;
   std::optional<flutter::EncodableMap> nullable_map_with_object_;
   std::optional<AnEnum> a_nullable_enum_;
+  std::optional<std::string> a_nullable_string_;
 };
 
 // Generated class from Pigeon that represents data sent in messages.
diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml
index 1f08613..eb16a67 100644
--- a/packages/pigeon/pubspec.yaml
+++ b/packages/pigeon/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
 repository: https://github.com/flutter/packages/tree/main/packages/pigeon
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apigeon
-version: 6.0.1 # This must match the version in lib/generator_tools.dart
+version: 6.0.2 # This must match the version in lib/generator_tools.dart
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/pigeon/test/kotlin_generator_test.dart b/packages/pigeon/test/kotlin_generator_test.dart
index aa4ec3e..a725a1b 100644
--- a/packages/pigeon/test/kotlin_generator_test.dart
+++ b/packages/pigeon/test/kotlin_generator_test.dart
@@ -59,6 +59,55 @@
     expect(code, contains('TWO(1)'));
   });
 
+  test('gen class with enum', () {
+    final Root root = Root(
+      apis: <Api>[],
+      classes: <Class>[
+        Class(
+          name: 'Bar',
+          fields: <NamedType>[
+            NamedType(
+              name: 'field1',
+              type: const TypeDeclaration(
+                baseName: 'Foo',
+                isNullable: false,
+              ),
+            ),
+            NamedType(
+              name: 'field2',
+              type: const TypeDeclaration(
+                baseName: 'String',
+                isNullable: false,
+              ),
+            ),
+          ],
+        ),
+      ],
+      enums: <Enum>[
+        Enum(
+          name: 'Foo',
+          members: <EnumMember>[
+            EnumMember(name: 'one'),
+            EnumMember(name: 'two'),
+          ],
+        ),
+      ],
+    );
+    final StringBuffer sink = StringBuffer();
+    const KotlinOptions kotlinOptions = KotlinOptions();
+    const KotlinGenerator generator = KotlinGenerator();
+    generator.generate(kotlinOptions, root, sink);
+    final String code = sink.toString();
+    expect(code, contains('enum class Foo(val raw: Int) {'));
+    expect(code, contains('data class Bar ('));
+    expect(code, contains('val field1: Foo,'));
+    expect(code, contains('val field2: String'));
+    expect(code, contains('fun fromList(list: List<Any?>): Bar'));
+    expect(code, contains('val field1 = Foo.ofRaw(list[0] as Int)!!\n'));
+    expect(code, contains('val field2 = list[1] as String\n'));
+    expect(code, contains('fun toList(): List<Any?>'));
+  });
+
   test('primitive enum host', () {
     final Root root = Root(apis: <Api>[
       Api(name: 'Bar', location: ApiLocation.host, methods: <Method>[
