提交 61fe337a authored 作者: shixiaochen's avatar shixiaochen

1、封装requestPermission工具(动态申请权限);2、封装NormalDialog(通用dialog样式);

上级 858fa749
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.example">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:label="example"
android:name="${applicationName}"
......
import 'package:flutter/material.dart';
import 'package:flutter_clx_base/flutter_clx_base.dart';
import 'package:flutter_clx_base/widget/normal_dialog.dart';
import 'package:flutter_clx_base_example/sample/base_list_widget_test.dart';
import 'package:flutter_clx_base_example/sample/dio_widget_test.dart';
import 'package:permission_handler/permission_handler.dart';
class Sample extends StatelessWidget {
const Sample({super.key});
......@@ -19,6 +21,19 @@ class Sample extends StatelessWidget {
fullWidthButton: true,
onPressed: () => Get.to(const DioWidgetTest()),
text: 'dio'),
GFButton(
fullWidthButton: true,
onPressed: () {
Get.dialog(const NormalDialog(content: "通用dialog"));
},
text: 'NormalDialog'),
GFButton(
fullWidthButton: true,
onPressed: () {
// 1、manifest配置权限
requestPermission(permissionList: [Permission.camera],toSettingTip: "请开启相机权限");
},
text: '动态申请权限'),
],
);
}
......
import 'package:flutter/cupertino.dart';
import 'package:flutter_clx_base/utils/log_utils.dart';
import 'package:flutter_clx_base/widget/normal_dialog.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'permission_helper.dart';
S? findOtherLogic<S>({String? tag}) {
if (Get.isRegistered<S>(tag: tag)) {
......@@ -72,3 +76,43 @@ String formatInt(number, {nullTxt = "-"}) {
String formatIntZero(number) {
return formatInt(number, nullTxt: "0");
}
/// 动态申请权限
/// onGranted 获取权限
/// onRefuse 拒绝权限
/// onSettings 手动设置权限
/// onCancelSettings 不手动设置权限
requestPermission({
VoidCallback? onGranted,
VoidCallback? onRefuse,
VoidCallback? onSettings,
VoidCallback? onCancelSettings,
required String? toSettingTip,
required List<Permission> permissionList,
}) {
PermissionHelper.request(
permissionList,
onSuccess: onGranted, // 授权权限回调,
onFailed: onRefuse, // 权限拒绝回调
onOpenSetting: () {
Get.dialog(
WillPopScope(
onWillPop: () {
return Future.value(false);
},
child: NormalDialog(
title: "温馨提示",
content: toSettingTip,
cancelBtnText: "稍后提醒",
confirmBtnText: "去授权",
onConfirm: () {
openAppSettings();
onSettings?.call(); // 跳转设置页面回调
},
onCancel: onCancelSettings, // 不跳转设置页面回调
),
),
barrierDismissible: false);
},
);
}
// ignore_for_file: depend_on_referenced_packages
import 'package:flutter/cupertino.dart';
import 'package:flutter_clx_base/flutter_clx_base.dart';
import 'package:flutter_clx_base/utils/log_utils.dart';
import 'package:permission_handler/permission_handler.dart';
class PermissionHelper {
static VoidCallback defaultCall = () {};
///检查权限
// 2023/2/16 权限适配ios
// 2023/2/17 权限适配ios - 已完成
static void request(
List<Permission> permissionList, {
VoidCallback? onSuccess,
VoidCallback? onFailed,
VoidCallback? onOpenSetting,
}) async {
PermissionStatus permissionStatus =
await _requestPermission(permissionList);
logger.d("---PermissionHelper---: permissionStatus=$permissionStatus");
if (permissionStatus.isGranted) {
// 权限通过
onSuccess != null ? onSuccess() : defaultCall();
} else if (permissionStatus.isDenied) {
// 权限拒绝
onFailed != null ? onFailed() : defaultCall();
} else if (permissionStatus.isPermanentlyDenied) {
//权限永久拒绝,且不在提示
onOpenSetting != null ? onOpenSetting() : defaultCall();
} else if (permissionStatus.isRestricted) {
//IOS单独处理,跳转设置页即可,已支持
onOpenSetting != null ? onOpenSetting() : defaultCall();
} else if (permissionStatus.isLimited) {
//IOS单独处理,跳转设置页即可,已支持
onOpenSetting != null ? onOpenSetting() : defaultCall();
}
}
//申请权限
static Future<PermissionStatus> _requestPermission(
List<Permission> permissionList) async {
Map<Permission, PermissionStatus> statuses = await permissionList.request();
PermissionStatus currentPermissionStatus = PermissionStatus.granted;
statuses.forEach((key, value) {
if (!value.isGranted) {
currentPermissionStatus = value;
return;
}
});
return currentPermissionStatus;
}
//核对权限是否已获取
static Future<bool> checkPermission(List<Permission> permissionList) async {
for (var element in permissionList) {
if (!await element.status.isGranted) {
return false;
}
}
return true;
}
}
import 'package:flutter/material.dart';
import 'package:flutter_clx_base/flutter_clx_base.dart';
/// 通用dialog
class NormalDialog extends StatelessWidget {
const NormalDialog({
super.key,
this.onCancel,
this.onConfirm,
this.title = '提示',
this.content,
this.contentWidget,
this.cancelBtnText = '取消',
this.confirmBtnText = '确定',
});
final Function? onCancel;
final Function? onConfirm;
final String? cancelBtnText;
final String confirmBtnText;
final String? title;
final String? content;
final Widget? contentWidget;
@override
Widget build(BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Column(
children: [
Offstage(
offstage: title == null, child: const SizedBox(height: 10)),
Text(title ?? '',
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Color(0xFF101827))),
const SizedBox(height: 10),
contentWidget == null
? Padding(
padding: const EdgeInsets.only(left: 16, right: 16),
child: Text(
content ?? '',
style: const TextStyle(
fontSize: 14,
color: Color(0xFF86909C),
height: 1.5),
textAlign: TextAlign.center,
),
)
: contentWidget!,
const SizedBox(height: 20.0),
Container(height: 1, color: const Color(0xffE5E6EB)),
],
),
SizedBox(
height: 45,
child: Row(
children: [
cancelBtnText != null
? Expanded(
child: TextButton(
child: Text(cancelBtnText ?? '',
style: const TextStyle(
color: Color(0xFF101827), fontSize: 16)),
onPressed: () {
Get.back();
onCancel?.call();
},
),
)
: const SizedBox(),
cancelBtnText != null
? Container(
width: 1,
color: const Color(0xffE5E6EB),
)
: const SizedBox(),
Expanded(
child: TextButton(
child: Text(
confirmBtnText,
style: const TextStyle(fontSize: 16),
),
onPressed: () {
Get.back();
onConfirm?.call();
},
),
),
],
),
)
],
),
);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论