Создать IconButton с формой Decorate дает недопустимое колебание постоянного значения - PullRequest
1 голос
/ 21 июня 2020

Я новичок в флаттере и ищу IconButton с овальным фоном.

Вот что я использую.

 Ink(
    decoration: const ShapeDecoration(
    color: Theme.of(context).accentColor,,
    shape: CircleBorder(),
     ),
   child: IconButton(
      icon: Icon(Icons.add),
      color: Theme.of(context).primaryColor,
      onPressed: () {},
      ),
 ),

Не могли бы вы сообщить мне как я могу добавить свой цвет Theme к этой кнопке, потому что у меня также есть темный режим, который изменяет цвета кнопок и фон и т. д. c, когда темный режим включен пользователем.

Ответы [ 2 ]

2 голосов
/ 22 июня 2020

Используя FlatButton, вы можете получить тот же результат.

FlatButton(
  onPressed: () {
  },
  color: Theme.of(context).hintColor.withOpacity(0.5),
  shape: CircleBorder(),
  child: Icon(Icons.add, color: Theme.of(context).primaryColor),
)
2 голосов
/ 21 июня 2020

Согласно официальным документам Ссылка здесь :

Вы должны иметь возможность установить цвет с помощью IconThemeData

Определяет цвет, непрозрачность и размер значков.

Используется IconTheme для управления цветом, непрозрачностью и размером значков в поддереве виджетов.

Чтобы получить текущую тему значков, используйте IconTheme.of .

Следовательно, IconButton необходимо присвоить свойство цвета, поскольку оно переопределяет свойство размера IconTheme. Если вы хотите, чтобы ваша кнопка имела цвет, полученный из IconTheme, вам следует создать свой собственный IconButton, который устанавливает цвет для вас.

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

...
IconThemeData(size: 48.0, color: currentThemeColor)
...

Кроме того, вам может потребоваться создать свой собственный IconButton:

class CustomIconButton extends StatelessWidget {
  CustomIconButton({Key key, this.onPressed, this.icon});

  final Function onPressed;
  final Icon icon;

  @override
  Widget build(BuildContext context) {
    IconThemeData iconThemeData = IconTheme.of(context);
    return IconButton(
        onPressed: onPressed, color: iconThemeData.color, icon: icon);
  }
}
...