我刚刚克隆了一个 Flutter 项目的存储库,我不知道应该使用哪个 flutter sdk 版本。我尝试了 5-6 个版本,每个版本都抛出一个错误(诸如“此函数不存在”或类似的错误。
我使用版本 3.18.0-0.1.pre (因为它在最后的 pubspec.lock 中说,使用该版本我能够运行该项目,但我必须更改包的版本intl 因为它抛出了这样的错误:
Note: intl is pinned to version 0.18.1 by flutter_localizations from the flutter SDK.
See https://dart.dev/go/sdk-version-pinning for details.
2
Because every version of flutter_localizations from sdk depends on intl 0.18.1 and evita_mobile depends on intl ^0.19.0, flutter_localizations from sdk is forbidden.
So, because evita_mobile depends on flutter_localizations from sdk, version solving failed.
我能够运行该项目,但它无法正常工作(我无法通过登录页面,因为验证用户身份的功能不起作用)。我认为这是因为它改变了 pubspec.lock 中的很多东西
目前我不知道是否是Flutter版本的问题,但这是我的理论,因为之前离开公司的程序员能够毫无问题地运行项目。
我已经尝试了很多终端代码,例如 flutter pub get、flutter pub outdated、flutter pub Upgrade、flutter pub Upgrade --major-versions 等等。
我将把 pubspec.yaml 放在这里,因为我认为它很重要:
name: evita_mobile
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.19.2 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
http: ^0.13.4
shared_preferences: ^2.0.15
intl: ^0.19.0
flutter_html: ^3.0.0-alpha.6
encrypt: ^5.0.1
file_picker: ^5.2.6
mime: ^1.0.4
path_provider: ^2.0.14
syncfusion_flutter_pdfviewer: ^21.2.3
flutter_barcode_scanner: ^2.0.0
chewie_audio: ^1.5.0
flutter_localizations:
sdk: flutter
dots_indicator: ^3.0.0
font_awesome_flutter: ^10.5.0
url_launcher: ^6.0.12
table_calendar: ^3.0.9
flutter_launcher_icons: ^0.13.1
flutter_local_notifications: ^9.0.0
permission_handler: ^10.4.5
workmanager: ^0.5.2
flutter_secure_storage: ^8.1.0
flutter_inappwebview: ^5.5.0+5
infinite_scroll_pagination: ^4.0.0
flutter_icons:
image_path: "lib/images/evita_logo.png"
android: true
ios: true
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^2.0.0
flutter:
uses-material-design: true
assets:
- lib/images/
如果您可以打开 pubspec.lock 文件,您将能够在文件底部看到 flutter 和 dart 版本。您可以在那里将其与您的版本进行比较。
消除依赖性问题,您可以在 pubspec.yaml 文件中检查过时的软件包或通过在终端中运行命令来检查。然后运行
flutter pub upgrade --major-versions
将软件包升级到最新的相关版本。它可能有助于解决您的问题。
这里发生的情况是,您的项目未使用最新的 Flutter 版本进行更新。
是的,您可以通过转到 pubspec.lock 找到您需要使用的 Flutter 版本来管理和运行它(如此处其他答案所写),但我建议您花时间慢慢升级项目。
如果没有,迟早你需要在不同项目之间不断更改 Flutter 版本,或者被迫通过 Flutter 或 Package 进行更新。
如果它只是上面的一个文件,并且该包的开发几个月没有更新,要么找到另一个包,要么你可以分叉它并自己更新它(并将你的版本作为包导入)。但在此之前,请务必阅读以下内容,因为分叉并使用您自己的包就像您应该寻求的最后一个解决方案。
哦,也非常重要:不要手动编辑你的 pubspec.lock!这是一个自动生成的文件。
更新项目意味着将您的 Flutter 和软件包版本更新为最新的、相互兼容的版本。为此,您需要将 Flutter 版本升级到最新的稳定版本,然后将所有软件包升级到软件包页面上的最新版本。
然后有两种情况,要么 pub get 会顺利运行,要么你会得到上面你写的错误 - 但对于中间的包。然后,您必须在出现错误时降级具有较大版本的软件包,并继续此过程,直到 pub get 正确运行。这是一个相当可怕的过程,但是必要的 - 如果项目太旧,它可能会变得有点先进。
然后,如果 pub get 运行没有问题,您将需要解决代码冲突。正如您上面提到的,您遇到了诸如“此函数不存在”之类的错误 - 我怀疑这是因为您的项目具有旧版本的 Flutter,以至于它现在使用了已弃用的函数。
在这种情况下,你需要做的是在谷歌上搜索每个不同的函数,询问它已被哪个 flutter 函数替换 - 并使用那个函数。
如果你是 Flutter 新手,做出这样的改变可能会很可怕,但如果你慢慢地、稳定地进行,你就没什么好害怕的。
就是这样!