Error: Field 'wLanguage' cannot be nullable or have type 'Null', it must be `int`, `double`, `Pointer`, or a subtype of `Struct` or `Union`
当运行flutter build appbundle
命令时,我得到了以下错误:
../../.pub-cache/hosted/pub.dev/package_info_plus_windows-2.1.0/lib/src/file_version_info.dart:13:17:
Error: Field 'wLanguage' cannot be nullable or have type 'Null', it must be `int`, `double`, `Pointer`, or a subtype of `Struct` or `Union`.
external int? wLanguage;
^
../../.pub-cache/hosted/pub.dev/package_info_plus_windows-2.1.0/lib/src/file_version_info.dart:16:17:
Error: Field 'wCodePage' cannot be nullable or have type 'Null', it must be `int`, `double`, `Pointer`, or a subtype of `Struct` or `Union`.
external int? wCodePage;
^
Target kernel_snapshot failed: Exception
FAILURE: Build failed with an exception.
我正在使用Flutter 3.10.0。在我更新flutter版本之前,该项目运行良好。
upgrading
导致错误的插件?
- Clevino Alrin 2023-05-17
package_info_plus windows
插件是由flutter内部使用的,我想我无法控制它。
- Gedeon Mutshipayi 2023-05-17
pubspec.yaml
中的所有软件包,但错误仍然存在。
- Gedeon Mutshipayi 2023-05-17
对我来说是 flutter screen utils 和 google font
我做的第一件事是运行
flutter pub upgrade
或flutter pub upgrade --major-versions
然后我把android文件夹中的ext.kotlin改成最新的,然后建立gradle,以
ext.kotlin = '1.6.20'
到ext.kotlin_version = '1.8.21'
然后我就可以运行我的项目了,我希望这对我有帮助。
我最终通过在我的项目的pubspec.yaml
中重写这些包来解决我的问题。
dependency_overrides:
package_info_plus: ^4.0.1
wakelock_windows: any
win32: any
或
dependency_overrides:
package_info_plus: any
由于我的项目依赖性,将package_info_plus
重写为^4.0.1
给我带来了以下错误信息。
Because no versions of wakelock_windows match >0.2.1 <0.3.0 and wakelock_windows <0.2.1 depends on win32 ^2.0.0, wakelock_windows <0.2.1-∞ or >0.2.1 <0.3.0 requires win32 ^2.0.0. And because wakelock_windows 0.2.1 depends on win32 ^3.0.0, wakelock_windows <0.3.0 requires win32 ^2.0.0 or ^3.0.0. And because package_info_plus >=4.0.1 depends on win32 >=4.0.0 <6.0.0 and wakelock 0.6.2 depends on wakelock_windows ^0.2.0, package_info_plus >=4.0.1 is incompatible with wakelock 0.6.2. Because chewie >=1.3.5 depends on wakelock ^0.6.2 and no versions of wakelock match >0.6.2 <0.7.0, chewie >=1.3.5 requires wakelock 0.6.2. Thus, package_info_plus >=4.0.1 is incompatible with chewie >=1.3.5. So, because start depends on both chewie ^1.4.0 and package_info_plus ^4.0.1, version solving failed.
如果你在覆盖package_info_plus
后有类似的信息,你可以检查依赖的软件包,并将它们添加到dependency_overrides
中,然后像我上面的例子那样将版本设置为any
。
Any
关键字可以用来指定一个包的任何版本都可以接受。如果你想确保你的应用程序与某个包的最新版本兼容,或者你想避免在某个包的未来版本中可能引入的破坏性变化,这可能很有用。
我也有同样的问题,我通过进入我的file_version_info文件,使它们不能为空,解决了我的问题。
例子:从这个:
class _LANGANDCODEPAGE extends Struct {
@Uint16()
external int? wLanguage;
@Uint16()
external int? wCodePage;
}
到这个:
class _LANGANDCODEPAGE extends Struct {
@Uint16()
external int wLanguage;
@Uint16()
external int wCodePage;
}
你可以在以下网站上找到这个文件
/Users/name/.pub-cache/hosted/pub.dev/package_info_plus_windows-2.1.0/lib/src/file_version_info.dart
我希望这对你有帮助。
你可以通过覆盖依赖关系来解决这个问题,把下面的代码放到你的pubspec.yaml中,这样就可以解决你的问题了:
dependency_overrides:
package_info_plus_windows: 3.0.0
在pubspec.yaml中添加这个,应该可以解决这个问题。
dependency_overrides:
package_info_plus: ^4.0.1
我也遇到了同样的问题,但在仔细阅读了日志后,我在pub spec文件中加入了这部分内容
dependency_overrides:
package_info_plus: any
我还需要将firebase/auth
的软件包更新为10.9
。我运行这个命令 --> pod update Firebase/Auth
我也有同样的问题。
在我的案例中,与flutter_app_version_checker有关。0.3.2版本对旧的package_info_plus_x包有依赖性。
有人已经发布了flutter_app_version_checker的修复程序,但软件包没有发布。
所以我fork了这个 repo,并为我的项目应用修复。
# from
dependencies:
http: ^0.13.4
package_info_plus: ^1.4.2
dev_dependencies:
flutter_lints: ^1.0.0
# to
dependencies:
http: ^0.13.6
package_info_plus: ^4.0.0
dev_dependencies:
flutter_lints: ^2.0.1
pubspec.yaml
....
flutter_app_version_checker:
git:
url: git@github.com:kevin-chnp/app_version_checker.git
...
(you can use your own repo)
我在升级flutter后出现了这个错误,只需运行"dart pub upgrade";
为了解决这个问题,你将从你的路径中打开file_version_info.dart
../../.pub-cache/hosted/pub.dev/package_info_plus_windows 2.1.0/lib/src/file_version_info.dart
并搜索关于int? wCodePage;
和int? wLanguage;
的信息,然后删除?
。
我已经为这个错误工作了2天:我的解决方案(但不是最好的解决方案)是更新 "file_version_info.dart "的内容,其中包括:
class _LANGANDCODEPAGE extends Struct {
@Uint16()
external int wLanguage;
@Uint16()
external int wCodePage;
}
并删除了int?
它是有效的。