Junior
Какво е FutureBuilder във Flutter?
sobes.tech AI
Отговор от AI
Уиджет за създаване на интерфейс въз основа на асинхронни данни, получени от Future.
Основни параметри:
future: Екземпляр наFuture, който трябва да се наблюдава.initialData: Данни, които се показват преди завършването наfuture.builder: Функция (AsyncWidgetBuilder), която се извиква при всяка промяна на състоянието наfutureи получаваBuildContextиAsyncSnapshot.
Състояния на AsyncSnapshot:
ConnectionState.none: Future все още не е започнал.ConnectionState.waiting: Future се изпълнява.ConnectionState.active: (Редко за Future) Future е върнал междинни данни.ConnectionState.done: Future е завършил (успешно или с грешка).
Пример за използване:
// Предполагаме, че имаме функция, която връща Future<String>
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // Имитация на мрежов заявка
return "Данните са заредени!";
}
// ... в build метода на widget:
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: fetchData(), // Нашият Future
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Показваме индикатор за зареждане, докато Future се изпълнява
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Показваме съобщение за грешка, ако Future завърши с грешка
return Text('Грешка: ${snapshot.error}');
} else {
// Показваме данните, ако Future е успешно завършил
return Text('Резултат: ${snapshot.data}');
}
},
);
}
Предимства:
- Улеснява работата с асинхронни операции в UI.
- Автоматично прерисува UI при промяна на състоянието на
Future. - Ясно разделя логиката за зареждане на данни и логиката за създаване на UI.
Недостатъци:
- Може да доведе до ненужни повторни прерисувания, ако
Futureсе създава вътре в методаbuild. Препоръчително е да се създаваFutureведнъж (например, вinitState).