mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-01-15 14:08:40 +00:00
90 lines
2.5 KiB
Dart
90 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
import 'package:twonly/src/utils/log.dart';
|
|
|
|
class PermissionHandlerView extends StatefulWidget {
|
|
const PermissionHandlerView({super.key, required this.onSuccess});
|
|
|
|
final Function onSuccess;
|
|
|
|
@override
|
|
PermissionHandlerViewState createState() => PermissionHandlerViewState();
|
|
}
|
|
|
|
Future<bool> checkPermissions() async {
|
|
if (!await Permission.camera.isGranted) {
|
|
return false;
|
|
}
|
|
if (!await Permission.microphone.isGranted) {
|
|
// microphone is only needed when
|
|
return true;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
class PermissionHandlerViewState extends State<PermissionHandlerView> {
|
|
Future<Map<Permission, PermissionStatus>> permissionServices() async {
|
|
// try {
|
|
Map<Permission, PermissionStatus> statuses = await [
|
|
Permission.camera,
|
|
// Permission.microphone,
|
|
Permission.notification
|
|
].request();
|
|
// } catch (e) {}
|
|
// You can request multiple permissions at once.
|
|
|
|
// if (statuses[Permission.microphone]!.isPermanentlyDenied) {
|
|
// openAppSettings();
|
|
// // setState(() {});
|
|
// } else {
|
|
// // if (statuses[Permission.microphone]!.isDenied) {
|
|
// // }
|
|
// }
|
|
|
|
if (statuses[Permission.camera]!.isPermanentlyDenied) {
|
|
await openAppSettings();
|
|
// setState(() {});
|
|
} else {
|
|
// if (statuses[Permission.camera]!.isDenied) {
|
|
// }
|
|
}
|
|
|
|
return statuses;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Center(
|
|
child: Container(
|
|
padding: EdgeInsets.all(100),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
Text(
|
|
"twonly needs access to the camera and microphone.",
|
|
textAlign: TextAlign.center,
|
|
),
|
|
SizedBox(height: 50),
|
|
FilledButton.icon(
|
|
label: Text("Request permissions"),
|
|
icon: const Icon(Icons.perm_camera_mic),
|
|
onPressed: () async {
|
|
try {
|
|
await permissionServices();
|
|
if (await checkPermissions()) {
|
|
widget.onSuccess();
|
|
}
|
|
} catch (e) {
|
|
Log.error(e);
|
|
}
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|