Add location permission request
This commit is contained in:
@@ -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);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
57
lib/product/permission/location_permission.dart
Normal file
57
lib/product/permission/location_permission.dart
Normal 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 {}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)),
|
||||
));
|
||||
|
||||
Reference in New Issue
Block a user