前言

今天更新第三方依赖库,执行flutter pub get后,报错了

Because project depends on path_provider 1.6.8 which doesn’t match any versions, version solving failed. pub get failed (1; Because project depends on path_provider 1.6.8 which doesn’t match any versions, version solving failed.) Process finished with exit code 1

分析为什么会出现冲突

查看文件pubspec.yaml是这个样子的

d e p p e a n t d h e _ n p c r i o e v s i : d e r : ^ 1 . 6 . 8

我们在开发Flutter项目中,经常会依赖第三方库。如果两个第三方库,同时依赖了某个库。比如库A要求path_provider最低版本为1.5.0,库B要求path_provider最低版本为1.6.8,当path_provider的版本更新为1.6.8时,虽然符合库B的要求,但是不符合库A的要求,这个时候就冲突报错了。

如何解决

修改版本为any。

d e p p e a n t d h e _ n p c r i o e v s i : d e r : a n y

运行flutter pub upgrade。 设置any后,pub的版本分析器会自动分析当前的依赖版本,寻找合适的能够避免冲突的依赖版本并下载。

后续

但是我们不能每次flutter clean后再去执行,都让pub的版本分析器去分析,这会有一定的耗时。而且这相当于写了一个不确定的版本号在项目中。如果交付人员打包的时候,恰好碰到了第三方库版本更新,有可能会打出会crash的包,所以我们需要把any替换为实际的版本号。

使用pubspec.lock找到正确的版本

p a t h _ d d s v p e e o e r p s n u u r o e c a r r s v n r m l c i i d i e : e o d e p : : n e n t " : r c i p h h : y o a t o " : n t t s 1 : h p t . " _ s e 5 d p : d . i r 0 r / " e p c i u t d b e . m r f a l i u n t " t e r - i o . c n "

可以看到版本分析器为我们找到的无冲突的依赖版本号为1.5.0

这时我们可以回到文件pubspec.yaml中,修改为

d e p p e a n t d h e _ n p c r i o e v s i : d e r : 1 . 5 . 0

大功告成~