diff --git a/packages/material_ui/tool/gen_defaults/templates/template.dart b/packages/material_ui/tool/gen_defaults/templates/template.dart
index a2ddba2..91101fc 100644
--- a/packages/material_ui/tool/gen_defaults/templates/template.dart
+++ b/packages/material_ui/tool/gen_defaults/templates/template.dart
@@ -102,14 +102,27 @@
   String number(num value) => value.toString();
 
   /// Generates a [ColorScheme] color expression for the given token.
-  String color(TokenColorRole role, String prefix) => '$prefix.${role.name}';
+  String color(TokenColorRole role, String prefix) {
+    final String colorName = switch (role) {
+      TokenColorRole.inverseOnSurface => 'onInverseSurface',
+      _ => role.name,
+    };
+    return '$prefix.$colorName';
+  }
 
   /// Generates a color expression with opacity applied.
   String colorWithOpacity(TokenColorRole role, double opacity, String prefix) {
+    final String colorExpression = color(role, prefix);
     if (opacity == 1.0) {
-      return color(role, prefix);
+      return colorExpression;
     }
-    return '${color(role, prefix)}.withOpacity(${number(opacity)})';
+    final String opacityValue = number(opacity);
+    return switch (_version) {
+      // TODO(QuncCccccc): Update M3 defaults to use withValues(alpha:) once
+      // all existing M3 templates have migrated to the new generator.
+      _MaterialVersion.material3 => '$colorExpression.withOpacity($opacityValue)',
+      _MaterialVersion.material3Expressive => '$colorExpression.withValues(alpha: $opacityValue)',
+    };
   }
 
   /// Generate a [BorderSide] for the given component.
diff --git a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart
index 58c4b86..8ff0ad0 100644
--- a/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart
+++ b/packages/material_ui/tool/gen_defaults/test/gen_defaults_test.dart
@@ -115,6 +115,10 @@
     test('color generates color expression', () {
       final template = IconButtonTemplateM3(testPath());
       expect(template.color(TokenColorRole.onSurface, '_colors'), '_colors.onSurface');
+      expect(
+        template.color(TokenColorRole.inverseOnSurface, '_colors'),
+        '_colors.onInverseSurface',
+      );
     });
 
     test('textStyle generates text name', () {
@@ -129,18 +133,40 @@
       );
     });
 
-    test('colorWithOpacity generates color expression with opacity', () {
+    // M3 templates intentionally keep the deprecated withOpacity output until
+    // all existing M3 templates have migrated to the new generator.
+    test('M3 colorWithOpacity generates color expression with opacity', () {
       final template = IconButtonTemplateM3(testPath());
       expect(
         template.colorWithOpacity(TokenColorRole.onSurface, 0.12, '_colors'),
         '_colors.onSurface.withOpacity(0.12)',
       );
       expect(
+        template.colorWithOpacity(TokenColorRole.inverseOnSurface, 0.12, '_colors'),
+        '_colors.onInverseSurface.withOpacity(0.12)',
+      );
+      expect(
         template.colorWithOpacity(TokenColorRole.onSurface, 1.0, '_colors'),
         '_colors.onSurface',
       );
     });
 
+    test('M3E colorWithOpacity uses withValues', () {
+      final template = IconButtonTemplateM3E(testPath());
+      expect(
+        template.colorWithOpacity(TokenColorRole.onSurface, 0.12, '_colors'),
+        '_colors.onSurface.withValues(alpha: 0.12)',
+      );
+      expect(
+        template.colorWithOpacity(TokenColorRole.inverseOnSurface, 0.12, '_colors'),
+        '_colors.onInverseSurface.withValues(alpha: 0.12)',
+      );
+      expect(
+        template.colorWithOpacity(TokenColorRole.inverseOnSurface, 1.0, '_colors'),
+        '_colors.onInverseSurface',
+      );
+    });
+
     test('border generates border expression', () {
       final template = IconButtonTemplateM3(testPath());
       expect(template.border('_colors.outline'), 'BorderSide(color: _colors.outline)');
