Uri.queryParameters în Dart

Adrese web (Uri) Dart 1.0

queryParameters dă parametrii de după ? ca Map, decodificați; pathSegments dă bucățile căii, ca listă.

Sintaxă
Map<String, String> get queryParameters
List<String> get pathSegments

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ă cu replace(queryParameters: ...).
  • Desfaci manual u.query.split('&') și uiți decodificarea (%C8%99 rămâne așa). queryParameters face 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.