Sobes.tech
Junior

Flutter колдонмолорунда кандай уруксаттар бар?

sobes.tech AI

AIден жооп

Flutter тиркемелериндеги уруксаттар түзүлөт түзмөктүн операциялык тутуму (Android же iOS) тарабынан. Flutter тиешелүү API-ларга жеткиликтүүлүк берет уруксаттарды сурап жана текшерип:

Негизги уруксаттар түрлөрү:

  • Орнотуу учурунда уруксаттар (Install-time permissions): Автоматтык түрдө тиркемени орнотуу учурунда берилет. Тиркемени иштетип жатканда ачык сурап талап кылбайт. Androidде normal жана signature категорияларына кирет:
  • Иштөө учурунда уруксаттар (Runtime permissions): Мөөнөттүү жана сезимтал уруксаттар, мисалы, жайгашкан жерге, камерага, микрофонго, байланыштарга жана файлдарга жетүү. Иштеп жатканда ачык суралат. Колдонуучу уруксат бериши же четке кагышы мүмкүн. Androidде dangerous категориясына кирет:
  • Өзгөчө уруксаттар (Special permissions): Өзгөчө колдонуучу менен өз ара аракеттенүүнү талап кылган уруксаттар, мисалы, башка терезелердин үстүнө сүрөт тартуу уруксаты (ACTION_MANAGE_OVERLAY_PERMISSION) же системдик жөндөөлөрдү жазуу уруксаты (WRITE_SETTINGS).

Flutter API менен иштөө үчүн плагиндерди колдонуп, уруксаттарды башкаруу мүмкүн. Ең кеңири колдонулган плагин — permission_handler.

permission_handler менен иштөөдө төмөнкү статустар колдонулат:

  • granted: Уруксат берилген.
  • denied: Уруксат четке кагылган (кайра сурап алууга болот).
  • restricted: Платформа тарабынан чектелген.
  • permanentlyDenied: Уруксат түп-тамырынан четке кагылган, колдонуучуну тиркеменин жөндөөлөрүнө жиберүү керек.
  • limited: Уруксат бөлөк бөлөк берилген (мисалы, iOSто гана тандалган сүрөттөргө жетүү).

Мисал уруксат сурау:

import 'package:permission_handler/permission_handler.dart';

// Асынык функция уруксат сурау үчүн
Future<void> requestCameraPermission() async {
  // Уруксаттын статусун алуу
  var status = await Permission.camera.status;
  // Эгер уруксат берилбесе
  if (status.isDenied) {
    // Уруксат сурау
    status = await Permission.camera.request();
    // Сураган соң статусын текшерүү
    if (status.isGranted) {
      // Уруксат берилген, камераны колдонсо болот
      print('Камера уруксаты берилди');
    } else if (status.isPermanentlyDenied) {
      // Уруксат түп-тамырынан четке кагылган, жөндөөлөрдү ачыңыз
      print('Камера уруксаты түп-тамырынан четке кагылды, жөндөөлөрдү ачыңыз');
      openAppSettings(); // permission_handler'дин функциясы
    } else {
      // Уруксат четке кагылган, кайра сураса болот
      print('Камера уруксаты четке кагылды');
    }
  } else if (status.isGranted) {
    // Уруксат алгачкы берилген
    print('Камера уруксаты алгачкы берилген');
  }
}

Android жана iOS үчүн уруксаттарды манифест жана Info.plist файлдарына кошуу керек:

Android үчүн AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Камерага жетүү уруксаты -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Акытыңыздар -->
    </application>
</manifest>

iOS үчүн Info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	...
	<!-- Камера колдонуу себебин көрсөтүү -->
	<key>NSCameraUsageDescription</key>
	<string>Бул тиркеме сүрөткө тартуу үчүн камераны колдонууда.</string>
	...
</dict>
</plist>

Уруксаттарды сурауу тиешелүү учурда, уруксат талап кылынган функцияны колдонуу алдында жүргүзүлүшү керек, ошондо колдонуучу таасирленбейт.