gpt4 book ai didi

flutter - 启动 flutter 应用程序时,我在哪里运行初始化代码?

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

启动 Flutter 应用程序时,我在哪里运行初始化代码?

void main() {

return runApp(MaterialApp(
title: "My Flutter App",

theme: new ThemeData(
primaryColor: globals.AFI_COLOUR_PINK,
backgroundColor: Colors.white),

home: RouteSplash(),

));
}

如果我想运行一些初始化代码,比如说获取共享首选项,或者(在我的例子中)初始化一个包(我需要传入 MaterialApp 小部件的 BuildContext),正确的方法是什么这个?

我应该将 MaterialApp 包装在 FutureBuilder 中吗?还是有更“正确”的方法?

-------- 编辑------------------------------------ --------------

我现在已将初始化代码放入 RouteSplash() 小部件中。但是由于我需要应用程序根目录的 BuildContext 进行初始化,所以我在 Widget build 覆盖中调用了初始化并传入了 context.ancestorInheritedElementForWidgetOfExactType(MaterialApp)。因为我不需要在显示初始屏幕之前等待初始化完成,所以我没有使用 Future

最佳答案

一个简单的方法是调用 RouteSplash 作为启动画面,并在其中执行初始化代码,如图所示。

class RouteSplash extends StatefulWidget {
@override
_RouteSplashState createState() => _RouteSplashState();
}

class _RouteSplashState extends State<RouteSplash> {
bool shouldProceed = false;

_fetchPrefs() async {
await Future.delayed(Duration(seconds: 1));// dummy code showing the wait period while getting the preferences
setState(() {
shouldProceed = true;//got the prefs; set to some value if needed
});
}

@override
void initState() {
super.initState();
_fetchPrefs();//running initialisation code; getting prefs etc.
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: shouldProceed
? RaisedButton(
onPressed: () {
//move to next screen and pass the prefs if you want
},
child: Text("Continue"),
)
: CircularProgressIndicator(),//show splash screen here instead of progress indicator
),
);
}
}

main()

内部
void main() {
runApp(MaterialApp(
home: RouteSplash(),
));
}

注意:这只是一种实现方式。如果需要,您可以使用 FutureBuilder

关于flutter - 启动 flutter 应用程序时,我在哪里运行初始化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56024863/

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