Использование контекста вне метода сборки в виджете без состояния

#flutter #dart #mobile

Вопрос:

Я хочу достичь нескольких целей при реализации виджета:

  1. Использование виджета без состояния
  2. Использование темы для оформления виджета
  3. Избегайте вызова другого метода внутри метода сборки — по соображениям производительности (т. Е. Избегайте инициализации одних и тех же методов при каждой сборке)

давайте возьмем этот виджет для примера:

 class SomeWidget extends StatelessWidget {
  ButtonStyle _getStyle(context) {
    return ElevatedButton.styleFrom(primary: Theme.of(context).primaryColor);
  }

  @override
  Widget build(BuildContext context) {
    return Container(
        child: ElevatedButton(
            style: _getStyle(context),
            onPressed: () => ({}),
            child: Text("test")));
  }
}
 

функция _getStyle будет инициализироваться при каждом вызове сборки,
теперь, хотя это выглядит не так плохо, так как это всего лишь небольшой метод —
Я считаю это плохой практикой.
но у меня нет способа получить контекст вне метода сборки (и я все еще хочу использовать глобальные тематические данные).

если бы существовал какой — то механизм флаттера, предотвращающий многократное выполнение метода _getStyle в течение всего срока службы виджета, это также могло бы быть решением. (например, как часы в vue.js)

Как бы вы, эксперты по флаттеру, предложили подойти к этому?

Комментарии:

1. Разве это не относится только к виджетам с отслеживанием состояния? Я спрашиваю о виджетах без гражданства.

2. Вы действительно правы, извините!