提高flutter attach的成功率
方案1
断开wifi,执行flutter attach,attach成功后再链接wifi
方案2
通过指定设备uuid进行attach
- 通过
flutter devices
查找已链接设备列表,获取链接设备的uuid flutter attach -d <#uuid#>
指定想要attach的设备进行连接,例如flutter attach -d AE5D772C-6D56-43AD-83F2-0554257B16C4
方案3
通过指定应用的app-id进行attach
- 同一wifi环境下如果有多台相同项目设备连接中,找到你需要attach的app-id进行连接
- 执行:
flutter attach --app-id <#app_id#>
例如:flutter attach --app-id com.xxx.xxx
从package中加载json文件
背景
例如我这里有一个flutter的demo项目叫flutter_demo_package_json_load
,在根目录通过命令:flutter create --template=package json_test_package
,创建了一个名为json_test_package
的package,在package的assets中有一个为test2.json文件,现在需要在package中加载到改文件。
从工程加载json
对于普通项目的json文件,加载方式如下:
在项目中添加json文件,例如项目的assets下有一个名为test1.json的文件
我们在yaml中添加如下依赖
1
2
3
4
5
6
7
8# 只加载assets下的test1.json文件
assets:
- assets/test1.json
# 或者
# 加载assets下的所有文件
assets:
- assets/通过rootBundle加载
1
2
3
4Future<String> _loadFromProjectAsset() async {
// json file in project,is ok
return rootBundle.loadString("assets/test1.json");
}
但是对于package下面json文件上面的方法失效了,使用上面的方法加载将会报错,错误信息如下:
错误原因是资源路径不对,加载不到,因为rootBundle类没有提供package name的参数,我们只能把package name信息放在资源路径里面。
从package加载json
灵感来自https://pub.dev/packages/lottie库的`Lottie.asset(“assetsPath”,package: “package_name”)`方法,因为lottie实现动画的原理也是加载一份json配置,不过这个方法支持指定package配置。
这里的keyName就是我们rootBundle类里面需要用的资源路径,包含带package的情况。
正确的方式如下:
- 第一步和上面一样,将json文件添加到工程中,假如这里我们package里面的json文件名为test2.json
- 在yaml中添加如下依赖
1
2
3
4
5
6
7
8# 只加载assets下的test2.json文件
assets:
- assets/test2.json
# 或者
# 加载assets下的所有文件
assets:
- assets/ - 通过rootBundle加载,但是path的格式为
packages/<#package_name#>/<#file_path#>
这里为
1 | // json file in package,this is work |
通过DefaultAssetBundle
也是一样可以
1 | // This is work too. |
flutter analyse
配置步骤
在项目更目录添加
analysis_options.yaml
文件可以配置lint规则和analyzer行为具体支持的lint规则参考https://dart-lang.github.io/linter/lints/
目前有3类已经定义的常用规则
Many lints are included in various predefined rulesets:
- pedantic for rules enforced internally at Google
- effective_dart for rules corresponding to the Effective Dart style guide
- flutter for rules used in
flutter analyze
推荐使用google团队内部的规则库pedantic
- 在yaml里面添加依赖
pedantic: ^1.8.0+1
- 在yaml里面添加依赖
在
analysis_options.yaml
里面引入使用include: package:pedantic/analysis_options.1.8.0.yaml
使用
配置好analysis_options.yaml
文件的规则后,执行flutter analyse
命令将对你整个项目或者package的代码进行静态分析
修复
- 根据提示修复
点击提示的规则,就会跳转到需要修复位置,按照lint规则的说明和例子就可以修正了。
- 利用VSCode快速修复
在提示有问题的代码的地方Ctrl +.
, 就会自动弹出快速修复,比如图中为增加const
标识。 是不是快多了。
参考配置
当然你还可以根据你的需要定制自己的静态分析规则,下面是最近使用的一套配置,仅供你参考:
dartfmt 命令
dartfmt ./ -w
静态分析代码,并尝试自动修复dartfmt ./ -n
静态分析代码,不会修复代码
DevTool介绍
flutter提供了一个devTool系列工具,方便开发者进行调试,查看日志,网络请求,性能等信息,更多信息请参考DevTools
Install DevTools
Launch the DevTools application server
启动本地web服务
1 | pub global run devtools # If you have `pub` on your path. |
or
1 | flutter pub global run devtools # If you have `flutter` on your path. |
在命令行,你应该看到类似下面输出,表明服务启动成功
1 | Serving DevTools at http://127.0.0.1:9100 |
Start an application to debug
运行app
1 | cd path/to/flutter/app |
一旦你成功运行起来你的app,你将在终端控制台看到如下类似的信息
用浏览器打开里面的地址,格式如下
打开将会看到下面的调试面板,可以根据自己的需要进行调试
这里有一个很有用的功能,【debug】
打开页面可以查看断点的帧和控制台的日志。
Open DevTools and connect to the target app
一旦工程运行起来了,在浏览器打开http://localhost:9100,打开DevTools完整版本
输入上面的地址,点击Connect,跳转到完整devTools
这里的功能非常强大和具体使用可以参考官方文档
flutter 调试
这里以VSCode为例
纯flutter项目
纯flutter项目比较简单,VSCode支持各种devtool,使用debug模式运行app,或者直接按F5
运行成功后会出现一下工具条
控制台输出以下内容
例如这里我们在这个文件107行直接下一个断点,代码执行到时会触发断点
此时工具栏变成下面的样式
可以通过相关的按钮进行断点调试
混合项目(原生+flutter)
打开已经编译运行过的原生端App
通过VSCode打开壳工程,进入壳工程根目录
选择main.dart文件
执行cmd+shift+p,呼出VSCode命令面板,输入
>attach to flutter onDevice
选择下面的对应的命令执行
如果attach不上请断开wifi重试
Attach 成功的话会显示下面一条悬浮工具栏和纯flutter相比里面多了一个类似插头的按钮
Debug Console控制台也会输出下面信息
剩下的调试和上面DevTool介绍的流程一致
在这个项目里面可以直接对引用到的代码进行断点调试