提高 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 | # 只加载 assets 下的 test1.json 文件 |
- 通过 rootBundle 加载
1 | Future<String> _loadFromProjectAsset() async { |
但是对于 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
* 在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 介绍的流程一致
在这个项目里面可以直接对引用到的代码进行断点调试