Как создать класс для виджетов кнопок

#dart #flutter

#dart #флаттер

Вопрос:

У меня будет куча кнопок в моем приложении flutter, и я хочу создать для него класс, чтобы мне не нужно было копировать-вставлять его и заставлять мой код выглядеть длинным для кода того же типа. Я создаю класс, проблем нет, но я борюсь, потому что хочу, чтобы каждая кнопка переходила на другую страницу при нажатии. Как этого добиться?

 class thebuttonmaka extends StatelessWidget {
  final String texxt;
  final String buum;
  const thebuttonmaka(this.texxt);

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Padding(
      padding: EdgeInsets.only(top: 30),
      child: Material(
        elevation: 5,
        borderRadius: BorderRadius.circular(30),
        color: Colors.lightBlue,
        child: MaterialButton(
          minWidth: 250,
          padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
          onPressed: WHAT TO PUT HERE?,
          child: Text(texxt,
              textAlign: TextAlign.center,
              style: TextStyle(fontSize: 20)
                  .copyWith(color: Colors.white, fontWeight: FontWeight.bold)),
        ),
      ),
    );
  }
}  

Итак, мне в основном нужна помощь, куда я помещаю то, что нужно поместить здесь. Я хочу добавить эту опцию в конструктор, чтобы всякий раз, когда я вызываю класс, я мог указать, куда переходит кнопка. Пример
thebuttonmaka(‘регистрация’, регистрация)

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

1. Просто вопрос стиля… имена классов рекомендуется начинать с заглавной буквы: dartlang.org/guides/language/effective-dart /…

2. Я не использую заглавные буквы с классами.

3. Зачем бороться с руководством по стилю?

4. Вот как я кодирую и буду кодировать bud

Ответ №1:

 class thebuttonmaka extends StatelessWidget {
  final String texxt;
  final String buum;
  final Function function; // add this
  const thebuttonmaka(this.texxt, this.function, this.buum); // change this

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Padding(
      padding: EdgeInsets.only(top: 30),
      child: Material(
        elevation: 5,
        borderRadius: BorderRadius.circular(30),
        color: Colors.lightBlue,
        child: MaterialButton(
          minWidth: 250,
          padding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),
          onPressed: function, // add this here
          child: Text(texxt,
              textAlign: TextAlign.center,
              style: TextStyle(fontSize: 20)
                  .copyWith(color: Colors.white, fontWeight: FontWeight.bold)),
        ),
      ),
    );
  }
}
  

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

 thebuttonmaka('signup',signuppage)
  

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

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

2. Ну, я не знаю, кто это сделал, но ваш ответ правильный. Я ценю это

Ответ №2:

Вы можете определить свой класс следующим образом и настроить буквально все, что касается вашей кнопки (вы также можете передать выравнивание текста и стиль, я просто показываю пример) —

 class CommonButton {
      static MaterialButton myButton(BuildContext context, int width, int l, int t, int r, int b, func, String text) {
        return MaterialButton(
              minWidth: width,
              padding: EdgeInsets.fromLTRB(l, t, r, b),
              onPressed: func,
              child: Text(text,
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 20)
                      .copyWith(color: Colors.white, fontWeight: FontWeight.bold)),
            );
      }
     }
  

Если вы хотите использовать это где-нибудь, просто назовите это так —

 CommonButton.myButton(...)
  

(Очевидно, вы также должны передать onPressed функцию)