Когда я запускаю код, ниже всегда появляется ошибка. Может ли кто-нибудь дать совет? Спасибо.
Ошибка: Не постоянное выражение.
страница.dart
MyButton(text: 'Get Started',onTap: (){Navigator.pushNamed(context,'/menupage');},),
кнопка.дротик
class MyButton extends StatelessWidget {final String text;final void Function()? onTap;
const MyButton({super.key,required this.text,required this.onTap,});
@override
Widget build(BuildContext context){
return GestureDetector(
onTap: onTap,
child: Container(
decoration: BoxDecoration(color: Color.white,),
padding: EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center
children: [
Text(
text,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,),),],
Привет, я удалил const, но ошибка все та же.
В вашем контейнере замените цвет: Color.white на цвет: Colors.white.
спасибо, это работает, после удаления const.
Удалите ключевое слово const из конструктора:
class MyButton extends StatelessWidget {
final String text;
final void Function()? onTap;
MyButton({super.key, required this.text, required this.onTap,});
Привет, все еще появляется та же ошибка '(
в какой строке выдает ошибку?
эта строка onTap: (){Navigator.pushNamed(context,'/menupage');},),
та же ошибка Not a constant expression
. вы получаете ?
да, та же ошибка - не постоянное выражение
можете ли вы обновить свой код?
Я переписываю код и удаляю const. Оно работает.
Учитывая ваш код для MyButton
, это:
class MyButton extends StatelessWidget {
final String text;
final void Function()? onTap;
const MyButton({
super.key,
required this.text,
required this.onTap,
});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onTap,
child: Container(
decoration: BoxDecoration(
color: Colors.white,
),
padding: const EdgeInsets.all(20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
text,
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
],
),
),
);
}
}
Судя по вашим комментариям, я предполагаю, что вы используете экземпляр виджета MyButton
следующим образом:
const MyButton(text: 'Get Started',onTap: (){Navigator.pushNamed(context,'/menupage');},);
^^^^^
Обратите внимание: НЕ следует использовать ключевое слово const
перед строкой MenuButton
. Это связано с тем, что вы назначаете функцию параметру onTap
, который не является константой времени компиляции.
Если вы не используете const
прямо перед MenuButton
, возможно, вы используете ключевое слово const
в конструкторе родительского виджета. Пожалуйста, удалите это, чтобы решить проблему.
Например:
const Row(
^^^^^
children: [
MyButton(text: 'Get Started', onTap: (){Navigator.pushNamed(context,'/menupage');},),
],
);
Надеюсь это поможет :)
спасибо, это работает после удаления const
Вы пытаетесь использовать конструктор, требующий константы, но конструктор не определен как константа. Удалите const перед вызовом MyButton({super.key,required this.text,required this.onTap,});