Flutter权限管理插件super_easy_permissions的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter权限管理插件super_easy_permissions的使用

super_easy_permissions 是一个用于在 Android 和 iOS 上以非常简单的方式处理权限的 Flutter 插件。

请通过以下方式支持我:

捐赠将极大地激励我开发更多有用的插件。

如何使用

步骤 1

首先,在 pubspec.yaml 文件中添加此包:

dependencies:
  flutter:
    sdk: flutter
  super_easy_permissions: any

确保在保存文件后获取所有 pub 包。

步骤 2

Android

AndroidManifest.xml 文件中添加所需的权限:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

在此示例中,我添加了相机权限(这还需要添加硬件功能)。您的情况可能不同。例如,您可能需要存储权限。

注意: 如果您需要在 AndroidManifest.xml 中添加存储权限,请确保在清单文件中添加以下行:

<application
      android:requestLegacyExternalStorage="true"
      ...

有关所有权限的列表,请访问 Google 开发者网站

iOS

Info.plist 文件中添加所需的权限:

<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera description.</string>

在此示例中,我添加了相机权限。您的需求可能不同。

有关所有权限的列表,请访问 Apple 开发者网站

步骤 3

在 Dart 文件中导入库:

import 'package:super_easy_permissions/super_easy_permissions.dart';

步骤 4

最后,使用该包

检查权限是否已授予
bool result = await SuperEasyPermissions.isGranted(Permissions.camera);
if (result) {
  // 权限已授予,执行某些操作
}
请求权限
bool result = await SuperEasyPermissions.askPermission(Permissions.camera);
if (result) {
  // 权限已授予,执行某些操作
} else {
  // 权限被拒绝,执行其他操作
}
检查权限是否被拒绝
bool result = await SuperEasyPermissions.isDenied(Permissions.camera);
if (result) {
  // 权限被拒绝,执行某些操作
}

权限参考

Permissions.accessMediaLocation        // 仅适用于 Android
Permissions.activityRecognition        // 仅适用于 Android
Permissions.bluetooth
Permissions.calendar
Permissions.camera
Permissions.contacts
Permissions.ignoreBatteryOptimizations // 仅适用于 iOS
Permissions.location
Permissions.locationAlways
Permissions.locationWhenInUse
Permissions.mediaLibrary               // 仅适用于 iOS
Permissions.microphone
Permissions.notification
Permissions.phone                      // 仅适用于 Android
Permissions.photos                     // 仅适用于 iOS
Permissions.photosAddOnly              // 仅适用于 iOS
Permissions.reminders                  // 仅适用于 iOS
Permissions.sensors
Permissions.sms                        // 仅适用于 Android
Permissions.speech
Permissions.storage

其他有用的包

参考资料

问题

如果您遇到任何问题或有功能请求,请发送电子邮件至 riturajshakti@gmail.com

想要贡献

请通过 PayPal 支持我。 您的捐赠将极大地激励我开发更多有用的包。

作者

此 Flutter 权限插件由 Rituraj Shakti 开发。您可以通过 riturajshakti@gmail.com 联系我。


示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:super_easy_permissions/super_easy_permissions.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _filePermission = '未启用';

  [@override](/user/override)
  void initState() {
    super.initState();

    // 检查相机权限是否已经授予
    SuperEasyPermissions.isGranted(Permissions.camera).then((result) {
      if (result) {
        setState(() => _filePermission = '已授予!');
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Super Easy Permission 示例'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('文件权限: $_filePermission'),
              SizedBox(height: 10),
              ElevatedButton(
                onPressed: () async {
                  // 检查相机权限是否已授予
                  bool result = await SuperEasyPermissions.isGranted(Permissions.camera);
                  if (result) {
                    setState(() => _filePermission = '已授予!');
                  }
                },
                child: Text('检查权限'),
              ),
              SizedBox(height: 10),
              ElevatedButton(
                onPressed: () async {
                  // 请求权限
                  bool result = await SuperEasyPermissions.askPermission(Permissions.camera);
                  if (result) {
                    setState(() => _filePermission = '已授予!');
                  }
                },
                child: Text('请求权限'),
              ),
              SizedBox(height: 10),
              ElevatedButton(
                onPressed: () async {
                  // 检查相机权限是否永久拒绝
                  bool result = await SuperEasyPermissions.isPermanentlyDenied(Permissions.camera);
                  if (result) {
                    setState(() => _filePermission = '永久拒绝!');
                  }
                },
                child: Text('检查是否永久拒绝'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter权限管理插件super_easy_permissions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter权限管理插件super_easy_permissions的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用super_easy_permissions插件进行权限管理的代码案例。这个插件简化了权限请求的流程,让开发者可以更方便地处理Android和iOS的权限请求。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加super_easy_permissions依赖:

dependencies:
  flutter:
    sdk: flutter
  super_easy_permissions: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入插件:

import 'package:super_easy_permissions/super_easy_permissions.dart';
import 'package:flutter/material.dart';

3. 请求权限

下面是一个简单的示例,展示如何请求相机和存储权限,并在权限请求结果返回后更新UI。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PermissionScreen(),
    );
  }
}

class PermissionScreen extends StatefulWidget {
  @override
  _PermissionScreenState createState() => _PermissionScreenState();
}

class _PermissionScreenState extends State<PermissionScreen> {
  bool _cameraPermissionGranted = false;
  bool _storagePermissionGranted = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Permission Management'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Camera Permission: $_cameraPermissionGranted',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                bool result = await SuperEasyPermissions.requestPermission(
                  Permission.camera,
                );
                setState(() {
                  _cameraPermissionGranted = result;
                });
              },
              child: Text('Request Camera Permission'),
            ),
            SizedBox(height: 40),
            Text(
              'Storage Permission: $_storagePermissionGranted',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                bool result = await SuperEasyPermissions.requestPermission(
                  Permission.storage,
                );
                setState(() {
                  _storagePermissionGranted = result;
                });
              },
              child: Text('Request Storage Permission'),
            ),
          ],
        ),
      ),
    );
  }
}

4. 处理权限请求结果

在上面的代码中,我们使用了SuperEasyPermissions.requestPermission方法来请求权限,并通过setState方法更新UI以反映权限请求的结果。

5. 检查权限状态

你也可以在请求权限之前检查权限的状态:

bool hasCameraPermission = await SuperEasyPermissions.checkPermission(Permission.camera);
bool hasStoragePermission = await SuperEasyPermissions.checkPermission(Permission.storage);

6. 处理权限被永久拒绝的情况

如果用户永久拒绝了权限请求,你可能需要引导用户去设置页面手动开启权限。super_easy_permissions提供了打开设置页面的方法:

if (!result) {
  // 如果权限请求被拒绝,打开系统设置页面
  await SuperEasyPermissions.openAppSettings();
}

总结

以上是一个关于如何在Flutter项目中使用super_easy_permissions插件进行权限管理的简单示例。通过该插件,你可以轻松请求和处理Android和iOS的权限,并根据权限状态更新UI。希望这个示例对你有所帮助!

回到顶部