Ответ
В Flutter snapshot (снимок) — это объект, инкапсулирующий текущее состояние асинхронной операции. Он используется виджетами FutureBuilder и StreamBuilder для безопасного построения UI на основе данных, которые могут быть в процессе загрузки, успешно получены или содержать ошибку.
Структура AsyncSnapshot:
Объект AsyncSnapshot<T> содержит несколько критически важных свойств:
connectionState: Текущая фаза (ConnectionState.waiting,.active,.done).data: Успешно полученные данные типаT(илиnull).error: Объект ошибки, если операция завершилась с исключением.hasData/hasError: Булевы флаги для удобной проверки.
Практический пример с FutureBuilder для загрузки профиля:
FutureBuilder<UserProfile>(
future: _fetchUserProfile(), // Future<UserProfile>
builder: (context, AsyncSnapshot<UserProfile> snapshot) {
// 1. Проверяем состояние соединения и наличие ошибки
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}
if (snapshot.hasError) {
return Center(child: Text('Ошибка: ${snapshot.error}'));
}
// 2. Данные гарантированно есть, можно безопасно обращаться к snapshot.data
final user = snapshot.data!;
return Column(
children: [
Text('Имя: ${user.name}'),
Text('Email: ${user.email}'),
],
);
},
)
Ключевая идея: Snapshot отделяет логику асинхронного получения данных от синхронного процесса построения виджетов, предоставляя согласованный и типобезопасный интерфейс для работы с состоянием «загрузка-данные-ошибка».