[Flutter新手村]—调试通关攻略

3,497 阅读4分钟

当年陈刀仔用20块赢到3700万,我卢本伟用20万赢到500万不是问题。

陈刀仔的励志故事历历在目,我们从flutter的战场新兵到超凡入圣也不是问题哈~今天我谈谈调试需要注意的事项。

调试

Hot Reload 热重置

热重载是指:在不中断App正常运行的情况下,动态注入修改后的代码片段,及时的把修改呈现在屏幕上。
这个技术在很多前端技术里都有,android上有intantRun,避免每次小的改动都要重新编译,具体怎么用呢?

IntelliJIdea中的按钮是个闪电标志哦,把鼠标放上去会有“Flutter Hot Reload”提示,当亮起的时候意味着可以使用的。 成功后在底部 Console/Run里面会看到如下类似提示

Performing hot reload...
Reloaded 1 of 448 libraries in 2,777ms.

为什么不能使用Hot Reload

非debug模式是不能使用hotReload的,工程默认是debug模式,debug模式下会执行设置的断言,
运行可能会不太流畅,但不影响实际性能。

Hot Reload成功了但我的改动没有生效?

Hot Reload并非所有改动都会生效,是由于其编译原理决定的。简单的说,Hot Reload只是把改动前后做了一下对比差分,
形成了增量操作,并不会全部重新编译。说人话就是:flutter布局相关的改变可以使用Hot Reload,其它的改变很多都无效。

重启app,之前HotReload的变化都丢失了

Hot Reload因为没有执行全部的编译,重启app就丢失了,需要重新运行编译

模拟器/真机调试忽然报错

IOS报错

亦或如下:

Launching lib/main.dart on iPhone 11 Pro Max in debug mode...
Running Xcode build...
Xcode build done.                                           15.7s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

只要是你确信自己的代码没啥问题,那一定是ios搞错了。

  • 方法一: Terminal,进入到flutter工程目录,执行 xattr -rc . 注意命令后面的空格点哦
cd myapp
xattr -rc .
  • 方法二(推荐): Terminal,进入flutter工程目录,万能的clean
cd myapp
flutter clean

原理就是flutter编译产物混乱了,clean一下,重新生成编译产物。

Android报错

找不到资源

android项目的clean方法:

  • 方法一: Terminal,进入到android工程目录,执行 ./gradlew clean
cd myapp
cd android
./gralew clean
  • 方法二(推荐): Terminal,进入flutter工程目录,万能的clean
cd myapp
flutter clean

原理就是flutter编译产物混乱了,clean一下,重新生成编译产物。

总结一下,如果flutter程序编译没问题,两个平台报错,通常是热更新导致的问题,最好的办法就是先执行flutter clean , 重新编译。如果还有问题,再具体问题分析解决。

IOS真机调试

IOS 13.3真机调试flutter白屏

ios 13.3真机调试都有问题,不是flutter的问题。把手机系统升级到13.4就好了。

XCode不支持这个ios版本,建议更新XCode

XCode安装包巨大,而且更新性能不稳定,想要适应新的ios版本真机,下载ios版本兼容包就行啦: github.com/filsv/iPhon…

执行flutter命令卡住,重启ide无效

pubspec.yaml文件 pub get不下来卡住,其它flutter命令提示

Waiting for another flutter command to release the startup lock...

简而言之:flutter执行一条命令的时候会加一个文件锁,执行第二条命令的时候如果获取不到这个锁,就会报这个错。 解决办法就是手动"解锁": 打开flutter的安装目录,找到这个文件lockfile

 /路径/flutter/bin/cache/lockfile 

把这个文件删了就行了,下次执行flutter指令还会自动创建的,不影响使用。

断点

Flutter支持断点调试

点这个有Flutter图标的按钮,“Flutter Attach”, 就可以给当前flutter app添加上断点监听,断点使用方式和android/ios执行断点一致。

Flutter断点经常使用者莫名失效,如果遇到了尝试重启app,重新添加断点

Assert断言

断言可以帮助我们在debug模式判断传参、运行环境是否符合要求,而正是环境不会编译进去,源码大量使用了断言。

后记

兵马未动,粮草先行。

以上我讲了一些自己调试遇到的问题,Flutter中文网调试Flutter应用关于如何调试flutter应用讲得更加系统,希望大家有时间一定要好好看一下。

如何调试搞清楚了,下一章准备聊聊dart,欢迎关注点赞~