Koje vrste dozvola postoje u Flutter aplikacijama?
sobes.tech АИ
Одговор од АИ
Dozvole u Flutter aplikacijama upravljaju operativni sistem uređaja (Android ili iOS). Flutter omogućava pristup odgovarajućim API-jevima platforme za zahtev i proveru ovih dozvola.
Glavne vrste dozvola:
- Dozvole pri instalaciji (Install-time permissions): Automatski se daju pri instalaciji aplikacije. Ne zahtevaju eksplicitni zahtev od korisnika tokom rada aplikacije. U Android-u pripadaju kategorijama
normalisignature. - Dozvole u toku izvršavanja (Runtime permissions): Najvažnije i najosetljivije dozvole, kao što su pristup lokaciji, kameri, mikrofonu, kontaktima i fajlovima. Zahtevaju eksplicitni zahtev tokom rada aplikacije. Korisnik može da da ili odbije takvu dozvolu. U Android-u pripadaju kategoriji
dangerous. - Specijalne dozvole (Special permissions): Dozvole koje zahtevaju poseban interakciju sa korisnikom za odobrenje, na primer, dozvola za crtanje preko drugih prozora (
ACTION_MANAGE_OVERLAY_PERMISSION) ili dozvola za zapis u sistemske postavke (WRITE_SETTINGS).
Flutter koristi dodatke (plugins) za interakciju sa API-jevima platforme i upravljanje dozvolama. Najrašireniji plugin je permission_handler.
Prilikom korišćenja permission_handler koriste se sledeći statusi dozvola:
granted: Dozvola je odobrena.denied: Dozvola je odbijena (može se ponovo zatražiti).restricted: Dozvola je ograničena od strane platforme.permanentlyDenied: Dozvola je trajno odbijena, potrebno je uputiti korisnika u podešavanja aplikacije.limited: Dozvola je delimično odobrena (na primer, pristup samo odabrane fotografije u iOS-u).
Primer zahteva za dozvolu pristupa kameri:
import 'package:permission_handler/permission_handler.dart';
// Asinhrona funkcija za zahtev za dozvolu
Future<void> requestCameraPermission() async {
// Dobijanje statusa dozvole
var status = await Permission.camera.status;
// Ako dozvola još nije odobrena
if (status.isDenied) {
// Zahtev za dozvolu
status = await Permission.camera.request();
// Provera statusa nakon zahteva
if (status.isGranted) {
// Dozvola je odobrena, može se koristiti kamera
print('Dozvola za kameru odobrena');
} else if (status.isPermanentlyDenied) {
// Dozvola je trajno odbijena, usmeravamo korisnika u podešavanja
print('Dozvola za kameru je trajno odbijena, otvorite podešavanja');
openAppSettings(); // funkcija iz permission_handler
} else {
// Dozvola je odbijena, ali se može ponovo zatražiti
print('Dozvola za kameru je odbijena');
}
} else if (status.isGranted) {
// Dozvola je već odobrena
print('Dozvola za kameru je već odobrena');
}
}
Potrebno je dodati odgovarajuće dozvole u Android manifest (android/app/src/main/AndroidManifest.xml) i Info.plist za iOS (ios/Runner/Info.plist).
Primer dodavanja dozvole u AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Dozvola za pristup kameri -->
<uses-permission android:name="android.permission.CAMERA"/>
<application
...>
<!-- Vaše aktivnosti -->
</application>
</manifest>
Primer dodavanja opisa za korišćenje dozvole u Info.plist (za iOS, potrebno za dozvole u toku izvršavanja):
<?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>
...
<!-- Opis razloga za korišćenje kamere -->
<key>NSCameraUsageDescription</key>
<string>Ova aplikacija koristi vašu kameru za snimanje fotografija.</string>
...
</dict>
</plist>
Važno je zahtevati dozvole u odgovarajućem trenutku korišćenja funkcije koja ih zahteva, kako bi se izbeglo negativno korisničko iskustvo.