tree 75aedf57164bd4b0bf5e2674f7edf4ef6447e0bb
parent 600787891afd9de2ac5b4594bb815e087266117f
author Nate <nate.w5687@gmail.com> 1713197167 -0500
committer GitHub <noreply@github.com> 1713197167 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsFcBAABCAAQBQJmHVBvCRC1aQ7uu5UhlAAABcoQAFtrPdYbePBNspS+PXLPV82Z
 OHNvsBeXB6ly4HzZljFP1sNMxzat/hxLzaR96Vkkd9BOb/8u7kMltUPcmRGrSFyj
 papIpOnVPrTIPm9KPoc2gc8gVgVf+8jojwyIcKSDgpW2V9xmcnBhADZQwrcNQEdT
 /FfEqbPlSUjgbRb/iWK2yLTrKXGKR+M4DBn3vWomrmylyCU3AjGpQt6Qv+o3qsL+
 IXAZQRSBSnjr1RDkPhVN+1NYncuB1Z0/sBA+nJtswVjcjJeEhfJmbVn+dRNeMrRI
 viPVmKQGRXzJLR6EtXTmX1yV3dP1qvGFH2le9hcmnFczBnc7q/EP5hqV6xytKzYU
 hBDYQPKStDbrzQI9zkui7wvnediNS39vMuw2quS9HIR3/br5YCchrppdTdrDYenC
 /1iKslmhhyN4mE5UvaMvBWf2mWqlSRwHHRK11+3alH8ELhAhnxf9WCSMY7zoeIsV
 GL0i7YNdvfq8majc8kiwBvya9jLp5Du8Bv1/Bwgq59loFv45Kw8EZqnSMhZwiy23
 C+L1N8wcIcU+2SY7GBT37v+vdPCaL8+PMV4e3io4EPDzGo7P2B2bgL+QCrtGM5v0
 QXPxjLhSjJNvPje2Mc8MnOkY46L9KSp7C2xvpbZose3JIZ4JmONl9gFK1FwVpAkp
 fyTSvNpSTkmn1Y+YIjf/
 =BOKl
 -----END PGP SIGNATURE-----
 

Implementing control flow collections (#146601)

This pull request aims for improved readability, based on issue #146600.

```dart
// before
Set<Color> _distinctVisibleColors() {
  final Set<Color> distinctVisibleColors = <Color>{};
  if (top.style != BorderStyle.none) {
    distinctVisibleColors.add(top.color);
  }
  if (right.style != BorderStyle.none) {
    distinctVisibleColors.add(right.color);
  }
  if (bottom.style != BorderStyle.none) {
    distinctVisibleColors.add(bottom.color);
  }
  if (left.style != BorderStyle.none) {
    distinctVisibleColors.add(left.color);
  }
  return distinctVisibleColors;
}

// after
Set<Color> _distinctVisibleColors() {
  return <Color>{
    if (top.style != BorderStyle.none) top.color,
    if (right.style != BorderStyle.none) right.color,
    if (bottom.style != BorderStyle.none) bottom.color,
    if (left.style != BorderStyle.none) left.color,
  };
}
```

Most of the repo should be covered in this PR (aside from `flutter_tools/`, since there was a lot going on in there).