Я новичок в разработке 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», также пытался внести некоторые изменения, упомянутые в чате, но у меня ничего не работает. Возможно, я делаю какие-то ошибки.
Причина в том, что типы, допускающие значение NULL, и их аналоги, не допускающие значения NULL, являются разными типами в системе типов dart.
При преобразовании типа, допускающего значение NULL, в тип, допускающий значение NULL, вам следует сделать одно из двух:
double? xOrNull = mayBeGetX();
double x = xOrNull!; // Not-null assertion
Подробности читайте здесь Дартс: понимание нулевой безопасности
это потому, что вы неправильно используете нулевую безопасность.
значение 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. это решило проблему.
Потрясающий! Приятно слышать, что проблема решена. Если вы столкнетесь с этим в будущем, подсказка: есть команда (flutter pub cache clean
), позволяющая удалить все пакеты, хранящиеся в этом каталоге .../Pub/Cache/...
. Приятного кодирования!
Спасибо за подсказку, чувак! оценил это!
Можете ли вы поделиться кодом, из-за которого возникает эта ошибка?