Виджет StreamBuilder
Виджет StreamBuilder слушает stream
и передаёт в builder
AsyncSnapshot.
Состояние соединения читают из
ConnectionState.
initialData показывают до первого события.
Синтаксис
StreamBuilder<T>(
stream: stream,
initialData: initialData,
builder: (context, snapshot) {
return Text('abcde');
},
)
Параметры
| Параметр | Описание |
|---|---|
stream |
Поток данных, события которого отображают. |
builder |
Строит виджет по текущему snapshot. |
initialData |
Необязательное значение до первого события stream. |
Пример
Давайте покажем события простого Stream:
import 'dart:async';
import 'package:flutter/material.dart';
Stream<String> tickStream() async* {
yield 'abcde';
await Future<void>.delayed(const Duration(milliseconds: 100));
yield '12345';
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: StreamBuilder<String>(
stream: tickStream(),
builder: (context, snapshot) {
return Text(snapshot.data ?? 'wait');
},
),
),
),
),
);
}
На экране StreamBuilder сменит текст с 'abcde' на '12345'.
Пример
Давайте зададим initialData для StreamBuilder:
import 'dart:async';
import 'package:flutter/material.dart';
Stream<int> countStream() async* {
await Future<void>.delayed(const Duration(milliseconds: 200));
yield 1;
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: StreamBuilder<int>(
stream: countStream(),
initialData: 0,
builder: (context, snapshot) {
return Text('12345 ${snapshot.data}');
},
),
),
),
),
);
}
На экране StreamBuilder начнёт с '12345 0' благодаря initialData.
Смотрите также
-
виджет
FutureBuilder,
который ждёт одинFuture -
класс
AsyncSnapshot,
который приходит в builder -
перечисление
ConnectionState,
которое лежит в snapshot -
виджет
ListenableBuilder,
который слушает Listenable, а неStream