Ошибка Flutter: тип аргумента «двойной?» не может быть присвоен типу параметра «двойной»

Я новичок в разработке Flutter, при запуске все было хорошо, но теперь каждый раз, когда я запускаю приложение apy, я получаю следующую ошибку. Пожалуйста, покажите мне несколько способов это исправить.

C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.8.0/lib/palettes/tonal_palette.dart:164:30: Error: The argument type 'double?' can't be assigned to the parameter type 'double' because 'double?' is nullable and 'double' isn't.
        tone, () => Hct.from(_hue, chroma, tone.toDouble()).toInt());
                             ^
/C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/material_color_utilities-0.8.0/lib/palettes/tonal_palette.dart:164:36: Error: The argument type 'double?' can't be assigned to the parameter type 'double' because 'double?' is nullable and 'double' isn't.
        tone, () => Hct.from(_hue, chroma, tone.toDouble()).toInt());
                                   ^
/C:/Users/Admin/AppData/Local/Pub/Cache/hosted/pub.dev/collection-1.18.0/lib/src/canonicalized_map.dart:175:47: Error: Method 'call' cannot be called on 'bool Function(K)?' because it is potentially null.
Try calling using ?. instead.
      (_isValidKeyFn == null || _isValidKeyFn.call(key) ?? false);
                                              ^^^^
Failed to compile application.

Я попробовал «dart fix --apply», также пытался внести некоторые изменения, упомянутые в чате, но у меня ничего не работает. Возможно, я делаю какие-то ошибки.

Можете ли вы поделиться кодом, из-за которого возникает эта ошибка?

tomerpacific 13.07.2024 09:24
Стоит ли изучать 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
1
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Причина в том, что типы, допускающие значение NULL, и их аналоги, не допускающие значения NULL, являются разными типами в системе типов dart.

При преобразовании типа, допускающего значение NULL, в тип, допускающий значение NULL, вам следует сделать одно из двух:

  1. Если вы уверены, что получаете ненулевое значение, вы можете применить ненулевой оператор утверждения:
double? xOrNull = mayBeGetX();
double x = xOrNull!; // Not-null assertion
  1. В противном случае вы должны явно проверить, является ли он нулевым, и что-то сделать с этим случаем (ошибка, исключение, сообщение журнала и т. д.).

Подробности читайте здесь Дартс: понимание нулевой безопасности

это потому, что вы неправильно используете нулевую безопасность.

значение double? такое же, как и double or null, а методы toDouble и toInt нельзя использовать с нулевым значением, поэтому это причина ошибки компиляции.

double? x = 0.0;
// if you are sure that x is not null you put an ! sign after x and the result is not nullable
int y = x!.toInt();
// if you are not sure, you put ? after x and the result is nullable
int? y = x?.toInt();

по второй ошибке я не понял твоих намерений

(_isValidKeyFn == null || _isValidKeyFn.call(key) ?? false)

если вы хотите вернуть true, когда функция _isValidKeyFn имеет значение null, но false, когда функция не равна нулю, но имеет тип возвращаемого значения null тогда правильное выражение: (обратите внимание на ! после _isValidKeyFn)

(_isValidKeyFn == null || _isValidKeyFn!.call(key) ?? false)

но если вы намерены вернуть false, даже если функция на самом деле равна нулю, тогда правильное выражение:

_isValidKeyFn?.call(key) ?? false
Ответ принят как подходящий

Похоже, проблема вызвана базовым пакетом. Вы случайно не редактировали файлы C:/Users/Admin/AppData/Local/Pub/Cache/.../?

Кроме того, я проверил версии collection и material_color_utilities на pub.dev. У них обоих есть более новые версии. Итак, чтобы решить эту проблему, вы можете просто запустить команду обновления pup:

flutter pub upgrade

Или запустите команду pub outdated и вручную измените версии ваших зависимостей в файле pubpsec.yaml на основе выходных данных.

flutter pub outdated

Надеюсь это поможет.

Я удалил весь пакет flutter и переустановил его, развернув zip-файл Flutter. это решило проблему.

Arnab 13.07.2024 11:53

Потрясающий! Приятно слышать, что проблема решена. Если вы столкнетесь с этим в будущем, подсказка: есть команда (flutter pub cache clean), позволяющая удалить все пакеты, хранящиеся в этом каталоге .../Pub/Cache/.... Приятного кодирования!

HeySreelal 13.07.2024 16:00

Спасибо за подсказку, чувак! оценил это!

Arnab 14.07.2024 19:24

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