Существует ли «невидимая» константа, такая как ключевое слово во флаттере?

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

Я пытался понять проблему и надеялся на решение.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

const будет удален тот, который стоит перед ListTile. По сути, ListTile имеет конструктор констант, потому что onTap по умолчанию имеет значение null (а null является константой), однако когда вы добавляете функцию в аргумент onTap, она больше не будет константой (поскольку функции не являются константами). Теперь ваш ListTile больше не является постоянным, поэтому вам придется удалить объявление const перед ListTile.

Не волнуйтесь, это будет происходить очень часто при работе с Flutter.

Анонимные функции, подобные приведенным в примере кода, не являются константами, но функции верхнего уровня и статические функции рассматриваются в dart как константы.

mmcdon20 21.08.2024 21:16

Эта подсказка относится к const ListTile(... в коде, которым вы поделились. Судя по всему, как только вы добавите onTap в виджет плитки списка, он перестанет быть const.

Это не совсем так, вам просто нужно передать постоянное значение onTap, если вы хотите, чтобы ListTile было const. В dart анонимная функция не может быть константой, но функции верхнего уровня и статические функции считаются константами.

mmcdon20 21.08.2024 21:24

Хорошая мысль. Я использую исключительно анонимные функции, и это объясняет, почему я никогда этого не замечал.

puf - Frank van Puffelen 21.08.2024 22:53

Другие вопросы по теме