为什么前面的文章一直在说基础控件,这里面突然就说资源文件和权限了,本来这些东西想拿到后面一起说的,但是由于下一篇文章该说道image这个控件了,image加载图片的方式有多种,其中一种就是从
sdcard中读取图片,以及读取资源文件. 知识点还是连贯的梳理比较好
资源文件配置
说起资源文件配置,我就没见过比Flutter 再坑的了,下面以我自身踩坑为例
首先我在app的根目录创建了 images 文件夹,接下来需要在pubspec.yaml 这个文件中配置一下,
# - images/ 是将整个跟目录添加进去
# 注意,这里比价坑的是 assets 前面2个空格 ,
# - image -和images中间一个空格,
# 稍微有一点差错都不行,
flutter:
uses-material-design: true
# - images/ 是将整个跟目录添加进去
# 注意,这里比价坑的是 assets 前面2个空格 ,
# - image -和images中间一个空格,
# 稍微有一点差错都不行,
assets:
- images/
- images/1.0x/
- images/2.0x/
- images/3.0x/
1. 第一个坑,我自己在添加的过程中,assets 的首字母没有与上面uses 的首字母对齐,竟然报错了,经过试验发现 assets: 这个关键字可以从屏幕最左边开始,也可以空2格开始,其他都不行,
2. - images/ 这个里面有个坑,那就是-开始的地方必须是 assets 开始的地方起最少缩进2个空格,切-与images/中间必须有一个空格,
3.在这里你会看到我又在images文件夹中定义了另外3个文件夹,分别是1.0x,2.0x,3.0x,其实flutter也是支持多分辨率自动选择分辨率大小合适的图片,沿用了ios 的1x 2x 3x 的方案,文件夹和引用在上面
权限问题
由于需要适配android6.0 的运行时权限,所以flutter 也引入了运行获取权限的概念,这里推荐大家使用 permission_handler 这个库,还是比较方便的,
dependencies:
permission_handler: ^5.0.1+1 #导包
但是android manifast文件的权限还必须要有,这里先手动随便添加几个权限
使用方法
Permission.storage.request()
..then((value) {
if (value.isGranted) {
Navigator.of(context).pushNamed(page_routes_iamge);
}
});
//还有一种写法是
// var result = await Permission.storage.request();
// if (result.isGranted) {
// Navigator.of(context).pushNamed(page_routes_iamge);
// }
这个是获取到权限后再跳转
同时申请多个权限的时候的写法,其实一个权限也是调用的这个方法,只不过是进行了一次封装
[Permission.storage,Permission.camera].request()
..then((value) {///此value Map 类型
if (value[Permission.storage].isGranted) {
if(value[Permission.camera].isGranted){
Navigator.of(context).pushNamed(page_routes_iamge);
}
}
});
我学习flutter的整个过程都记录在里面了
https://www.jianshu.com/c/36554cb4c804
最后附上demo 地址
https://github.com/tsm19911014/tsm_flutter