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
normalirsignaturekategorijoms. - 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
dangerouskategorijai. - 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.