Я новичок и скрывался за просмотром списка, когда наткнулся на функцию «OnTap», но когда я ее реализовал, я получаю ошибку «Недопустимое постоянное значение». Мне приходится каждый раз нажимать на QuickFix, какое-нибудь решение для этой проблемы? я прикрепил изображение и код виджета
class navDrawer extends StatelessWidget {
const navDrawer({
super.key,
});
@override
Widget build(BuildContext context) {
return Drawer(
child: Column(children: <Widget>[
Expanded(
child: ListView(padding: EdgeInsets.zero, children: <Widget>[
const DrawerHeader(
decoration: BoxDecoration(
color: Colors.amber,
),
child: const Text(
'Labels',
style: TextStyle(fontSize: 50, color: Colors.black),
),
),
ListTile(
selectedColor: Colors.deepOrange,
selected: true,
focusColor: Colors.deepOrange,
leading: const Icon(Icons.label_important_outline),
title: const Text(
'Temporary',
style: TextStyle(fontSize: 30, color: Colors.blueGrey),
),
onTap: () {
//made it work by quickfix
print('Temporary');
},
),
const ListTile(
selectedColor: Colors.lightBlue,
leading: Icon(Icons.label_important),
title: const Text(
'Important',
style: TextStyle(fontSize: 30, color: Colors.blueGrey),
),
focusColor: Colors.cyan,
onTap:(){
//the one in the image
},
),
const ListTile(
leading: Icon(Icons.label_important),
title: const Text(
'Health',
style: TextStyle(fontSize: 30, color: Colors.blueGrey),
),
focusColor: Colors.cyan,
),
const ListTile(
leading: Icon(Icons.label_important),
title: const Text(
'Personal',
style: TextStyle(fontSize: 30, color: Colors.blueGrey),
),
focusColor: Colors.cyan,
)
]),
),
]),
);
}
}
Я пытался понять проблему и надеялся на решение.





const будет удален тот, который стоит перед ListTile. По сути, ListTile имеет конструктор констант, потому что onTap по умолчанию имеет значение null (а null является константой), однако когда вы добавляете функцию в аргумент onTap, она больше не будет константой (поскольку функции не являются константами). Теперь ваш ListTile больше не является постоянным, поэтому вам придется удалить объявление const перед ListTile.
Не волнуйтесь, это будет происходить очень часто при работе с Flutter.
Эта подсказка относится к const ListTile(... в коде, которым вы поделились. Судя по всему, как только вы добавите onTap в виджет плитки списка, он перестанет быть const.
Это не совсем так, вам просто нужно передать постоянное значение onTap, если вы хотите, чтобы ListTile было const. В dart анонимная функция не может быть константой, но функции верхнего уровня и статические функции считаются константами.
Хорошая мысль. Я использую исключительно анонимные функции, и это объясняет, почему я никогда этого не замечал.
Анонимные функции, подобные приведенным в примере кода, не являются константами, но функции верхнего уровня и статические функции рассматриваются в dart как константы.