Sobes.tech
Junior

Flutter'da oqimlar nima uchun ishlatiladi?

sobes.tech AI

AIdan javob

Flutter'da streamlar asinxron voqealar ketma-ketligini boshqarish uchun ishlatiladi.

Asosiy foydalanish holatlari:

  1. Ma'lumot o'zgarishlariga javob berish: Redux, BLoC naqshlari ilovaning holatini boshqarish va UI ni o'zgarishlar bilan reaktiv tarzda yangilash uchun streamlardan foydalanadi.
  2. Stream ma'lumotlar bilan ishlash: Tarmoq orqali ma'lumotlarni olish (masalan, WebSocket), fayllardan o'qish, qurilma sensorlari bilan ishlash.
  3. Foydalanuvchi bilan o'zaro ta'sirlarni boshqarish: Skrollni kuzatish, Draggable / DragTarget.
  4. Asinxron operatsiyalar: Orqa fon vazifalarini bajarish va natijalarni tayyor bo'lib qolgan sayin olish.

Asosiy tushunchalar:

  • Stream: Asinxron voqealar ketma-ketligi. Stream 0 yoki undan ortiq voqealarni chiqarishi mumkin va keyin yakunlanadi (muvaffaqiyat yoki xato bilan).
  • StreamSubscription: Streamga obuna bo'lishni ifodalaydi. Voqealarni olish va obunani boshqarish (to'xtatish, davom ettirish, bekor qilish) imkonini beradi.
  • Sink: Streamga ma'lumot qo'shish uchun ishlatiladi.
  • StreamBuilder: Streamdan yangi ma'lumotlar kelganda qayta quriladigan widget.
// StreamBuilder misoli
StreamBuilder<int>(
  stream: counterStream, // Sizning stream
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Xato: \\${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Kutmoqda...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Qiymat: \\${snapshot.data}');
      case ConnectionState.done:
        return Text('Stream tugadi. Oxirgi qiymat: \\${snapshot.data}');
    }
  },
)
// Oddiy raqamlarni chiqaradigan stream misoli
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Qiymatni chiqaradi
  }
}