文章目录

  • 前言
  • 准备工作
  • 一、使用步骤
    • 1.使用的插件
    • 2.配置权限
  • 二、代码示例
  • 三、结果截图

前言

flutter在pub.flutter-io.cn插件库中有很多的关于权限配置的插件,但是就我个人而言,比较推荐使用permission_handler这个插件。当我们打开permission_handler时候,往往新手小白会因为它的官网文档而弄的一头雾水,权限配置往往涉及到android和ios两个方向的相关知识,有可能大多数人就只会android或者iOS的某一端知识,在配置权限时出现屡屡不生效的问题。接下来我从零到一教你如何配置吧。

准备工作

flutter版本号:3.0.0
dart版本号:2.12.0
插件:permission_handler

一、使用步骤

1.使用的插件

permission_handler: ^9.0.2
flutter_easyloading: ^3.0.5

2.配置权限

  • android

(1)将以下内容添加到“gradle.properties”文件中:(针对androidX及以上的版本)

android.useAndroidX=true
android.enableJetifier=true

(2)将以下内容添加到“AndroidManifest.xml”文件中:(针对androidX及以上的版本)

android:hardwareAccelerated="true"

(3)按需在“AndroidManifest.xml”添加本项目需要用到的权限:(本次以保存图片到本地相册举例)

<!-- 写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  • ios

(1)将以下内容添加到您的文件中:Podfile

post_install do |installer|installer.pods_project.targets.each do |target|... # Here are some configurations automatically generated by flutter# Start of the permission_handler configurationtarget.build_configurations.each do |config|# You can enable the permissions needed here. For example to enable camera# permission, just remove the `#` character in front so it looks like this:## ## dart: PermissionGroup.camera# 'PERMISSION_CAMERA=1'##  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.hconfig.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)',## dart: PermissionGroup.calendar# 'PERMISSION_EVENTS=1',## dart: PermissionGroup.reminders# 'PERMISSION_REMINDERS=1',## dart: PermissionGroup.contacts# 'PERMISSION_CONTACTS=1',## dart: PermissionGroup.camera# 'PERMISSION_CAMERA=1',## dart: PermissionGroup.microphone# 'PERMISSION_MICROPHONE=1',## dart: PermissionGroup.speech# 'PERMISSION_SPEECH_RECOGNIZER=1',## dart: PermissionGroup.photos# 'PERMISSION_PHOTOS=1',## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]# 'PERMISSION_LOCATION=1',## dart: PermissionGroup.notification# 'PERMISSION_NOTIFICATIONS=1',## dart: PermissionGroup.mediaLibrary# 'PERMISSION_MEDIA_LIBRARY=1',## dart: PermissionGroup.sensors# 'PERMISSION_SENSORS=1',   ## dart: PermissionGroup.bluetooth# 'PERMISSION_BLUETOOTH=1',## dart: PermissionGroup.appTrackingTransparency# 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',## dart: PermissionGroup.criticalAlerts# 'PERMISSION_CRITICAL_ALERTS=1']end # End of the permission_handler configurationend
end

(2)删除要使用的权限前面的字符。例如,如果您需要访问相册,请确保代码如下所示:#

## dart: PermissionGroup.photos'PERMISSION_PHOTOS=1',

(3)Info.plist 添加

<!-- 保存图片权限 -->
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Please allow the APP to save photos to the album</string>

二、代码示例

import 'dart:io';import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:permission_handler/permission_handler.dart';class HomePage extends StatefulWidget {const HomePage({Key? key}) : super(key: key);@overrideState<HomePage> createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {/// 动态申请权限,需要区分android和ios,很多时候它两配置权限时各自的名称不同/// 此处以保存图片需要的配置为例Future<bool> requestPermission() async {late PermissionStatus status;// 1、读取系统权限的弹框if (Platform.isIOS) {status = await Permission.photosAddOnly.request();} else {status = await Permission.storage.request();}// 2、假如你点not allow后,下次点击不会在出现系统权限的弹框(系统权限的弹框只会出现一次),// 这时候需要你自己写一个弹框,然后去打开app权限的页面if (status != PermissionStatus.granted) {showCupertinoDialog(context: context,builder: (context) {return CupertinoAlertDialog(title: const Text('You need to grant album permissions'),content: const Text('Please go to your mobile phone to set the permission to open the corresponding album'),actions: <Widget>[CupertinoDialogAction(child: const Text('cancle'),onPressed: () {Navigator.pop(context);},),CupertinoDialogAction(child: const Text('confirm'),onPressed: () {Navigator.pop(context);// 打开手机上该app权限的页面openAppSettings();},),],);});} else {return true;}return false;}// 保存网络图片saveNetworkImg(String imgUrl) async {// Todo// 处理保存网络图片的逻辑EasyLoading.showToast('处理保存网络图片的逻辑');}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('home'),),floatingActionButton: FloatingActionButton(onPressed: () async{// 使用// 首先判断是否有权限,没权限就不执行了bool permission = await requestPermission();permission ? saveNetworkImg('imgUrl') : null;},child: const Icon(Icons.adb),),);}
}

三、结果截图

  • android

  • ios

【flutter】使用permission_handler配置android和 iOS的权限相关推荐

  1. 【Flutter】Flutter 拍照示例 ( Flutter 插件配置 | Flutter 插件源码示例 | iOS 应用配置 | Android 应用配置 )

    文章目录 一.Flutter 插件配置 二.Flutter 插件源码示例 三.iOS 应用配置 四.Android 应用配置 五.相关资源 一.Flutter 插件配置 Flutter 拍照示例中 , ...

  2. Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)

    Flutter Web项目 Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web.macOS.Android 和 iOS. 这就是为什么今天我们使用在 Web. ...

  3. flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS

    Flutter Blog Theme using Flutter | Web, macOS, Android, iOS Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升, ...

  4. 化解Android 和iOS“恩怨”的Flutter ,凭的是什么?

    移动研发由来已久,从早期的 J2ME 开始,到后来居上的 Windows Mobile . Symbian ,小众却各领风骚的 BREW . Palm . BlackBerry ,以及当前几乎平分市场 ...

  5. android flutter 环境,android Flutter 1.环境配置

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一 本地环境配置 1. 下载 1.1 下载压缩包 解压即可 1.2 git 下载 如果你是第一次在你机器上安装 Flut ...

  6. 推送消息不打烊--Flutter集成个推SDK实现Android和IOS原生推送

    theme: condensed-night-purple highlight: a11y-dark 嗨!这里是甜瓜看代码,大家五一快乐呀,这篇文章跟大家聊聊怎么集成个推. Flutter集成个推SD ...

  7. Flutter 打包APP (Android IOS)

    打包Android apk 参考 https://flutter.dev/docs/deployment/android https://flutterchina.club/android-relea ...

  8. flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码

    分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...

  9. flutter 调用原生安卓插件_Flutter 如何调用Android和iOS原生代码-阿里云开发者社区...

    分3个大步骤: 1.在flutter中调用原生方法 2.在Android中实现被调用的方法 3.在iOS中实现被调用的方法 在flutter中调用原生方法 场景,这里你希望调用原生方法告诉你一个boo ...

最新文章

  1. 两台ubuntu虚拟机环境下hadoop安装配置
  2. saltstack实现haproxy+keepalived负载均衡+高可用(二)
  3. PHP artisan
  4. python函数(三)
  5. jquery mobile app案例_讲座预告 | 运动app内的个人成就、运动轨迹和社交分享对体能提升的长期效应研究...
  6. CloudStack的基本使用
  7. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyR
  8. window获取历史url_Facebook 开出历史最高赏金,55,000 美元奖励十年漏洞发现者
  9. 初学编程者如何摆脱搭建开发环境的困扰?
  10. PHPExcel导出文件
  11. 随心所欲玩复制 详解robocopy (完)
  12. 从零开始的C++(操作符函数重载)
  13. 深入理解Java-GC机制
  14. 电子银行卡的优势分析
  15. JetBrain补丁
  16. 大学计算机课什么时候学,关于2020年“大学计算机基础”课程水平测试时间地点安排的通知...
  17. 查询-SPJ练习1参考答案
  18. Python实操:正态分布检验
  19. SQL之case when then用法(用于分类统计)
  20. Linux 系统设置 : insmod 命令详解

热门文章

  1. Android 新闻客户端案例
  2. 蓉创蜀兴丨HTTPS建设全解析
  3. 数字通信——第一章 绪论
  4. 从经济学角度解读人工智能
  5. c# OutlookBar控件
  6. Linux故障处理——磁盘空间满缺找不到对应大文件
  7. 2020年起重机械指挥模拟试题及起重机械指挥模拟考试题
  8. 3.1 jmeter 响应断言
  9. Occlusion culling
  10. ecshop简化虚拟商品购买收货人信息【ECSHOP购物车不存在实体商品电话改为非必须以及隐藏掉】