美文网首页记录自学flutter点点滴滴
Flutter 学习之旅(十四) sdcard权限与资源

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

作者: Tsm_2020 | 来源:发表于2020-08-15 12:17 被阅读0次

    为什么前面的文章一直在说基础控件,这里面突然就说资源文件和权限了,本来这些东西想拿到后面一起说的,但是由于下一篇文章该说道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

    相关文章

      网友评论

        本文标题:Flutter 学习之旅(十四) sdcard权限与资源

        本文链接:https://www.haomeiwen.com/subject/jgzgdktx.html