Dart. Flutter. The instance member 'iconSize' can't be accessed in an initializer

У меня есть простой Stateless Widget. В методе build я возвращаю строку с IconButton-ами, которые заранее определил в этом классе. Я хотел сделать эти кнопки одинаково размера и для того, чтобы не писать несколько раз в свойстве size виджета Icon одно и тоже число создал double переменную iconSize. При попытке пихнуть ее в свойство вместо числа, получаю ошибку The instance member 'iconSize' can't be accessed in an initializer.

Объясните пожалуйста почему возникает ошибка и как можно реализовать задумку правильно?

class ActionButtonsWidget extends StatelessWidget {
  
  double iconSize = 30;

  IconButton _startButton = IconButton(
      onPressed: (){},
      icon: const Icon(Icons.play_circle_outline_outlined, size: iconSize));

  IconButton _pauseButton = IconButton(
      onPressed: (){},
      icon: const Icon(Icons.pause_circle_outline_outlined, size: iconSize));

  IconButton _restartButton = IconButton(
      onPressed: (){},
      icon: const Icon(Icons.restart_alt_outlined, size: iconSize));

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        _startButton,
        _restartButton
      ],
    );
  }
}

Ответы (1 шт):

Автор решения: MiT

Происходит она потому что переменная инициализируется в момент создания класса, в этот момент доступа к другим не статичным переменным нет.

Ваша проблема решается двумя способами.

  1. Через static:
static const double iconSize = 30;
  1. Не выделять виджет в переменную:
class ActionButtonsWidget extends StatelessWidget {
  double iconSize = 30;

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        IconButton(
            onPressed: () {},
            icon: Icon(Icons.play_circle_outline_outlined, size: iconSize)),
      ],
    );
  }
}
→ Ссылка