提高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/
3.通过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
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');
}