问题前景:
从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 语句。