file_access_settings_return 1.0.1 copy "file_access_settings_return: ^1.0.1" to clipboard
file_access_settings_return: ^1.0.1 copied to clipboard

PlatformAndroid

A lightweight Flutter plugin that helps Android apps return to the foreground after users complete file access authorization in system settings.

example/lib/main.dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:file_access_settings_return/file_access_settings_return.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:device_info_plus/device_info_plus.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _plugin = FileAccessSettingsReturn();
  bool _hasPermission = false;
  bool _isRequesting = false;

  @override
  void initState() {
    super.initState();
    _checkPermission();
  }

  Future<void> _checkPermission() async {
    final hasPermission = await _plugin.hasStoragePermission();
    if (mounted) {
      setState(() => _hasPermission = hasPermission);
    }
  }

  Future<void> _requestPermission() async {
    if (_isRequesting) return;
    setState(() => _isRequesting = true);

    try {
      // Notify native: about to enter permission page
      await _plugin.notifyEnterPermissionPage();

      // Request permission (opens system settings on Android 11+)
      final result = await _requestFilePermission();

      // Cancel polling after returning from settings
      await _plugin.cancelPermissionPolling();

      setState(() {
        _hasPermission = result;
        _isRequesting = false;
      });
    } catch (e) {
      await _plugin.cancelPermissionPolling();
      setState(() => _isRequesting = false);
    }
  }

  Future<bool> _requestFilePermission() async {
    if (!Platform.isAndroid) return true;

    final androidInfo = await DeviceInfoPlugin().androidInfo;
    final sdkInt = androidInfo.version.sdkInt;

    if (sdkInt >= 30) {
      final status = await Permission.manageExternalStorage.request();
      return status.isGranted;
    } else {
      final status = await Permission.storage.request();
      return status.isGranted;
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('File Access Settings Return')),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(24),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Icon(
                  _hasPermission ? Icons.folder_open : Icons.folder,
                  size: 80,
                  color: _hasPermission ? Colors.blue : Colors.grey,
                ),
                const SizedBox(height: 24),
                Text(
                  _hasPermission
                      ? 'File access permission granted'
                      : 'File access permission required',
                  style: const TextStyle(fontSize: 18),
                  textAlign: TextAlign.center,
                ),
                const SizedBox(height: 12),
                Text(
                  _hasPermission
                      ? 'You can now access files on this device.'
                      : 'This app needs file access permission to manage your files. '
                            'Tap the button below to grant permission.',
                  style: TextStyle(fontSize: 14, color: Colors.grey[600]),
                  textAlign: TextAlign.center,
                ),
                const SizedBox(height: 32),
                if (!_hasPermission)
                  ElevatedButton(
                    onPressed: _isRequesting ? null : _requestPermission,
                    child: _isRequesting
                        ? const SizedBox(
                            width: 20,
                            height: 20,
                            child: CircularProgressIndicator(strokeWidth: 2),
                          )
                        : const Text('Grant File Access Permission'),
                  ),
                if (_hasPermission)
                  ElevatedButton(
                    onPressed: _checkPermission,
                    child: const Text('Refresh Status'),
                  ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
1
likes
150
points
0
downloads

Publisher

unverified uploader

Weekly Downloads

A lightweight Flutter plugin that helps Android apps return to the foreground after users complete file access authorization in system settings.

Repository (GitHub)
View/report issues

Topics

#android #permission #file-access #storage

Documentation

API reference

License

MIT (license)

Dependencies

flutter, plugin_platform_interface

More

Packages that depend on file_access_settings_return

Packages that implement file_access_settings_return