Flutter问题:本地第三方库与pubspec.lock中的版本不同

问题前景:

从gitlab上拉了项目,pub get之后,pubspec.lock会变动,本地下载的第三方库和项目需要使用的版本不同,从而报错。

搜索了一下,是因为我在添加这几个包时都在前面添加了 ^ 符

  date_format: ^2.0.4

^符号的作用:

^用来指示允许的版本号范围,从指定版本到下一个不间断版本的任何版本都可以 === 表明只要这个新版本不会破坏我的app,那就能使用更新的版本

pubspec.lock文件是什么?

Pubspec.lock 文件是一个生成的文件,用于记录 Flutter 项目中使用的所有依赖项的确切版本。它确保项目中的每个人都使用相同版本的依赖项,这对于一致性和可重复性至关重要。当然还有lock(锁定依赖项)的作用。pubspec.lock 文件中描述的就是项目各种依赖包的真实版本和下载地址。

当你下次刷新项目时,pub get会根据lock中的描述去获取依赖包。即使有新的版本也不会跟新到。 

如果锁定文件已存在,pub get 将尽可能(也有意外)使用其中锁定的依赖项版本。如果依赖项未锁定,pub 将获取满足所有版本约束的该依赖项的最新版本。

dart pub get 的作用 

在Android Studio中点击 pubspec.yaml 文件右上角的 "pub get" 按钮,会执行 dart pub get 命令。

dart pub get用于检索当前 Package 所依赖的其它 Package,会根据pubspec.yaml文件来拉取依赖。同时:如果是第一拉取,还会生成.package、pubspec.lock文件以及.dart_tool目录。

如果 pubspec.lock 文件已经存在,则根据该文件中保存的依赖项版本获取对应的依赖项。

dart pub get获取新的依赖项时,它会编写一个锁定文件,以确保将来的获取将使用这些依赖项的相同版本。

为什么有时 pub get 后 pubspec.lock 会变化?(这就是意外)

当运行 pub get 时,Pub 包管理器会查看pubspec.yaml并生成 pubspec.lock文件,在pubspec.yaml中的依赖项版本号前没有插入符(^),那么无论运行多少次pub get,pubspec.lock文件都不会改变。

而如果版本号前有插入符(^),那么只要新版本符合约束条件,每次运行pub get时都会使用新版本的依赖项,并且pubspec.lock文件会相应地更新。(我目前的问题就出在这。pub get后,lock文件会变化,本地会重新下载第三方库,其中某些库不适用)

flutter pub get 的作用

个人理解:

在 pubspec.yaml 文件未发生变动的情况下,flutter pub get会直接获取 pubspec.lock 中的依赖信息,安装第三方库,此时它不会修改依赖定义。

如果在 pubspec.yaml 中添加或删除依赖,flutter pub get 会相应地更新 pubspec.lock 文件。

flutter pub get 和 dart pub get的区别

  • 在 pubspec.yaml 文件未发生变动的情况下,flutter pub get会直接获取 pubspec.lock 中的依赖信息,安装第三方库,此时它不会修改依赖定义。
  • 而 pub get会查看pubspec.yaml,而如果版本号前有插入符(^),那么只要新版本符合约束条件,每次运行pub get时都会使用新版本的依赖项,并且pubspec.lock文件会相应地更新。

其他命令

  • dart pub outdated 的作用

查看当前软件包所依赖的每个 package,确定哪些 package 的依赖项已过时,并为您提供有关如何更新它们的建议

  • dart pub upgrade命令

    • dart pub upgrade 命令与 dart pub get 命令一样,都是用于获取依赖项的。不同的是 dart pub upgrade 命令会忽略掉任何已存在的 lockfile 文件,因此 Pub 可以获取所有依赖项的最新版本。
    • dart pub upgrade 命令会忽略掉已经存在的 lockfile 文件并从 Scratch 中新建一个,然后使用所有依赖项的最新版本。
  • 删除依赖项:flutter pub remove xxxx

  • 添加依赖项:flutter pub add xxxx

  • 升级软件包:flutter pub upgrade

dart xxx 和 flutter xxx的区别

  • flutter xxx 专门针对 Flutter 项目,并可以利用 Flutter 特定的依赖项管理功能。
  • dart xxx  适用于所有 Dart 项目,更通用 

解决办法:

  • 去掉这几个包前面的 ^ 符号 ,并重新 pub get一下就不会报错。
  • 拉新项目时在命令行输入 flutter pub get 语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值