小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。 今天我会与大家分享flutter开发中的几个小技巧
提高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中添加如下依赖
# 只加载assets下的test1.json文件 assets: - assets/test1.json # 或者 # 加载assets下的所有文件 assets: - assets/ -
通过rootBundle加载
Future<String> _loadFromProjectAsset() async { // json file in project,is ok return rootBundle.loadString("assets/test1.json"); }
但是对于package下面json文件上面的方法失效了,使用上面的方法加载将会报错,错误信息如下:
错误原因是资源路径不对,加载不到,因为rootBundle类没有提供package name的参数,我们只能把package name信息放在资源路径里面。
从package加载json
灵感来自pub.dev/packages/lo…: “package_name”)`方法,因为lottie实现动画的原理也是加载一份json配置,不过这个方法支持指定package配置。
这里的keyName就是我们rootBundle类里面需要用的资源路径,包含带package的情况。
正确的方式如下:
-
第一步和上面一样,将json文件添加到工程中,假如这里我们package里面的json文件名为test2.json
-
在yaml中添加如下依赖
# 只加载assets下的test2.json文件 assets: - assets/test2.json # 或者 # 加载assets下的所有文件 assets: - assets/ -
通过rootBundle加载,但是path的格式为
packages/<#package_name#>/<#file_path#>
这里为
// json file in package,this is work
Future<String> _loadFromPackageAsset() async {
// 【importance】 packag json file need use this formate:
// `packages/$package/$assetName`
return rootBundle.loadString("packages/json_test_package/assets/test2.json");
}
通过DefaultAssetBundle也是一样可以
// This is work too.
Future<String> testLoadJsonFileByDefaultAssetBundle(BuildContext context) {
// 【importance】 packag json file need use this formate:
// `packages/$package/$assetName`
return DefaultAssetBundle.of(context)
.loadString('packages/json_test_package/assets/test2.json');
}
