Есть ли способ настроить дублированный класс?

#flutter #dart

Вопрос:

Я все еще относительно новичок в кодировании и только еще изучаю dart. Я сделал несколько одинаковых кнопок с помощью классов, как мне настроить каждую кнопку индивидуально, пожалуйста, можете ли вы помочь. Вот код: Код кнопки:

 class JeffButton extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return  Padding(
      padding: const EdgeInsets.fromLTRB(0.0, 9.0, 0.0, 0.0),
      child: TextButton.icon(
        onPressed: () => {},
        icon: Column(
          children: [
            Icon(
              Icons.add,
              color: Colors.white,
              size: 85,
            ),
            Padding(
              padding: const EdgeInsets.all(10.0),
              child: Text(
                'Label',
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
            ),
          ],
        ),
        label: Text(
          '', //'Label',
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
    );

  }
}
 

Другой Код:

 class home_buttons {
  List<Widget> jeffButtons = [
  JeffButton(),
  JeffButton(),
  JeffButton(),
  JeffButton(),
  JeffButton(),
  JeffButton(),
];
}
 

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

1. Вы можете передавать свойства через конструктор класса.

Ответ №1:

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

Так, например, если вы хотите настроить метку заголовка, присвойте title свойству класса:

 class JeffButton extends StatelessWidget {
  final String title;

  JeffButton({required this.title});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.fromLTRB(0.0, 9.0, 0.0, 0.0),
      child: TextButton.icon(
        onPressed: () => {},
        label: Text(
          title, // Use the title property to set the label text,
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
    );
  }
}
 

Затем вы можете установить разные названия для каждой кнопки:

 final continueButton = JeffButton(title: 'Continue');
final cancelButton = JeffButton(title: 'Cancel');
 

Ответ №2:

Вы можете создавать конструкторы, вот пример заполнения.

 class JeffButton extends StatelessWidget {

   EdgeInsetsGeometry padding;      

   JeffButton({this.padding = EdgeInsets.all(8)});

    @override
    Widget build(BuildContext context) {

    return  Padding(
      padding: padding,
    );
    
   }
}
    
 

Вы можете использовать его как:

 JeffButton(padding: EdgeInsets.all(10));