Sobes.tech
Junior

Kokie leidimų tipai yra Flutter programose?

sobes.tech AI

Atsakymas iš AI

Flutter programų leidimai valdomi įrenginio operacinės sistemos (Android arba iOS). Flutter suteikia prieigą prie atitinkamų API, kad galėtumėte prašyti ir tikrinti šiuos leidimus:

Pagrindiniai leidimų tipai:

  • Įdiegimo metu leidimai (Install-time permissions): Automatiškai suteikiami įdiegimo metu. Nereikia aiškiai prašyti vartotojo veikimo metu. Android jie priklauso normal ir signature kategorijoms.
  • Veikimo metu leidimai (Runtime permissions): Svarbiausi ir jautriausi leidimai, tokie kaip prieiga prie vietos, kameros, mikrofono, kontaktų ir failų. Reikalauja aiškaus vartotojo prašymo veikimo metu. Vartotojas gali suteikti arba atmesti tokį leidimą. Android jie priklauso dangerous kategorijai.
  • Specialieji leidimai (Special permissions): Leidimai, reikalaujantys specialaus vartotojo sąveikos, pavyzdžiui, leidimas piešti virš kitų langų (ACTION_MANAGE_OVERLAY_PERMISSION) arba rašyti į sistemos nustatymus (WRITE_SETTINGS).

Flutter naudoja papildinius, kad sąveikautų su API ir valdytų leidimus. Dažniausiai naudojamas papildinys — permission_handler.

Naudojant permission_handler, naudojami šie būsenos statusai:

  • granted: Leidimas suteiktas.
  • denied: Leidimas atmestas (galima pakartotinai prašyti).
  • restricted: Leidimas yra ribojamas platformos.
  • permanentlyDenied: Leidimas galutinai atmestas, reikalinga nukreipti vartotoją į programėlės nustatymus.
  • limited: Leidimas iš dalies suteiktas (pavyzdžiui, prieiga tik prie pasirinktos nuotraukos iOS).

Pavyzdys leidimo prašymui:

import 'package:permission_handler/permission_handler.dart';

// Asinchroninė funkcija leidimo prašymui
Future<void> requestCameraPermission() async {
  // Gauti leidimo būseną
  var status = await Permission.camera.status;
  // Jei leidimas dar nėra suteiktas
  if (status.isDenied) {
    // Prašyti leidimo
    status = await Permission.camera.request();
    // Patikrinti būseną po prašymo
    if (status.isGranted) {
      // Leidimas suteiktas, galima naudoti kamerą
      print('Kameros leidimas suteiktas');
    } else if (status.isPermanentlyDenied) {
      // Leidimas galutinai atmestas, atidaryti nustatymus
      print('Kameros leidimas galutinai atmestas, atidarykite nustatymus');
      openAppSettings(); // permission_handler funkcija
    } else {
      // Leidimas atmestas, bet galima pakartotinai prašyti
      print('Kameros leidimas atmestas');
    }
  } else if (status.isGranted) {
    // Leidimas jau suteiktas
    print('Kameros leidimas jau suteiktas');
  }
}

Reikalinga pridėti atitinkamus leidimus į Android manifestą (android/app/src/main/AndroidManifest.xml) ir Info.plist (ios/Runner/Info.plist):

Android AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Leidimas prieiti prie kameros -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application
        ...>
        <!-- Jūsų veiklos -->
    </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>
	...
	<!-- Aprašymas, kodėl naudojama kamera -->
	<key>NSCameraUsageDescription</key>
	<string>Ši programa naudoja jūsų kamerą nuotraukų darymui.</string>
	...
</dict>
</plist>

Svarbu prašyti leidimų tinkamu momentu, kai funkcija, kuri reikalauja leidimo, yra naudojama, kad būtų išvengta neigiamo vartotojo patirties.