diff --git a/bin/fidlgen_dart/backend/templates/library.tmpl.go b/bin/fidlgen_dart/backend/templates/library.tmpl.go
index 8b97f6e..bb595df 100644
--- a/bin/fidlgen_dart/backend/templates/library.tmpl.go
+++ b/bin/fidlgen_dart/backend/templates/library.tmpl.go
@@ -53,6 +53,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 {{ range $const := .Consts -}}
 {{ template "ConstDeclaration" $const }}
diff --git a/bin/fidlgen_dart/backend/templates/struct.tmpl.go b/bin/fidlgen_dart/backend/templates/struct.tmpl.go
index ff46bf1..25c62e5 100644
--- a/bin/fidlgen_dart/backend/templates/struct.tmpl.go
+++ b/bin/fidlgen_dart/backend/templates/struct.tmpl.go
@@ -73,7 +73,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'{{ .Name }}' r'(
 {{- range $index, $member := .Members -}}
       {{- if $index }}, {{ end -}}{{ $member.Name  }}: ' + {{ $member.Name }}.toString() + r'
diff --git a/bin/fidlgen_dart/backend/templates/union.tmpl.go b/bin/fidlgen_dart/backend/templates/union.tmpl.go
index d7bab94..4ccb1b9 100644
--- a/bin/fidlgen_dart/backend/templates/union.tmpl.go
+++ b/bin/fidlgen_dart/backend/templates/union.tmpl.go
@@ -64,11 +64,11 @@
     switch (_ordinal) {
 {{- range .Members }}
       case {{ .Ordinal }}:
-        return '{{ $.Name }}.{{ .Name }}(${{ .Name }})';
+        return r'{{ $.Name }}.{{ .Name }}(' + {{ .Name }}.toString() +')';
 {{- end }}
       default:
 {{- if .IsFlexible }}
-        return '{{ $.Name }}.<UNKNOWN>';
+        return r'{{ $.Name }}.<UNKNOWN>';
 {{- else }}
         return null;
 {{- end }}
diff --git a/bin/fidlgen_dart/goldens/arrays.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/arrays.test.json_async.dart.golden
index 9e04eed..2ba9b48 100644
--- a/bin/fidlgen_dart/goldens/arrays.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/arrays.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum UnionSmallArrayTag {
   a, // 0x1
@@ -70,7 +71,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionSmallArray.a($a)';
+        return r'UnionSmallArray.a(' + a.toString() + ')';
       default:
         return null;
     }
@@ -145,7 +146,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionLargeArray.a($a)';
+        return r'UnionLargeArray.a(' + a.toString() + ')';
       default:
         return null;
     }
@@ -217,7 +218,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructSmallArray' r'(a: ' + a.toString() + r')';
   }
 
@@ -264,7 +264,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructLargeArray' r'(a: ' + a.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/bindings_denylist.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/bindings_denylist.test.json_async.dart.golden
index e114adc..d07d972 100644
--- a/bin/fidlgen_dart/goldens/bindings_denylist.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/bindings_denylist.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const int allBindings = 0x0;
 
diff --git a/bin/fidlgen_dart/goldens/bits.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/bits.test.json_async.dart.golden
index 69f4539..c311681 100644
--- a/bin/fidlgen_dart/goldens/bits.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/bits.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class MyBits extends $fidl.Bits {
   factory MyBits(int _v) {
diff --git a/bin/fidlgen_dart/goldens/byte_and_bytes.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/byte_and_bytes.test.json_async.dart.golden
index 05f85b3..aeb1b81 100644
--- a/bin/fidlgen_dart/goldens/byte_and_bytes.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/byte_and_bytes.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ByteAndBytes extends $fidl.Struct {
   const ByteAndBytes({
@@ -100,7 +101,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ByteAndBytes' r'(singleByte: ' +
         singleByte.toString() +
         r', manyBytes: ' +
diff --git a/bin/fidlgen_dart/goldens/consts.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/consts.test.json_async.dart.golden
index d309128..c12a5c8 100644
--- a/bin/fidlgen_dart/goldens/consts.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/consts.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const bool enabledFlag = true;
 
diff --git a/bin/fidlgen_dart/goldens/doc_comments.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/doc_comments.test.json_async.dart.golden
index 1739498..04355fd 100644
--- a/bin/fidlgen_dart/goldens/doc_comments.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/doc_comments.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// const comment #1
 ///
@@ -373,7 +374,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictUnion.field($field)';
+        return r'StrictUnion.field(' + field.toString() + ')';
       default:
         return null;
     }
@@ -455,9 +456,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FlexibleUnion.field($field)';
+        return r'FlexibleUnion.field(' + field.toString() + ')';
       default:
-        return 'FlexibleUnion.<UNKNOWN>';
+        return r'FlexibleUnion.<UNKNOWN>';
     }
   }
 
@@ -530,7 +531,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Struct' r'(field: ' + field.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/empty_struct.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/empty_struct.test.json_async.dart.golden
index 0b507a9..2772c94 100644
--- a/bin/fidlgen_dart/goldens/empty_struct.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/empty_struct.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Empty extends $fidl.Struct {
   const Empty({
@@ -66,7 +67,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Empty' r'(reserved: ' + reserved.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/encapsulated_structs.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/encapsulated_structs.test.json_async.dart.golden
index 3f5dc00..d98cc89 100644
--- a/bin/fidlgen_dart/goldens/encapsulated_structs.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/encapsulated_structs.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Int8Int32 extends $fidl.Struct {
   const Int8Int32({
@@ -73,7 +74,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Int8Int32' r'(a: ' + a.toString() + r', b: ' + b.toString() + r')';
   }
 
@@ -127,7 +127,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Int16Int8' r'(a: ' + a.toString() + r', b: ' + b.toString() + r')';
   }
 
@@ -175,7 +174,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ArrayInt16Int8' r'(arr: ' + arr.toString() + r')';
   }
 
@@ -235,7 +233,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructPaddingTestStruct' r'(trailing: ' +
         trailing.toString() +
         r', inner: ' +
@@ -307,7 +304,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'NonInlineStructTestStruct' r'(element: ' +
         element.toString() +
         r', h: ' +
@@ -368,7 +364,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'TopLevelStruct' r'(a: ' +
         a.toString() +
         r', b: ' +
diff --git a/bin/fidlgen_dart/goldens/enum.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/enum.test.json_async.dart.golden
index fd831fc..33e340a 100644
--- a/bin/fidlgen_dart/goldens/enum.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/enum.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class MyStrictEnum extends $fidl.Enum {
   factory MyStrictEnum(int _v) {
diff --git a/bin/fidlgen_dart/goldens/error.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/error.test.json_async.dart.golden
index 998bcc4..70bcfe1 100644
--- a/bin/fidlgen_dart/goldens/error.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/error.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum ExampleFooResultTag {
   response, // 0x1
@@ -83,9 +84,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExampleFooResult.response($response)';
+        return r'ExampleFooResult.response(' + response.toString() + ')';
       case 2:
-        return 'ExampleFooResult.err($err)';
+        return r'ExampleFooResult.err(' + err.toString() + ')';
       default:
         return null;
     }
@@ -156,7 +157,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ExampleFooResponse' r'(y: ' + y.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/escaping.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/escaping.test.json_async.dart.golden
index fa73cb8..3c6db08 100644
--- a/bin/fidlgen_dart/goldens/escaping.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/escaping.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 /// "pleaseescapethisdocommentproperly"
 class DocCommentWithQuotes extends $fidl.Struct {
@@ -67,7 +68,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'DocCommentWithQuotes' r'(reserved: ' + reserved.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/foreign_type_in_response_used_through_compose.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/foreign_type_in_response_used_through_compose.test.json_async.dart.golden
index 50fa603..13cb5ce 100644
--- a/bin/fidlgen_dart/goldens/foreign_type_in_response_used_through_compose.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/foreign_type_in_response_used_through_compose.test.json_async.dart.golden
@@ -38,6 +38,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/handles.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/handles.test.json_async.dart.golden
index 546c2b6..479a9f2 100644
--- a/bin/fidlgen_dart/goldens/handles.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/handles.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ObjType extends $fidl.Enum {
   factory ObjType(int _v) {
@@ -579,7 +580,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Handles' r'(plainHandle: ' +
         plainHandle.toString() +
         r', btiHandle: ' +
diff --git a/bin/fidlgen_dart/goldens/handles_in_types.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/handles_in_types.test.json_async.dart.golden
index ed7499b..ff677db 100644
--- a/bin/fidlgen_dart/goldens/handles_in_types.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/handles_in_types.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ObjType extends $fidl.Enum {
   factory ObjType(int _v) {
@@ -134,9 +135,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionWithHandle.h($h)';
+        return r'UnionWithHandle.h(' + h.toString() + ')';
       default:
-        return 'UnionWithHandle.<UNKNOWN>';
+        return r'UnionWithHandle.<UNKNOWN>';
     }
   }
 
@@ -247,7 +248,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'HandlesInTypes' r'(normalHandle: ' +
         normalHandle.toString() +
         r', handleInVec: ' +
diff --git a/bin/fidlgen_dart/goldens/inheritance.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/inheritance.test.json_async.dart.golden
index 28da188..701a6aa 100644
--- a/bin/fidlgen_dart/goldens/inheritance.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/inheritance.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/inheritance_with_recursive_decl.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/inheritance_with_recursive_decl.test.json_async.dart.golden
index f37495d..1bf64e9 100644
--- a/bin/fidlgen_dart/goldens/inheritance_with_recursive_decl.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/inheritance_with_recursive_decl.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/nullable.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/nullable.test.json_async.dart.golden
index e6e0f3a..6820a64 100644
--- a/bin/fidlgen_dart/goldens/nullable.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/nullable.test.json_async.dart.golden
@@ -37,6 +37,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum SimpleUnionTag {
   a, // 0x1
@@ -84,9 +85,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'SimpleUnion.a($a)';
+        return r'SimpleUnion.a(' + a.toString() + ')';
       case 2:
-        return 'SimpleUnion.b($b)';
+        return r'SimpleUnion.b(' + b.toString() + ')';
       default:
         return null;
     }
@@ -165,7 +166,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableString' r'(val: ' + val.toString() + r')';
   }
 
@@ -221,7 +221,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableVector' r'(val: ' + val.toString() + r')';
   }
 
@@ -276,7 +275,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableHandle' r'(val: ' + val.toString() + r')';
   }
 
@@ -332,7 +330,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableProtocol' r'(val: ' + val.toString() + r')';
   }
 
@@ -389,7 +386,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableRequest' r'(val: ' + val.toString() + r')';
   }
 
@@ -438,7 +434,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Int32Wrapper' r'(val: ' + val.toString() + r')';
   }
 
@@ -492,7 +487,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableStruct' r'(val: ' + val.toString() + r')';
   }
 
@@ -547,7 +541,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableUnion' r'(val: ' + val.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/padding.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/padding.test.json_async.dart.golden
index dd018a6..39ab837 100644
--- a/bin/fidlgen_dart/goldens/padding.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/padding.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Padding1ByteEnd extends $fidl.Struct {
   const Padding1ByteEnd({
@@ -73,7 +74,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding1ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -132,7 +132,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding2ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -191,7 +190,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding3ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -250,7 +248,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding4ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -316,7 +313,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding5ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -378,7 +374,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding6ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -437,7 +432,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding7ByteEnd' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -496,7 +490,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding1ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -555,7 +548,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding2ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -614,7 +606,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding3ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -673,7 +664,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding4ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -739,7 +729,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding5ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -801,7 +790,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding6ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -860,7 +848,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding7ByteMiddle' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -933,7 +920,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding4ByteAlignmentLength12' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -1007,7 +993,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Padding2ByteAlignmentLength6' r'(a: ' +
         a.toString() +
         r', b: ' +
diff --git a/bin/fidlgen_dart/goldens/placement_of_attributes.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/placement_of_attributes.test.json_async.dart.golden
index 7d8f75b..ab805f5 100644
--- a/bin/fidlgen_dart/goldens/placement_of_attributes.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/placement_of_attributes.test.json_async.dart.golden
@@ -37,6 +37,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 const int exampleConst = 0x0;
 
@@ -184,7 +185,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExampleUnion.variant($variant)';
+        return r'ExampleUnion.variant(' + variant.toString() + ')';
       default:
         return null;
     }
@@ -263,9 +264,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExampleXUnion.variant($variant)';
+        return r'ExampleXUnion.variant(' + variant.toString() + ')';
       default:
-        return 'ExampleXUnion.<UNKNOWN>';
+        return r'ExampleXUnion.<UNKNOWN>';
     }
   }
 
@@ -332,7 +333,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ExampleStruct' r'(member: ' + member.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/protocol_request.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/protocol_request.test.json_async.dart.golden
index 2ad30b5..d5fa2b7 100644
--- a/bin/fidlgen_dart/goldens/protocol_request.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/protocol_request.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/protocols.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/protocols.test.json_async.dart.golden
index df59148..c70b89e 100644
--- a/bin/fidlgen_dart/goldens/protocols.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/protocols.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ObjType extends $fidl.Enum {
   factory ObjType(int _v) {
@@ -200,9 +201,13 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'WithErrorSyntaxResponseAsStructResult.response($response)';
+        return r'WithErrorSyntaxResponseAsStructResult.response(' +
+            response.toString() +
+            ')';
       case 2:
-        return 'WithErrorSyntaxResponseAsStructResult.err($err)';
+        return r'WithErrorSyntaxResponseAsStructResult.err(' +
+            err.toString() +
+            ')';
       default:
         return null;
     }
@@ -295,9 +300,13 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'WithErrorSyntaxErrorAsPrimitiveResult.response($response)';
+        return r'WithErrorSyntaxErrorAsPrimitiveResult.response(' +
+            response.toString() +
+            ')';
       case 2:
-        return 'WithErrorSyntaxErrorAsPrimitiveResult.err($err)';
+        return r'WithErrorSyntaxErrorAsPrimitiveResult.err(' +
+            err.toString() +
+            ')';
       default:
         return null;
     }
@@ -390,9 +399,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'WithErrorSyntaxErrorAsEnumResult.response($response)';
+        return r'WithErrorSyntaxErrorAsEnumResult.response(' +
+            response.toString() +
+            ')';
       case 2:
-        return 'WithErrorSyntaxErrorAsEnumResult.err($err)';
+        return r'WithErrorSyntaxErrorAsEnumResult.err(' + err.toString() + ')';
       default:
         return null;
     }
@@ -479,7 +490,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'WithErrorSyntaxResponseAsStructResponse' r'(a: ' +
         a.toString() +
         r', b: ' +
@@ -536,7 +546,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'WithErrorSyntaxErrorAsPrimitiveResponse' r'(reserved: ' +
         reserved.toString() +
         r')';
@@ -587,7 +596,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'WithErrorSyntaxErrorAsEnumResponse' r'(reserved: ' +
         reserved.toString() +
         r')';
diff --git a/bin/fidlgen_dart/goldens/request_flexible_envelope.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/request_flexible_envelope.test.json_async.dart.golden
index e1ec4d0..f4aadbe 100644
--- a/bin/fidlgen_dart/goldens/request_flexible_envelope.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/request_flexible_envelope.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum FlexibleFooTag {
   $unknown,
@@ -89,11 +90,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FlexibleFoo.s($s)';
+        return r'FlexibleFoo.s(' + s.toString() + ')';
       case 2:
-        return 'FlexibleFoo.i($i)';
+        return r'FlexibleFoo.i(' + i.toString() + ')';
       default:
-        return 'FlexibleFoo.<UNKNOWN>';
+        return r'FlexibleFoo.<UNKNOWN>';
     }
   }
 
@@ -179,9 +180,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictFoo.s($s)';
+        return r'StrictFoo.s(' + s.toString() + ')';
       case 2:
-        return 'StrictFoo.i($i)';
+        return r'StrictFoo.i(' + i.toString() + ')';
       default:
         return null;
     }
diff --git a/bin/fidlgen_dart/goldens/service.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/service.test.json_async.dart.golden
index 3a1064c..ccb4240 100644
--- a/bin/fidlgen_dart/goldens/service.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/service.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/struct.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/struct.test.json_async.dart.golden
index bc6cf43..d761568 100644
--- a/bin/fidlgen_dart/goldens/struct.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/struct.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Simple extends $fidl.Struct {
   const Simple({
@@ -73,7 +74,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Simple' r'(f1: ' +
         f1.toString() +
         r', f2: ' +
@@ -132,7 +132,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'BasicStruct' r'(x: ' +
         x.toString() +
         r', y: ' +
diff --git a/bin/fidlgen_dart/goldens/struct_default_value_enum_library_reference.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/struct_default_value_enum_library_reference.test.json_async.dart.golden
index 7e57abc..705c9b8 100644
--- a/bin/fidlgen_dart/goldens/struct_default_value_enum_library_reference.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/struct_default_value_enum_library_reference.test.json_async.dart.golden
@@ -37,6 +37,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Foo extends $fidl.Struct {
   const Foo({
@@ -67,7 +68,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Foo' r'(field: ' + field.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/table.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/table.test.json_async.dart.golden
index dc3f4cc..41c7f9f 100644
--- a/bin/fidlgen_dart/goldens/table.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/table.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class EmptyTable extends $fidl.Table {
   const EmptyTable({
diff --git a/bin/fidlgen_dart/goldens/transitive_dependencies.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/transitive_dependencies.test.json_async.dart.golden
index 95fbd56..cb6ac23 100644
--- a/bin/fidlgen_dart/goldens/transitive_dependencies.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/transitive_dependencies.test.json_async.dart.golden
@@ -37,6 +37,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class Baz extends $fidl.Struct {
   const Baz({
@@ -67,7 +68,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Baz' r'(g: ' + g.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/transitive_dependencies_compose.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/transitive_dependencies_compose.test.json_async.dart.golden
index bdc23ff..764b459 100644
--- a/bin/fidlgen_dart/goldens/transitive_dependencies_compose.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/transitive_dependencies_compose.test.json_async.dart.golden
@@ -38,6 +38,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 // ignore: unused_element, avoid_private_typedef_functions
 typedef _VoidCallback = void Function();
diff --git a/bin/fidlgen_dart/goldens/type_aliases.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/type_aliases.test.json_async.dart.golden
index b1787ad..4d1c01f 100644
--- a/bin/fidlgen_dart/goldens/type_aliases.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/type_aliases.test.json_async.dart.golden
@@ -37,6 +37,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ObjType extends $fidl.Enum {
   factory ObjType(int _v) {
@@ -227,7 +228,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ExampleOfUseOfAliases' r'(fieldOfU32: ' +
         fieldOfU32.toString() +
         r', fieldOfVecAtMostFiveOfString: ' +
diff --git a/bin/fidlgen_dart/goldens/union.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/union.test.json_async.dart.golden
index 3ebe9cb..71f5e45 100644
--- a/bin/fidlgen_dart/goldens/union.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/union.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum PizzaOrPastaTag {
   pizza, // 0x1
@@ -83,9 +84,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'PizzaOrPasta.pizza($pizza)';
+        return r'PizzaOrPasta.pizza(' + pizza.toString() + ')';
       case 2:
-        return 'PizzaOrPasta.pasta($pasta)';
+        return r'PizzaOrPasta.pasta(' + pasta.toString() + ')';
       default:
         return null;
     }
@@ -173,9 +174,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExplicitPizzaOrPasta.pizza($pizza)';
+        return r'ExplicitPizzaOrPasta.pizza(' + pizza.toString() + ')';
       case 4:
-        return 'ExplicitPizzaOrPasta.pasta($pasta)';
+        return r'ExplicitPizzaOrPasta.pasta(' + pasta.toString() + ')';
       default:
         return null;
     }
@@ -271,11 +272,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FlexiblePizzaOrPasta.pizza($pizza)';
+        return r'FlexiblePizzaOrPasta.pizza(' + pizza.toString() + ')';
       case 2:
-        return 'FlexiblePizzaOrPasta.pasta($pasta)';
+        return r'FlexiblePizzaOrPasta.pasta(' + pasta.toString() + ')';
       default:
-        return 'FlexiblePizzaOrPasta.<UNKNOWN>';
+        return r'FlexiblePizzaOrPasta.<UNKNOWN>';
     }
   }
 
@@ -361,9 +362,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictPizzaOrPasta.pizza($pizza)';
+        return r'StrictPizzaOrPasta.pizza(' + pizza.toString() + ')';
       case 2:
-        return 'StrictPizzaOrPasta.pasta($pasta)';
+        return r'StrictPizzaOrPasta.pasta(' + pasta.toString() + ')';
       default:
         return null;
     }
@@ -464,11 +465,15 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'Union.primitive($primitive)';
+        return r'Union.primitive(' + primitive.toString() + ')';
       case 2:
-        return 'Union.stringNeedsConstructor($stringNeedsConstructor)';
+        return r'Union.stringNeedsConstructor(' +
+            stringNeedsConstructor.toString() +
+            ')';
       case 3:
-        return 'Union.vectorStringAlsoNeedsConstructor($vectorStringAlsoNeedsConstructor)';
+        return r'Union.vectorStringAlsoNeedsConstructor(' +
+            vectorStringAlsoNeedsConstructor.toString() +
+            ')';
       default:
         return null;
     }
@@ -581,13 +586,17 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FlexibleUnion.primitive($primitive)';
+        return r'FlexibleUnion.primitive(' + primitive.toString() + ')';
       case 2:
-        return 'FlexibleUnion.stringNeedsConstructor($stringNeedsConstructor)';
+        return r'FlexibleUnion.stringNeedsConstructor(' +
+            stringNeedsConstructor.toString() +
+            ')';
       case 3:
-        return 'FlexibleUnion.vectorStringAlsoNeedsConstructor($vectorStringAlsoNeedsConstructor)';
+        return r'FlexibleUnion.vectorStringAlsoNeedsConstructor(' +
+            vectorStringAlsoNeedsConstructor.toString() +
+            ')';
       default:
-        return 'FlexibleUnion.<UNKNOWN>';
+        return r'FlexibleUnion.<UNKNOWN>';
     }
   }
 
@@ -694,11 +703,15 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictUnion.primitive($primitive)';
+        return r'StrictUnion.primitive(' + primitive.toString() + ')';
       case 2:
-        return 'StrictUnion.stringNeedsConstructor($stringNeedsConstructor)';
+        return r'StrictUnion.stringNeedsConstructor(' +
+            stringNeedsConstructor.toString() +
+            ')';
       case 3:
-        return 'StrictUnion.vectorStringAlsoNeedsConstructor($vectorStringAlsoNeedsConstructor)';
+        return r'StrictUnion.vectorStringAlsoNeedsConstructor(' +
+            vectorStringAlsoNeedsConstructor.toString() +
+            ')';
       default:
         return null;
     }
@@ -781,7 +794,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FieldCollision.fieldCollisionTag($fieldCollisionTag)';
+        return r'FieldCollision.fieldCollisionTag(' +
+            fieldCollisionTag.toString() +
+            ')';
       default:
         return null;
     }
@@ -867,9 +882,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExplicitUnion.primitive($primitive)';
+        return r'ExplicitUnion.primitive(' + primitive.toString() + ')';
       case 3:
-        return 'ExplicitUnion.stringNeedsConstructor($stringNeedsConstructor)';
+        return r'ExplicitUnion.stringNeedsConstructor(' +
+            stringNeedsConstructor.toString() +
+            ')';
       default:
         return null;
     }
@@ -957,9 +974,9 @@
   String toString() {
     switch (_ordinal) {
       case 2:
-        return 'ReverseOrdinalUnion.second($second)';
+        return r'ReverseOrdinalUnion.second(' + second.toString() + ')';
       case 1:
-        return 'ReverseOrdinalUnion.first($first)';
+        return r'ReverseOrdinalUnion.first(' + first.toString() + ')';
       default:
         return null;
     }
@@ -1053,11 +1070,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'FlexibleFoo.s($s)';
+        return r'FlexibleFoo.s(' + s.toString() + ')';
       case 2:
-        return 'FlexibleFoo.i($i)';
+        return r'FlexibleFoo.i(' + i.toString() + ')';
       default:
-        return 'FlexibleFoo.<UNKNOWN>';
+        return r'FlexibleFoo.<UNKNOWN>';
     }
   }
 
@@ -1143,9 +1160,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictFoo.s($s)';
+        return r'StrictFoo.s(' + s.toString() + ')';
       case 2:
-        return 'StrictFoo.i($i)';
+        return r'StrictFoo.i(' + i.toString() + ')';
       default:
         return null;
     }
@@ -1238,11 +1255,11 @@
   String toString() {
     switch (_ordinal) {
       case 2:
-        return 'ExplicitFoo.s($s)';
+        return r'ExplicitFoo.s(' + s.toString() + ')';
       case 1:
-        return 'ExplicitFoo.i($i)';
+        return r'ExplicitFoo.i(' + i.toString() + ')';
       default:
-        return 'ExplicitFoo.<UNKNOWN>';
+        return r'ExplicitFoo.<UNKNOWN>';
     }
   }
 
@@ -1328,9 +1345,9 @@
   String toString() {
     switch (_ordinal) {
       case 3:
-        return 'ExplicitStrictFoo.s($s)';
+        return r'ExplicitStrictFoo.s(' + s.toString() + ')';
       case 2:
-        return 'ExplicitStrictFoo.i($i)';
+        return r'ExplicitStrictFoo.i(' + i.toString() + ')';
       default:
         return null;
     }
@@ -1425,11 +1442,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'OlderSimpleUnion.i($i)';
+        return r'OlderSimpleUnion.i(' + i.toString() + ')';
       case 2:
-        return 'OlderSimpleUnion.f($f)';
+        return r'OlderSimpleUnion.f(' + f.toString() + ')';
       default:
-        return 'OlderSimpleUnion.<UNKNOWN>';
+        return r'OlderSimpleUnion.<UNKNOWN>';
     }
   }
 
@@ -1535,13 +1552,13 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'NewerSimpleUnion.i($i)';
+        return r'NewerSimpleUnion.i(' + i.toString() + ')';
       case 2:
-        return 'NewerSimpleUnion.s($s)';
+        return r'NewerSimpleUnion.s(' + s.toString() + ')';
       case 3:
-        return 'NewerSimpleUnion.v($v)';
+        return r'NewerSimpleUnion.v(' + v.toString() + ')';
       default:
-        return 'NewerSimpleUnion.<UNKNOWN>';
+        return r'NewerSimpleUnion.<UNKNOWN>';
     }
   }
 
@@ -1648,11 +1665,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictSimpleXUnion.i($i)';
+        return r'StrictSimpleXUnion.i(' + i.toString() + ')';
       case 2:
-        return 'StrictSimpleXUnion.f($f)';
+        return r'StrictSimpleXUnion.f(' + f.toString() + ')';
       case 3:
-        return 'StrictSimpleXUnion.s($s)';
+        return r'StrictSimpleXUnion.s(' + s.toString() + ')';
       default:
         return null;
     }
@@ -1738,9 +1755,9 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'XUnionContainingEmptyStruct.empty($empty)';
+        return r'XUnionContainingEmptyStruct.empty(' + empty.toString() + ')';
       default:
-        return 'XUnionContainingEmptyStruct.<UNKNOWN>';
+        return r'XUnionContainingEmptyStruct.<UNKNOWN>';
     }
   }
 
@@ -1813,7 +1830,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'StrictBoundedXUnion.v($v)';
+        return r'StrictBoundedXUnion.v(' + v.toString() + ')';
       default:
         return null;
     }
@@ -1908,11 +1925,11 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'ExplicitXUnion.i($i)';
+        return r'ExplicitXUnion.i(' + i.toString() + ')';
       case 4:
-        return 'ExplicitXUnion.f($f)';
+        return r'ExplicitXUnion.f(' + f.toString() + ')';
       default:
-        return 'ExplicitXUnion.<UNKNOWN>';
+        return r'ExplicitXUnion.<UNKNOWN>';
     }
   }
 
@@ -1984,7 +2001,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Pizza' r'(toppings: ' + toppings.toString() + r')';
   }
 
@@ -2030,7 +2046,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Pasta' r'(sauce: ' + sauce.toString() + r')';
   }
 
@@ -2082,7 +2097,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'NullableUnionStruct' r'(theUnion: ' + theUnion.toString() + r')';
   }
 
@@ -2130,7 +2144,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'Empty' r'(reserved: ' + reserved.toString() + r')';
   }
 
@@ -2182,7 +2195,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructWithNullableXUnion' r'(x1: ' + x1.toString() + r')';
   }
 
diff --git a/bin/fidlgen_dart/goldens/union_sandwich.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/union_sandwich.test.json_async.dart.golden
index 94c5882..15e63b7 100644
--- a/bin/fidlgen_dart/goldens/union_sandwich.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/union_sandwich.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 enum UnionSize8Alignment4Tag {
   variant, // 0x1
@@ -70,7 +71,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionSize8Alignment4.variant($variant)';
+        return r'UnionSize8Alignment4.variant(' + variant.toString() + ')';
       default:
         return null;
     }
@@ -143,7 +144,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionSize12Alignment4.variant($variant)';
+        return r'UnionSize12Alignment4.variant(' + variant.toString() + ')';
       default:
         return null;
     }
@@ -216,7 +217,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionSize24Alignment8.variant($variant)';
+        return r'UnionSize24Alignment8.variant(' + variant.toString() + ')';
       default:
         return null;
     }
@@ -289,7 +290,7 @@
   String toString() {
     switch (_ordinal) {
       case 1:
-        return 'UnionSize36Alignment4.variant($variant)';
+        return r'UnionSize36Alignment4.variant(' + variant.toString() + ')';
       default:
         return null;
     }
@@ -372,7 +373,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'SandwichUnionSize8Alignment4' r'(before: ' +
         before.toString() +
         r', union: ' +
@@ -443,7 +443,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'SandwichUnionSize12Alignment4' r'(before: ' +
         before.toString() +
         r', union: ' +
@@ -507,7 +506,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'StructSize16Alignment8' r'(f1: ' +
         f1.toString() +
         r', f2: ' +
@@ -574,7 +572,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'SandwichUnionSize24Alignment8' r'(before: ' +
         before.toString() +
         r', union: ' +
@@ -645,7 +642,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'SandwichUnionSize36Alignment4' r'(before: ' +
         before.toString() +
         r', union: ' +
diff --git a/bin/fidlgen_dart/goldens/vectors.test.json_async.dart.golden b/bin/fidlgen_dart/goldens/vectors.test.json_async.dart.golden
index 47dc475..f218173 100644
--- a/bin/fidlgen_dart/goldens/vectors.test.json_async.dart.golden
+++ b/bin/fidlgen_dart/goldens/vectors.test.json_async.dart.golden
@@ -36,6 +36,7 @@
 // ignore_for_file: unnecessary_lambdas
 // ignore_for_file: comment_references
 // ignore_for_file: avoid_unused_constructor_parameters
+// ignore_for_file: prefer_interpolation_to_compose_strings
 
 class ExampleUseOfVectors extends $fidl.Struct {
   const ExampleUseOfVectors({
@@ -79,7 +80,6 @@
 
   @override
   String toString() {
-    // ignore: prefer_interpolation_to_compose_strings
     return r'ExampleUseOfVectors' r'(vectorOfUint8: ' +
         vectorOfUint8.toString() +
         r', vectorOfVectorOfBool: ' +
