gt_permission 1.0.0
gt_permission: ^1.0.0 copied to clipboard
A comprehensive Flutter permission handler utility with singleton pattern, platform-specific version handling, error management, and user-friendly result objects for all iOS and Android permissions.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:gt_permission/gt_permission.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'GT Permission Example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const PermissionExampleScreen(),
);
}
}
class PermissionExampleScreen extends StatefulWidget {
const PermissionExampleScreen({super.key});
@override
State<PermissionExampleScreen> createState() =>
_PermissionExampleScreenState();
}
class _PermissionExampleScreenState extends State<PermissionExampleScreen> {
final PermissionHandlerUtil _util = PermissionHandlerUtil.instance;
String _statusText = 'Tap a button to request permission';
Future<void> _requestCamera() async {
final result = await _util.requestCameraPermission();
_updateStatus('Camera', result);
}
Future<void> _requestLocation() async {
final result = await _util.requestLocationPermission();
_updateStatus('Location', result);
}
Future<void> _requestNotification() async {
final result = await _util.requestNotificationPermission();
_updateStatus('Notification', result);
}
Future<void> _requestPhotos() async {
final result = await _util.requestPhotosPermission();
_updateStatus('Photos', result);
}
void _updateStatus(String name, PermissionRequestResult result) {
setState(() {
if (result.isGranted) {
_statusText = '$name: ✅ Granted';
} else if (result.isPermanentlyDenied) {
_statusText = '$name: ❌ Permanently Denied\n${result.message}';
} else {
_statusText = '$name: ⚠️ Denied\n${result.message}';
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('GT Permission Example'),
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// Status Card
Card(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
const Icon(Icons.security, size: 48),
const SizedBox(height: 8),
Text(
_statusText,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.bodyLarge,
),
],
),
),
),
const SizedBox(height: 24),
// Permission Buttons
Text(
'Request Permissions',
style: Theme.of(context).textTheme.titleLarge,
),
const SizedBox(height: 12),
ElevatedButton.icon(
onPressed: _requestCamera,
icon: const Icon(Icons.camera_alt),
label: const Text('Request Camera'),
),
const SizedBox(height: 8),
ElevatedButton.icon(
onPressed: _requestLocation,
icon: const Icon(Icons.location_on),
label: const Text('Request Location'),
),
const SizedBox(height: 8),
ElevatedButton.icon(
onPressed: _requestNotification,
icon: const Icon(Icons.notifications),
label: const Text('Request Notifications'),
),
const SizedBox(height: 8),
ElevatedButton.icon(
onPressed: _requestPhotos,
icon: const Icon(Icons.photo_library),
label: const Text('Request Photos'),
),
const SizedBox(height: 24),
// Settings Button
OutlinedButton.icon(
onPressed: () => _util.openAppSettings(),
icon: const Icon(Icons.settings),
label: const Text('Open App Settings'),
),
],
),
),
);
}
}