Stream.take în Dart

take păstrează doar primele n valori și apoi închide stream-ul; skip sare peste primele n valori.

Sintaxă
Stream<T> take(int count)
Stream<T> skip(int count)

Ce face Stream.take

take(n) emite primele n valori, apoi închide stream-ul nou și anulează ascultarea celui original. Este modul obișnuit de a limita un stream infinit, cum este Stream.periodic.

skip(n) ignoră primele n valori și le emite pe toate celelalte. Dacă stream-ul are mai puține valori, rezultatul este gol.

Parametri

Parametru Descriere
count Câte valori se păstrează (la take) sau se sar (la skip).

Ce returnează

Un Stream<T> nou.

Exemple

Exemplul 1: Primele 3 ticuri ale unui stream infinit

Future<void> main() async {
  final ticuri = Stream.periodic(const Duration(milliseconds: 20), (i) => 'tic ${i + 1}');
  await for (final t in ticuri.take(3)) {
    print(t);
  }
  print('am terminat după 3');
}

Rezultat

tic 1
tic 2
tic 3
am terminat după 3

Exemplul 2: Paginare cu skip și take

Future<void> main() async {
  Stream<String> produse() => Stream.fromIterable(['p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7']);
  const peLaPagina = 3;
  for (var pagina = 0; pagina < 3; pagina++) {
    final elemente = await produse().skip(pagina * peLaPagina).take(peLaPagina).toList();
    print('pagina ${pagina + 1}: $elemente');
  }
}

Rezultat

pagina 1: [p1, p2, p3]
pagina 2: [p4, p5, p6]
pagina 3: [p7]

Greșeli frecvente

  • Chemi skip și take de mai multe ori pe același stream obișnuit. Fiecare apel are nevoie de un stream nou (de aceea exemplul folosește o funcție care creează stream-ul).

Comenzi înrudite

  • Stream.takeWhile: takeWhile emite valori cât timp testul este adevărat și apoi se închide; skipWhile sare peste ele până la primul fals.
  • Stream.periodic: Creează un stream infinit care emite o valoare la fiecare interval de timp, calculată din numărul pasului.
  • Iterable.take: take păstrează primele n elemente, skip sare peste primele n elemente.
  • Stream.first: first, last, single și elementAt dau un Future cu o anumită valoare din stream: prima, ultima, singura sau a n-a.