#flutter #dart
Вопрос:
Я пытаюсь создать пользовательский класс кнопок:
import 'package:flutter/material.dart';
class PlayButton extends ElevatedButton {
PlayButton(
{required this.buttonText,
required this.buttonColor,
required this.onPress});
final void Function()? onPress;
final String buttonText;
final Color buttonColor;
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPress,
child: Text(
buttonText,
style: TextStyle(fontFamily: 'Verdana'),
),
style: ElevatedButton.styleFrom(
onPrimary: Colors.white,
primary: buttonColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50),
),
minimumSize: Size(100, 100),
),
);
}
}
Я получаю сообщение об ошибке со словами The superclass 'ElevatedButton' doesn't have a zero argument constructor.
Try declaring a zero argument constructor in 'ElevatedButton', or explicitly invoking a different constructor in 'ElevatedButton'.
Я могу написать конструктор как что-то вроде:
PlayButton(
{required this.buttonText,
required this.buttonColor,
required this.onPress})
: super(child: Text('a'), onPressed: null);
и удалите сообщение об ошибке, но все, что отображается, — это кнопка суперкласса по умолчанию (с текстом «а»). Итак, как я могу наследовать конструктор от родительского класса, имея при этом параметры, отличные от родительских?
Ответ №1:
Похоже, вам вообще не нужно наследовать ElevatedButton
. В любом случае Флаттер отдает предпочтение композиции, а не наследованию.
Просто удалите extends ElevatedButton
и используйте extends StatelessWidget
, и все будет в порядке.
Ответ №2:
Передайте свойства дочернего класса родительскому классу следующим образом:
PlayButton(
{required this.buttonText,
required this.buttonColor,
required this.onPress})
: super(child: Text(this.buttonText), onPressed: this.onPress);
Надеюсь, это должно решить проблему.