Sobes.tech
Junior

Стримҳо дар Flutter барои чӣ истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Stream-ҳо дар Flutter барои кор бо пайдарпайии рӯйдодҳои асинхронӣ истифода мешаванд.

Ҳолатҳои асосии истифода:

  1. Ҳамоҳангӣ бо тағйироти маълумот: Redux, намунаҳои BLoC аз stream-ҳо барои идоракунии ҳолати барнома ва навсозии реактивии UI дар вақти тағйирот истифода мебаранд.
  2. Кор бо маълумоти дар ҷараён: Гирифтани маълумот тавассути шабака (масалан, WebSocket), хондан аз файлҳо, кор бо сенсорҳои дастгоҳ.
  3. Коркарди муомилоти корбар: пайгирии скролл, Draggable / DragTarget.
  4. Амалиёти асинхронӣ: иҷрои вазифаҳо дар пасзамина ва гирифтани натиҷаҳо ба миқёси онҳо тайёр мешаванд.

Маълумоти калидӣ:

  • Stream: Секвенсияи рӯйдодҳои асинхронӣ. Stream метавонад 0 ё бештар аз 0 рӯйдодро интиқол диҳад ва сипас ба охир расад (бо муваффақият ё хато).
  • StreamSubscription: Намояндаи обуна ба stream. Имкон медиҳад, ки рӯйдодҳоро аз stream қабул кунед ва обунаро идора кунед (тамдид кардан, идома додан, бекор кардан).
  • Sink: Барои илова кардани маълумот ба stream истифода мешавад.
  • StreamBuilder: Widget, ки дар вақти гирифтани маълумоти нав аз stream дубора сохта мешавад.
// Мисоли истифодаи StreamBuilder
StreamBuilder<int>(
  stream: counterStream, // Stream-и шумо
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Хатогӣ: \\${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Дар интизорӣ...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Арзиш: \\${snapshot.data}');
      case ConnectionState.done:
        return Text('Stream ба охир расид. Охирин арзиш: \\${snapshot.data}');
    }
  },
)
// Мисоли stream оддӣ, ки рақамҳоро интиқол медиҳад
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // интиқол додани арзиш
  }
}