导入第三方库踩坑小结:
(编译器:VsCode)
( 打算在学习中,使用flutter重新自己的项目,遇到比较特殊的坑,就先记录一下,持续更新中)
1.把第三方库 写入pubspec.yaml文件中
dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 english_words: ^3.1.0 dev_dependencies: flutter_test: sdk: flutter
2.在底部终端 运行:
flutter packages get
或点击右上角的 Get Packages 按钮
运行结果:
Running "flutter packages get" in lwflutterapp... 0.6s
3.之后 在main.dart 文件中 导入
import 'package:english_words/english_words.dart';
发现报错,如图:
原因: 依赖库没有成功导入,可以看一下刚才上面的导入时间只有0.6s,一般不会这么快,
坑1.:把第三方库的名字写入文件后,忘记保存,直接运行了 flutter packages get,
坑2:当保存之后,再次加载第三方库,发现会一直卡在这个地方,等半天也没有结束
原因: storage.googleapis.com 撞墙了,
解决方式:
1:配置一下环境变量 Linux 或 Mac: export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn Windows: PUB_HOSTED_URL ===== https://pub.flutter-io.cn FLUTTER_STORAGE_BASE_URL ===== https://storage.flutter-io.cn
2:执行一下flutter doctor -v
命令。(可有可无)
3:然后再执行flutter packages get
坑3:当你配置完环境变量之后,再次运行 flutter packages get的时候发现,flutter的文件是被锁状态,因为有一个任务一直未完成状态,就是刚才卡死的那个任务,
终端显示:
Waiting for another flutter command to release the startup lock...
解决方法,如下:
1、打开flutter的安装目录/bin/cache/ ( /usr/local/flutter/bin/cache)
2、删除lockfile文件
3、重启vsCode
(补充: 如果还不行,请先检查安装的flutter目录下./flutter/bin/cache/路径下是否已经有个lockfile文件存在了,因为我使用的是vscode下面的终端窗口,有时即使线程被占用了,但是不会像电脑终端一样会有提示信息,被坑过!)
然后就可以 正常的导入第三方了(需要几分钟的时间),导入的头文件也不会再保存了,
坑4:真机运行时:报错 Error connecting to the service protocol: HttpException: , uri = http://127.0.0.1:1024/ws
网上有人说:这种情况,一般是调试iOS真机的情况会出现,打开Xcode->Window->Devices and Simulators,将Connect via network取消
但是我的本来就是取消状态,所有对我无效,
我杀死进程后,就运行成功了,
坑5:数据转模型对象
刚开始使用的是网上说的 第三方框架 json_annotation: ^2.0.0,这个框架会自动生成一个与model.dart文件对应的model.g.dart文件,但是比较蛋疼的就是model类的属性,你需要一个一个的手写,如果少了还行,多了就很蛋疼了。所有弃用了,
由于vscode的插件比较少,所有我使用在线工具 https://javiercbk.github.io/json_to_dart/,这个在线工具就可以根据json,自动生成一套转模型的代码,只需要改一下类名就行了,但是。。还有坑。由于 自动生成的代码里,在赋值那一块没有对类型就行强转,就造成了 int和double的混乱,经常会报 int 和 double之间的类型错误。这是就需要根据数据的实际情况手动添加强转 代码(as int 或 as double),