Add location permission request

This commit is contained in:
anhtunz
2024-12-18 22:38:26 +07:00
parent d0ba34381a
commit 9046b21831
11 changed files with 168 additions and 30 deletions

View File

@@ -1,11 +1,17 @@
import 'package:app_settings/app_settings.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../../extention/context_extention.dart';
import '../../../services/language_services.dart';
class RequestPermissionDialog {
showRequestPermissionDialog(BuildContext context, IconData icon,
String dialogContent, AppSettingsType type) {
RequestPermissionDialog._init();
static RequestPermissionDialog? _instance;
static RequestPermissionDialog get instance =>
_instance ??= RequestPermissionDialog._init();
requestPermissionDialogAndroid(BuildContext context, IconData icon,
String content, AppSettingsType type) {
showDialog(
useRootNavigator: false,
context: context,
@@ -20,36 +26,39 @@ class RequestPermissionDialog {
mainAxisSize: MainAxisSize.min,
children: [
Padding(
padding: context.paddingNormalVertical,
padding: dialogContext.paddingNormalVertical,
child: Text(
dialogContent,
"Alow app to use $content permission",
textAlign: TextAlign.center,
style: const TextStyle(
fontWeight: FontWeight.bold, fontSize: 18),
),
),
Divider(height: context.lowValue),
Divider(height: dialogContext.lowValue),
GestureDetector(
onTap: () {
AppSettings.openAppSettings(type: type);
Navigator.of(dialogContext).pop();
},
child: Padding(
padding:
context.paddingNormalVertical, // Cách giữa các phần tử
padding: dialogContext.paddingNormalVertical,
child: Text(appLocalization(context).allow_message,
style: const TextStyle(fontWeight: FontWeight.bold)),
),
),
Divider(height: context.lowValue),
Divider(height: dialogContext.lowValue),
GestureDetector(
onTap: () {
Navigator.of(dialogContext).pop(); // Đóng dialog
Navigator.of(dialogContext).pop();
},
child: Padding(
padding:
context.paddingNormalVertical, // Cách giữa các phần tử
child: Text(appLocalization(context).decline_message,
style: const TextStyle(fontWeight: FontWeight.bold)),
padding: dialogContext.paddingNormalVertical,
child: Text(
appLocalization(dialogContext).decline_message,
style: const TextStyle(
fontWeight: FontWeight.bold,
),
),
),
),
],
@@ -58,4 +67,31 @@ class RequestPermissionDialog {
},
);
}
requestPermissionDialogIOS(context, AppSettingsType appSettingsType, content,
AppSettingsType type) =>
showCupertinoDialog<void>(
context: context,
builder: (showCupertinoDialogContext) => CupertinoAlertDialog(
title: Text(appLocalization(showCupertinoDialogContext)
.permission_deny_message),
content: Text("Alow app to use $content permission"),
actions: <CupertinoDialogAction>[
CupertinoDialogAction(
child: Text(appLocalization(showCupertinoDialogContext)
.cancel_button_content),
onPressed: () => Navigator.pop(showCupertinoDialogContext),
),
CupertinoDialogAction(
isDefaultAction: true,
child: Text(
appLocalization(showCupertinoDialogContext).allow_message),
onPressed: () {
Navigator.pop(showCupertinoDialogContext);
AppSettings.openAppSettings(type: appSettingsType);
},
),
],
),
);
}

View File

@@ -193,8 +193,9 @@
"warning_message": "Warning: ",
"loading_message": "Loading...",
"detail_message": "Detail",
"decline_message": "DECLINE",
"allow_message": "ALLOW",
"permission_deny_message": "Permission Denied",
"decline_message": "Decline",
"allow_message": "Allow",
"add_button_content": "Add",
"update_button_content": "Update",
"change_button_content": "Change",

View File

@@ -193,6 +193,7 @@
"warning_message": "Cảnh báo:",
"loading_message": "Đang tải...",
"detail_message": "Chi tiết",
"permission_deny_message":"Quyền bị từ chối",
"decline_message": "TỪ CHỐI",
"allow_message": "CHO PHÉP",
"add_button_content": "Thêm",

View File

@@ -0,0 +1,57 @@
import 'dart:developer';
import 'dart:io';
import 'package:app_settings/app_settings.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:sfm_app/product/base/widget/dialog/request_permission_dialog.dart';
class LocationPermissionRequest {
LocationPermissionRequest._init();
static LocationPermissionRequest? _instance;
static LocationPermissionRequest get instance =>
_instance ??= LocationPermissionRequest._init();
Future<bool> checkLocationPermission(context) async {
var status = await Permission.location.status;
log("Status: $status");
if (status.isDenied || status.isPermanentlyDenied) {
requestLocationPermisson(context, Icons.location_on_outlined,
Permission.location, AppSettingsType.location, "Location");
return false;
} else {
return true;
}
}
void requestLocationPermisson(
context,
IconData icon,
Permission service,
AppSettingsType appSettingsType,
String serviceName,
) async {
var status = await service.status;
if (status.isDenied) {
await service.request();
} else if (status.isPermanentlyDenied) {
if (Platform.isAndroid) {
RequestPermissionDialog.instance.requestPermissionDialogAndroid(
context,
icon,
serviceName,
appSettingsType,
);
} else if (Platform.isIOS) {
RequestPermissionDialog.instance.requestPermissionDialogIOS(
context,
appSettingsType,
serviceName,
appSettingsType,
);
} else {
log("Location Permission: Undefined Platform");
}
} else {}
}
}

View File

@@ -24,7 +24,7 @@ class NotificationPermission {
} else {
log("NotificationsPermission: User denied permission");
// ignore: use_build_context_synchronously
RequestPermissionDialog().showRequestPermissionDialog(context,
RequestPermissionDialog.instance.requestPermissionDialogAndroid(context,
Icons.location_on_outlined, "ABCDE", AppSettingsType.notification);
}
}

View File

@@ -5,7 +5,7 @@ InputDecoration borderRadiusTopLeftAndBottomRight(
BuildContext context, String hintText) =>
InputDecoration(
hintText: hintText,
border: OutlineInputBorder(
border: const OutlineInputBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(12), bottomRight: Radius.circular(12)),
));