我如何知道现有项目应使用哪个 Flutter 版本?

问题描述 投票:0回答:2

我刚刚克隆了一个 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 getflutter pub outdatedflutter pub Upgradeflutter 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/
flutter dart sdk flutter-dependencies
2个回答
1
投票

如果您可以打开 pubspec.lock 文件,您将能够在文件底部看到 flutter 和 dart 版本。您可以在那里将其与您的版本进行比较。

消除依赖性问题,您可以在 pubspec.yaml 文件中检查过时的软件包或通过在终端中运行命令来检查。然后运行

flutter pub upgrade --major-versions
将软件包升级到最新的相关版本。它可能有助于解决您的问题。


0
投票

这里发生的情况是,您的项目未使用最新的 Flutter 版本进行更新。

是的,您可以通过转到 pubspec.lock 找到您需要使用的 Flutter 版本来管理和运行它(如此处其他答案所写),但我建议您花时间慢慢升级项目。

如果没有,迟早你需要在不同项目之间不断更改 Flutter 版本,或者被迫通过 Flutter 或 Package 进行更新。

如果它只是上面的一个文件,并且该包的开发几个月没有更新,要么找到另一个包,要么你可以分叉它并自己更新它(并将你的版本作为包导入)。但在此之前,请务必阅读以下内容,因为分叉并使用您自己的包就像您应该寻求的最后一个解决方案。

哦,也非常重要:不要手动编辑你的 pubspec.lock!这是一个自动生成的文件。

如何更新您的 Flutter 项目

升级 Flutter 和 Packages 版本

更新项目意味着将您的 Flutter 和软件包版本更新为最新的、相互兼容的版本。为此,您需要将 Flutter 版本升级到最新的稳定版本,然后将所有软件包升级到软件包页面上的最新版本。

解决包冲突

然后有两种情况,要么 pub get 会顺利运行,要么你会得到上面你写的错误 - 但对于中间的包。然后,您必须在出现错误时降级具有较大版本的软件包,并继续此过程,直到 pub get 正确运行。这是一个相当可怕的过程,但是必要的 - 如果项目太旧,它可能会变得有点先进。

解决Flutter代码冲突

然后,如果 pub get 运行没有问题,您将需要解决代码冲突。正如您上面提到的,您遇到了诸如“此函数不存在”之类的错误 - 我怀疑这是因为您的项目具有旧版本的 Flutter,以至于它现在使用了已弃用的函数。

在这种情况下,你需要做的是在谷歌上搜索每个不同的函数,询问它已被哪个 flutter 函数替换 - 并使用那个函数。

如果你是 Flutter 新手,做出这样的改变可能会很可怕,但如果你慢慢地、稳定地进行,你就没什么好害怕的。

就是这样!

© www.soinside.com 2019 - 2024. All rights reserved.