import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:rogapp/routes/app_pages.dart'; class PermissionHandlerScreen extends StatefulWidget { const PermissionHandlerScreen({Key? key}) : super(key: key); @override State createState() => _PermissionHandlerScreenState(); } class _PermissionHandlerScreenState extends State { Future _showMyDialog() async { return showDialog( context: context, barrierDismissible: false, // user must tap button! builder: (BuildContext context) { return AlertDialog( title: const Text('ロケーション許可'), content: const SingleChildScrollView( child: ListBody( children: [ Text( 'このアプリでは、位置情報の収集を行います。'), Text( 'このアプリでは、開始時点で位置情報を収集します。'), ], ), ), actions: [ TextButton( child: const Text('わかった'), onPressed: () { //Navigator.of(context).pop(); Get.toNamed(AppPages.TRAVEL); }, ), ], ); }, ); } @override void initState() { // TODO: implement initState super.initState(); //permissionServiceCall(); } Future checkLocationPermission() async { return await Permission.location.status; } permissionServiceCall() async { await permissionServices().then( (value) { if (value[Permission.location]!.isGranted ) { /* ========= New Screen Added ============= */ Get.toNamed(AppPages.TRAVEL); // Navigator.pushReplacement( // context, // MaterialPageRoute(builder: (context) => SplashScreen()), // ); } else{ _showMyDialog(); } }, ); } /*Permission services*/ Future> permissionServices() async { // You can request multiple permissions at once. Map statuses = await [ Permission.location, //add more permission to request here. ].request(); if (statuses[Permission.location]!.isPermanentlyDenied) { await openAppSettings().then( (value) async { if (value) { if (await Permission.location.status.isPermanentlyDenied == true && await Permission.location.status.isGranted == false) { // openAppSettings(); permissionServiceCall(); /* opens app settings until permission is granted */ } } }, ); } else { if (statuses[Permission.location]!.isDenied) { permissionServiceCall(); } } /*{Permission.camera: PermissionStatus.granted, Permission.storage: PermissionStatus.granted}*/ return statuses; } @override Widget build(BuildContext context) { var status = Permission.location.status.then((value){ if(value.isGranted == false){ Future.delayed(Duration.zero, () => showAlert(context)); } else { Get.toNamed(AppPages.TRAVEL); } }); return Scaffold( body: Container( child: const Text(""), ), ); } void showAlert(BuildContext context) { showDialog( context: context, builder: (_) => AlertDialog( title: const Text('ロケーション許可'), content: const SingleChildScrollView( child: ListBody( children: [ Text( 'このアプリでは、位置情報の収集を行います。'), Text('岐阜ナビアプリではチェックポイントの自動チェックインの機能を可能にするために、現在地のデータが収集されます。アプリを閉じている時や、使用していないときにも収集されます。位置情報は、個人を特定できない統計的な情報として、ユーザーの個人情報とは一切結びつかない形で送信されます。お知らせの配信、位置情報の利用を許可しない場合は、この後表示されるダイアログで「許可しない」を選択してください。'), ], ), ), actions: [ TextButton( child: const Text('わかった'), onPressed: () { permissionServiceCall(); }, ), ], ) ); } }