Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
794 of 1024 menu
◀ ▶

Виджет FutureBuilder

Виджет FutureBuilder подписывается на future и вызывает builder с AsyncSnapshot. Пока Future не завершён, snapshot несёт ConnectionState.waiting. initialData задаёт данные до первого кадра.

Синтаксис

FutureBuilder<T>( future: future, initialData: initialData, builder: (context, snapshot) { return Text('abcde'); }, )

Параметры

Параметр Описание
future Асинхронная задача, результат которой ждут.
builder Строит виджет по AsyncSnapshot.
initialData Необязательное значение до завершения future.

Пример

Давайте дождёмся строки из Future:

import 'package:flutter/material.dart'; Future<String> loadLabel() async { await Future<void>.delayed(const Duration(milliseconds: 50)); return 'abcde'; } void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: FutureBuilder<String>( future: loadLabel(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Text('12345'); } return Text(snapshot.data ?? 'empty'); }, ), ), ), ), ); }

На экране сначала мелькнет '12345', затем FutureBuilder покажет 'abcde'.

Пример

Давайте зададим initialData у FutureBuilder:

import 'package:flutter/material.dart'; Future<String> slowLabel() async { await Future<void>.delayed(const Duration(seconds: 1)); return '12345'; } void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: FutureBuilder<String>( future: slowLabel(), initialData: 'abcde', builder: (context, snapshot) { return Text(snapshot.data ?? 'empty'); }, ), ), ), ), ); }

На экране FutureBuilder сразу покажет 'abcde' из initialData.

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить