Flutter Future.delayed в бесконечном цикле

Я запускаю этот код

Future.delayed(Duration(milliseconds: 500)).then((value) => {opened = false,setState(() {}), value = "null"});
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    getStorage();
    Future.delayed(Duration(milliseconds: 500))
        .then((value) => {opened = false, setState(() {}), value = "null"});
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Container(
          color: Colors.green,
          alignment: Alignment.center,
          child: AnimatedContainer(
            duration: Duration(milliseconds: 3000),
            height: opened ? 0 : 300,
            width: opened ? 0 : 300,
            curve: Curves.fastOutSlowIn,
            alignment: Alignment.center,
            child: Lottie.asset('assets/101349-swing.json'),
          ),
        ),
      ),
    );
  }
}

и он возвращается

I/flutter (22251): false

постоянно, и я хочу избежать, потому что я думаю, что это неэффективно.

Можете ли вы включить полный виджет?

Yeasin Sheikh 09.04.2022 13:46

класс _MyAppState расширяет State<MyApp> {@override Widget build (контекст BuildContext) { getStorage(); Future.delayed(Duration(миллисекунды: 500)).then((value) => {opened = false,setState(() {}), value = "null"}); return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold(тело: Container(цвет: Colors.green, выравнивание: Alignment.center, дочерний элемент: AnimatedContainer( продолжительность: Duration (миллисекунды: 3000), высота: открыт? 0: 300, ширина: открыт ? 0: 300, кривая: Curves.fastOutSlowIn, выравнивание: Alignment.center, дочерний элемент: Lottie.asset('assets/101349-swing.json'),),),),);}}

Joe Sutter 09.04.2022 14:07

open определяется в другом файле.

Joe Sutter 09.04.2022 14:09
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
3
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавляете Future.delay внутри метода build, и это StatefullWidget, метод сборки может вызывать несколько раз, например, всякий раз, когда вы вызываете метод сборки setState(), срабатывает и вызывается Future.delay, который обеспечивает бесконечный цикл в вашем случае.

Чтобы вызвать один раз, переопределите initState, вы можете сделать что-то вроде этого,

  @override
  void initState() {
    super.initState();
    _initFuture();
  }

  _initFuture() async {
    Future.delayed(Duration(milliseconds: 500))
        .then((value) => {opened = false, setState(() {}), value = "null"});
  }

Другие вопросы по теме