Как писать кнопки в Web на Flutter чтобы при наведении и нажатии не мылились button’ы?

Вопрос, который вы задали, относится к теме разработки веб-приложений с использованием Flutter. Как вы, вероятно, уже знаете, Flutter - это кросс-платформенный UI-фреймворк, который позволяет разработчикам создавать интерактивные и красивые пользовательские интерфейсы как для мобильных устройств, так и для веб- и настольных платформ.

Для создания кнопок в вебе с использованием Flutter вы можете использовать виджет ElevatedButton или OutlinedButton. Оба этих виджета поддерживают различные состояния, такие как наведение курсора и нажатие, и автоматически применяют стиль, чтобы кнопки выглядели соответствующим образом.

Однако в случае веба, по умолчанию поведение кнопок Flutter может выглядеть несколько отличным от ожидаемого. При наведении или нажатии кнопки могут выглядеть "мыливыми", то есть некоторые пользователи могут считать, что цвет или прозрачность кнопок не соответствуют их представлению о том, как кнопки должны выглядеть вместо этого.

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

Вот пример кода, демонстрирующий, как это можно сделать:

ElevatedButton(
  style: ButtonStyle(
    overlayColor: MaterialStateProperty.resolveWith<Color>(
      (Set<MaterialState> states) {
        if (states.contains(MaterialState.hovered)) {
          return Colors.transparent;  // цвет кнопки при наведении
        }
        if (states.contains(MaterialState.pressed)) {
          return Colors.grey.withOpacity(0.4);  // цвет кнопки при нажатии
        }
        return null;  // оставить прозрачность и цвет по умолчанию
      },
    ),
  ),
  onPressed: () {},
  child: Text('Кнопка'),
);

В этом примере мы настраиваем стиль кнопки с помощью ButtonStyle. Внутри ButtonStyle мы используем overlayColor, который устанавливает цвет, применяемый к кнопке при наведении или нажатии. Мы используем MaterialStateProperty.resolveWith для определения цвета в зависимости от состояния кнопки.

Таким образом, при наведении на кнопку она будет оставаться непрозрачной или менять свой цвет в соответствии с вашими требованиями, и не будет "мылиться".

Надеюсь, что эта информация будет полезна для вас и поможет решить вашу проблему. Если у вас есть дополнительные вопросы, не стесняйтесь задавать их.