Ce face Uri.queryParameters
queryParameters desface partea de după ? într-un Map: pentru ?oras=Ia%C8%99i&pag=2 obții {oras: Iași, pag: 2}, cu valorile deja decodificate. Valorile sunt mereu texte, deci numerele le transformi cu int.tryParse. Map-ul nu se poate modifica. Dacă un parametru apare de mai multe ori, aici rămâne doar ultima valoare; pe toate le găsești în queryParametersAll.
pathSegments împarte calea după / și decodifică fiecare bucată: pentru /invata/dart/uri/ obții [invata, dart, uri, ] (ultimul element este gol din cauza barei finale). Este util când adresa conține informații, de exemplu un id de produs.
Ce returnează
queryParameters: un Map<String, String>. pathSegments: un List<String>. Ambele nemodificabile.
Exemple
Exemplul 1: Parametri și segmente
void main() {
var u = Uri.parse('https://magazin.ro/produse/telefoane/12345?culoare=negru&pret_max=2500&oras=Ia%C8%99i');
print(u.queryParameters);
print(u.queryParameters['oras']);
var pretMax = int.tryParse(u.queryParameters['pret_max'] ?? '') ?? 0;
print(pretMax + 500);
print(u.queryParameters['marime']);
print(u.pathSegments);
print('Produsul ${u.pathSegments.last} din categoria ${u.pathSegments[1]}');
}
Rezultat
{culoare: negru, pret_max: 2500, oras: Iași}
Iași
3000
null
[produse, telefoane, 12345]
Produsul 12345 din categoria telefoane
Exemplul 2: Parametri repetați
void main() {
var u = Uri.parse('https://exemplu.ro/filtre/?marca=dacia&marca=ford&an=2020');
print(u.queryParameters['marca']);
print(u.queryParametersAll['marca']);
print(u.pathSegments);
print(u.pathSegments.where((s) => s.isNotEmpty).toList());
}
Rezultat
ford
[dacia, ford]
[filtre, ]
[filtre]
Greșeli frecvente
- Încerci
u.queryParameters['pag'] = '3': map-ul este nemodificabil și aruncăUnsupportedError. Creează o adresă nouă cureplace(queryParameters: ...). - Desfaci manual
u.query.split('&')și uiți decodificarea (%C8%99rămâne așa).queryParametersface totul corect.
Comenzi înrudite
Uri: O adresă web (URL) sau de fișier, desfăcută în părți: schemă, host, port, cale, parametri și fragment.Uri.replace: Returnează o copie a adresei în care sunt înlocuite doar părțile date (de exemplu parametrii sau calea).Uri.encodeComponent: Codifică un text ca să poată sta în siguranță într-o bucată de URL (spații, diacritice, &, /) și invers.