Перечисление ConnectionState
Перечисление ConnectionState лежит в
AsyncSnapshot
у FutureBuilder
и StreamBuilder.
Значения показывают, ждут ли данные, идёт ли активная подписка
или работа завершена.
Синтаксис
ConnectionState.waiting
Значения
| Значение | Описание |
|---|---|
none |
Нет активного Future или Stream, initialData не задан.
|
waiting |
Ожидание первого результата или события. |
active |
Stream выдал промежуточные данные, но не закрыт.
|
done |
Future завершён или Stream закрыт.
|
Пример
Давайте покажем waiting у FutureBuilder:
import 'package:flutter/material.dart';
Future<String> slow() async {
await Future<void>.delayed(const Duration(milliseconds: 100));
return 'abcde';
}
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: FutureBuilder<String>(
future: slow(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text('12345');
}
return Text(snapshot.data ?? 'empty');
},
),
),
),
),
);
}
На экране ConnectionState.waiting покажет '12345' до готовности future.
Пример
Давайте дойдём до ConnectionState.done:
import 'package:flutter/material.dart';
Future<String> fast() async => 'abcde';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: FutureBuilder<String>(
future: fast(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Text(snapshot.data ?? '12345');
}
return const Text('12345');
},
),
),
),
),
);
}
На экране ConnectionState.done выведет 'abcde' из snapshot.
Смотрите также
-
класс
AsyncSnapshot,
у которого есть поле connectionState -
виджет
FutureBuilder,
который меняетConnectionStateпоFuture -
виджет
StreamBuilder,
который использует active и done уStream -
виджет
ValueListenableBuilder,
который не используетConnectionState