Kostia Sokolovskyi 46c8606b88
Fix Gradient.scale not preserving transformation. (#179493)
Fixes https://github.com/flutter/flutter/issues/163972

### Description
- Fixes `Gradient.scale` methods to not lose transform

| BEFORE | AFTER |
| - | - |
| <img width="481" height="515" alt="before"
src="https://github.com/user-attachments/assets/c9644fed-4016-4dea-9e39-c5c5fa311cee"
/> | <img width="481" height="515" alt="after"
src="https://github.com/user-attachments/assets/f77629e3-4d7e-49fb-9e8f-d044e3dd348c"
/> |

<details closed><summary>Code sample</summary>

```dart
import 'package:flutter/material.dart';

void main() => runApp(const GradientScaleBug());

class GradientScaleBug extends StatelessWidget {
  const GradientScaleBug({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Padding(
          padding: const EdgeInsets.all(10),
          child: Column(
            spacing: 10,
            children: [
              Expanded(
                child: Row(
                  spacing: 10,
                  children: [
                    _buildGradientContainer(
                      LinearGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                        ],
                        transform: GradientRotation(0.7853981634),
                      ),
                    ),
                    _buildGradientContainer(
                      LinearGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                        ],
                        transform: GradientRotation(0.7853981634),
                      ).scale(0.5),
                    ),
                  ],
                ),
              ),
              Expanded(
                child: Row(
                  spacing: 10,
                  children: [
                    _buildGradientContainer(
                      RadialGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                        ],
                        center: Alignment.topCenter,
                        transform: GradientRotation(0.7853981634),
                      ),
                    ),
                    _buildGradientContainer(
                      RadialGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                        ],
                        center: Alignment.topCenter,
                        transform: GradientRotation(0.7853981634),
                      ).scale(0.5),
                    ),
                  ],
                ),
              ),
              Expanded(
                child: Row(
                  spacing: 10,
                  children: [
                    _buildGradientContainer(
                      SweepGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                          Color(0xFFCC5555),
                        ],
                        center: Alignment.topCenter,
                        transform: GradientRotation(0.7853981634),
                      ),
                    ),
                    _buildGradientContainer(
                      SweepGradient(
                        colors: [
                          Color(0xFFCC5555),
                          Color(0xFF55BB55),
                          Color(0xFF5555CC),
                          Color(0xFFCC5555),
                        ],
                        center: Alignment.topCenter,
                        transform: GradientRotation(0.7853981634),
                      ).scale(0.5),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildGradientContainer(Gradient gradient) {
    return Expanded(
      child: DecoratedBox(
        decoration: BoxDecoration(gradient: gradient),
        child: const SizedBox.expand(),
      ),
    );
  }
}
```

</details>

## Pre-launch Checklist

- [X] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [X] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [X] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [X] I signed the [CLA].
- [X] I listed at least one issue that this PR fixes in the description
above.
- [ ] I updated/added relevant documentation (doc comments with `///`).
- [X] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [X] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [X] All existing and new tests are passing.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
2026-01-05 10:15:18 +00:00
..