Как расширить виджет со всем своим имуществом - PullRequest
0 голосов
/ 10 февраля 2020

здесь я создал класс, который возвращает виджет IconButton.

class IconBtn extends StatelessWidget {

  const IconBtn({
    Key key,
    this.onPressed,
    this.clr,
    @required this.icon,

  }) : super(key: key);

  final VoidCallback onPressed;
  final IconClass icon;

  @override
  Widget build(BuildContext context) {

    return IconButton (
      onPressed: (){},
      color: Colors.red,
      icon: icon,
    );

  }
} 

, тогда при вызове класса я мог получить доступ только к свойствам, которые я уже определил в классе IconBtn. Я хочу использовать все свойства IconButton с расширением другого класса. предложения приветствуются ..!

 Widget build(BuildContext context) {

    return IconBtn (
            icon: IconClass(icon :Icons.search),
            onPressed: () {},
          )
}

1 Ответ

1 голос
/ 10 февраля 2020

IconBtn - это StatelessWidget, который не имеет отношения к классу IconButton, за исключением того, что он использует его в своей функции сборки. Каждое свойство, которое вы видите для IconBtn, является его параметром конструктора, то есть, если вы не определите все свойства IconButton как свойство класса IconBtn, вы не сможете получить доступ ко всем свойствам IconButton.

Примечание: Даже если вы определите все свойства IconButton в IconBtn, это свойства класса IconBtn, а не IconButton, но вы можете передать эти значения в IconButton класс, как вы показали в своем собственном примере.

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


Как предложил @huextrat, вы можете передать сам виджет IconButton в качестве одного из параметров, чтобы решить вашу проблему, если вы действительно хотите, чтобы все свойства IconButton, но обычно нам нужны только некоторые свойства.

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