Я новичок и скрывался за просмотром списка, когда наткнулся на функцию «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 как константы.