gpt4 book ai didi

Flutter 延迟函数调用两次

转载 作者:IT王子 更新时间:2023-10-29 06:36:51 25 4
gpt4 key购买 nike

我有一个启动器屏幕,我可以在其中检查我是否有特定数据。根据结果​​我显示不同的屏幕

 void main() => runApp(MyApp());


class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: LauncherScreen()
);
}
}


class LauncherScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("build, build");
Future.delayed(new Duration(milliseconds: 2000), () {
LocalData localData = LocalData();
localData.getCity().then((city) {
if (city != null) {
Const.city = city;
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Home()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SelectCities()),
);
}
});
});
return Container(
width: double.infinity,
height: double.infinity,
color: Color(GoEngColors.violet));
}
}

我的 LauncherScreen 调用了两次,结果我看到我的 HomeSelect city 屏幕出现了两次。

出现这种行为的原因是什么,如何解决?谢谢。

最佳答案

build 方法可以被多次调用,所以它不是调用初始化过程的正确位置。您应该将小部件转换为 StatefulWidget(在 Android Studio 中为 Alt + Enter)并从 initState() 调用您的 Future.delayed。像这样:

class LauncherScreen extends StatefulWidget {
@override
_LauncherScreenState createState() => _LauncherScreenState();
}

class _LauncherScreenState extends State<LauncherScreen> {

@override
void initState() {
super.initState();
print("build, build");
Future.delayed(new Duration(milliseconds: 2000), () {
LocalData localData = LocalData();
localData.getCity().then((city) {
if (city != null) {
Const.city = city;
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Home()),
);
} else {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SelectCities()),
);
}
});
});
}

@override
Widget build(BuildContext context) {
return Container(width: double.infinity, height: double.infinity, color: Color(GoEngColors.violet));
}
}

关于Flutter 延迟函数调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com