Uri.replace în Dart

Adrese web (Uri) Dart 1.0

Returnează o copie a adresei în care sunt înlocuite doar părțile date (de exemplu parametrii sau calea).

Sintaxă
Uri replace({String? scheme, String? userInfo, String? host, int? port, String? path,
    Iterable<String>? pathSegments, String? query,
    Map<String, dynamic>? queryParameters, String? fragment})

Ce face Uri.replace

Uri este imutabil, așa că pentru a schimba o parte creezi o adresă nouă cu replace. Părțile pe care nu le dai rămân neschimbate: u.replace(scheme: 'https') păstrează domeniul, calea și parametrii.

Atenție: queryParameters înlocuiește toți parametrii, nu îi adaugă. Pentru a adăuga sau schimba unul singur, copiază întâi map-ul existent: {...u.queryParameters, 'pagina': '2'}. Pentru a scoate fragmentul, folosește removeFragment().

Parametri

Parametru Descriere
scheme, host, port, path, ... Părțile care se înlocuiesc; cele lipsă rămân.

Ce returnează

Un Uri nou.

Exemple

Exemplul 1: Schimbarea unor părți

void main() {
  var u = Uri.parse('http://exemplu.ro/produse?categorie=carti&pagina=1#sus');
  print(u.replace(scheme: 'https'));
  print(u.replace(path: '/oferte'));
  print(u.replace(queryParameters: {'pagina': '2'}));
  print(u.replace(queryParameters: {...u.queryParameters, 'pagina': '2'}));
  print(u.removeFragment());
  print(u);
}

Rezultat

https://exemplu.ro/produse?categorie=carti&pagina=1#sus
http://exemplu.ro/oferte?categorie=carti&pagina=1#sus
http://exemplu.ro/produse?pagina=2#sus
http://exemplu.ro/produse?categorie=carti&pagina=2#sus
http://exemplu.ro/produse?categorie=carti&pagina=1
http://exemplu.ro/produse?categorie=carti&pagina=1#sus

Exemplul 2: Linkuri de paginare

void main() {
  var curenta = Uri.parse('https://exemplu.ro/cauta?q=biciclete&oras=Iasi&pagina=3');
  var pagina = int.parse(curenta.queryParameters['pagina'] ?? '1');
  Uri laPagina(int p) => curenta.replace(queryParameters: {...curenta.queryParameters, 'pagina': '$p'});
  print('Înapoi: ${laPagina(pagina - 1)}');
  print('Înainte: ${laPagina(pagina + 1)}');
}

Rezultat

Înapoi: https://exemplu.ro/cauta?q=biciclete&oras=Iasi&pagina=2
Înainte: https://exemplu.ro/cauta?q=biciclete&oras=Iasi&pagina=4

Greșeli frecvente

  • Dai queryParameters: {'pagina': '2'} și pierzi ceilalți parametri. Combină-i cu cei existenți prin ...u.queryParameters.

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.queryParameters: queryParameters dă parametrii de după ? ca Map, decodificați; pathSegments dă bucățile căii, ca listă.
  • Uri.resolve: Calculează adresa completă a unui link relativ (ca ../poza.png), pornind de la adresa curentă.