Введение в расширения в Dart
Расширение - отдельный блок кода, который дополняет уже объявленный тип новыми методами и геттерами. Сам класс при этом не переписывают и от него не наследуются: поведение «навешивают» снаружи, когда менять исходный файл нельзя или неудобно.
Такой прием удобен для типов из библиотек и для своих классов, когда логика вывода или форматирования живет отдельно от хранимых полей. Расширение видит публичные члены типа и может обращаться к ним внутри добавленных команд.
В Dart расширение объявляют словом extension, затем
имя блока и слово on с целевым типом. Методы расширения
вызывают у объекта этого типа обычной точкой, как если бы
они были записаны внутри класса.
Расширение не создает подкласс и не меняет память объекта: оно только добавляет способ вызвать новую команду у уже существующего экземпляра, не переписывая класс и не объявляя наследника с новым именем типа.