Решайте асинхронные обратные вызовы с FutureBuilder!

Flutter и Dart по своей природе асинхронны. Future Dart обеспечивает очень плавную обработку операций ввода-вывода, не беспокоясь о потоках или взаимоблокировках.

Будущее используется для представления потенциального значения или ошибки, которые будут доступны в какой-то момент в будущем.

Получатели будущего могут регистрировать обратные вызовы, которые обрабатывают значение или ошибку, когда они становятся доступными.

Зачем нужен FutureBuilder!

Предположим, вы хотите вернуть виджет в методе build, но данные, необходимые в виджете, поступают от функции async.

При условии, что выборка может быть HTTP-вызовом, вызовом SQLite или любым другим вызовом в целом, который возвращает Future, этот подход на самом деле не сработает.

Потому что build метод виджета синхронный и не будет ждать, пока вы получите данные.

Именно здесь на сцену выходит FutureBuilder (FutureBuilder<T>).

Исправление

FutureBuilder принимает в качестве аргумента Future, а также конструктор (делегат, вызываемый методом сборки виджета). Строитель будет вызван немедленно, и снова, когда наше будущее разрешится либо данными, либо ошибкой.

Future не должен создаваться во время build при построении FutureBuilder. Если будущее создается одновременно с FutureBuilder, то каждый раз, когда родительский элемент FutureBuilder перестраивается, асинхронная задача будет перезапущена.

AsyncSnapshot<T> - это просто представление этих данных / состояния ошибки.

Вуаля! Проблема решена.

Влияние на производительность

FutureBuilder - это просто StatefulWidget, state которого является _снимком. Начальное состояние _snapshot = AsyncSnapshot<T>.withData(ConnectionState.none, widget.initialData);

Он подписывается на будущее, которое мы отправляем, и обновляет состояние на основе этого.

Таким образом, FutureBuilder - это просто оболочка того, что мы обычно делаем, поэтому это не влияет на производительность.

Заключение

Это все, ребята 👨‍🏫, Спасибо, что дочитали до конца. Надеюсь, это помогло вам получить лучшее представление о FutureBuilder и его реальном приложении. Если я что-то пропустил, дайте мне знать в комментариях, и мы можем провести мозговой штурм! 👨🏻‍💻

Этот пост был первоначально опубликован на dev.to по адресу https://dev.to/sayanide/solve-async-callbacks-with-futurebuilder-4djc

Flutter Kolkata - это группа для людей, которые хотят изучить и изучить Flutter Development. Мы приглашаем как новичков, так и профессионалов в дартс. Присоединяйтесь и получайте удовольствие вместе с нами в Discord

Не забудьте поделиться этими ресурсами с тем, кому, по вашему мнению, также может понадобиться помощь с FutureBuilder. Мир снаружи. ✌🏼

Https://www.twitter.com/FlutterComm