记录自学flutter点点滴滴

Flutter 学习之旅(十四) sdcard权限与资源

2020-08-15  本文已影响0人  Tsm_2020

为什么前面的文章一直在说基础控件,这里面突然就说资源文件和权限了,本来这些东西想拿到后面一起说的,但是由于下一篇文章该说道image这个控件了,image加载图片的方式有多种,其中一种就是从
sdcard中读取图片,以及读取资源文件. 知识点还是连贯的梳理比较好

资源文件配置

说起资源文件配置,我就没见过比Flutter 再坑的了,下面以我自身踩坑为例

image.png

首先我在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文件的权限还必须要有,这里先手动随便添加几个权限

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>

使用方法

  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<Permission, PermissionStatus> 类型
          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

上一篇下一篇

猜你喜欢

热点阅读