Я запускаю этот код
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
постоянно, и я хочу избежать, потому что я думаю, что это неэффективно.
класс _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'),),),),);}}
open определяется в другом файле.
Вы добавляете 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"});
}
Можете ли вы включить полный виджет?