Решайте асинхронные обратные вызовы с 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. Мир снаружи. ✌🏼