mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 01:54:37 +00:00 
			
		
		
		
	 6220680ce0
			
		
	
	
		6220680ce0
		
			
		
	
	
	
	
		
			
			* fix: add permission check before selecting image in image block * feat: use system default font on desktop * fix: set appbar icon size to 30 * feat: add default font family on desktop
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| // Check if the user has the required permission to access the device's
 | |
| //  - camera
 | |
| //  - storage
 | |
| //  - ...
 | |
| import 'dart:async';
 | |
| 
 | |
| import 'package:appflowy/generated/locale_keys.g.dart';
 | |
| import 'package:appflowy/mobile/presentation/widgets/show_flowy_mobile_confirm_dialog.dart';
 | |
| import 'package:appflowy/startup/tasks/device_info_task.dart';
 | |
| import 'package:easy_localization/easy_localization.dart';
 | |
| import 'package:flowy_infra_ui/flowy_infra_ui.dart';
 | |
| import 'package:flutter/foundation.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:permission_handler/permission_handler.dart';
 | |
| 
 | |
| class PermissionChecker {
 | |
|   static Future<bool> checkPhotoPermission(BuildContext context) async {
 | |
|     // check the permission first
 | |
|     final status = await Permission.photos.status;
 | |
|     // if the permission is permanently denied, we should open the app settings
 | |
|     if (status.isPermanentlyDenied && context.mounted) {
 | |
|       unawaited(
 | |
|         showFlowyMobileConfirmDialog(
 | |
|           context,
 | |
|           title: FlowyText.semibold(
 | |
|             LocaleKeys.pageStyle_photoPermissionTitle.tr(),
 | |
|             maxLines: 3,
 | |
|             textAlign: TextAlign.center,
 | |
|           ),
 | |
|           content: FlowyText(
 | |
|             LocaleKeys.pageStyle_photoPermissionDescription.tr(),
 | |
|             maxLines: 5,
 | |
|             textAlign: TextAlign.center,
 | |
|             fontSize: 12.0,
 | |
|           ),
 | |
|           actionAlignment: ConfirmDialogActionAlignment.vertical,
 | |
|           actionButtonTitle: LocaleKeys.pageStyle_openSettings.tr(),
 | |
|           actionButtonColor: Colors.blue,
 | |
|           cancelButtonTitle: LocaleKeys.pageStyle_doNotAllow.tr(),
 | |
|           cancelButtonColor: Colors.blue,
 | |
|           onActionButtonPressed: () {
 | |
|             openAppSettings();
 | |
|           },
 | |
|         ),
 | |
|       );
 | |
| 
 | |
|       return false;
 | |
|     } else if (status.isDenied) {
 | |
|       // https://github.com/Baseflow/flutter-permission-handler/issues/1262#issuecomment-2006340937
 | |
|       Permission permission = Permission.photos;
 | |
|       if (defaultTargetPlatform == TargetPlatform.android &&
 | |
|           ApplicationInfo.androidSDKVersion <= 32) {
 | |
|         permission = Permission.storage;
 | |
|       }
 | |
|       // if the permission is denied, we should request the permission
 | |
|       final newStatus = await permission.request();
 | |
|       if (newStatus.isDenied) {
 | |
|         return false;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return true;
 | |
|   }
 | |
| }
 |