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

FutureBuilder для Future в Flutter

Когда результат асинхронной операции нужен прямо в дереве виджетов, используют FutureBuilder. Ему передают future и builder, который строит UI по снимку AsyncSnapshot.

Пока snapshot.connectionState равен ConnectionState.waiting, показывают индикатор. Когда snapshot.hasData, выводят snapshot.data. Так не нужно вручную вызывать setState после каждого Future. Сам Future создаётся один раз в initState, не как future: load() в build:

import 'package:flutter/material.dart'; void main() { runApp(const MaterialApp(home: FutureBuilderDemoPage())); } class FutureBuilderDemoPage extends StatefulWidget { const FutureBuilderDemoPage({super.key}); @override State<FutureBuilderDemoPage> createState() => _FutureBuilderDemoPageState(); } class _FutureBuilderDemoPageState extends State<FutureBuilderDemoPage> { late final Future<String> greeting; @override void initState() { super.initState(); greeting = Future<String>.delayed( const Duration(seconds: 1), () => 'Hello from Future', ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('FutureBuilder')), body: Center( child: FutureBuilder<String>( future: greeting, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const CircularProgressIndicator(); } if (snapshot.hasData) { return Text( snapshot.data!, style: const TextStyle(fontSize: 22), ); } return const Text('No data'); }, ), ), ); } }

Покажите число '42' через FutureBuilder. Задержку в 2 секунды создайте один раз в initState, не внутри build. Пока ответ не пришёл, в Column выведите текст 'Counting...' и индикатор.

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