Junior
Стримҳо дар Flutter барои чӣ истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Stream-ҳо дар Flutter барои кор бо пайдарпайии рӯйдодҳои асинхронӣ истифода мешаванд.
Ҳолатҳои асосии истифода:
- Ҳамоҳангӣ бо тағйироти маълумот: Redux, намунаҳои BLoC аз stream-ҳо барои идоракунии ҳолати барнома ва навсозии реактивии UI дар вақти тағйирот истифода мебаранд.
- Кор бо маълумоти дар ҷараён: Гирифтани маълумот тавассути шабака (масалан, WebSocket), хондан аз файлҳо, кор бо сенсорҳои дастгоҳ.
- Коркарди муомилоти корбар: пайгирии скролл, Draggable / DragTarget.
- Амалиёти асинхронӣ: иҷрои вазифаҳо дар пасзамина ва гирифтани натиҷаҳо ба миқёси онҳо тайёр мешаванд.
Маълумоти калидӣ:
- 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; // интиқол додани арзиш
}
}