#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
функцию)