我正在开发一个应用程序,当用户进入第一个屏幕时是一个加载屏幕,在该屏幕上可以从提供者进行初始化,用户无法在此屏幕中输入任何内容,加载完成后,我想在没有用户的情况下推送新屏幕点击”。
在此代码中,我实际上为_login.getStoredEmail()运行并设置了3秒的延迟,并在LoginController内设置了一个变量,该变量在下一个屏幕中消耗,但是每次都无法正常工作,最终会中断。
class GeneralSplashScreen extends StatefulWidget {
@override
_GeneralSplashScreenState createState() => _GeneralSplashScreenState();
}
class _GeneralSplashScreenState extends State<GeneralSplashScreen> {
@override
void initState() {
Future.delayed(
Duration(
seconds: 3,
),
() {
Navigator.pushReplacementNamed(context, kRoutes.login);
},
);
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
final LoginController _login = Provider.of<LoginController>(context);
_login.getStoredEmail();
return Scaffold(
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 60),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Image.asset(
'lib/assets/images/logo.png',
fit: BoxFit.contain,
),
Text(
"Business Mananger",
textAlign: TextAlign.end,
style: TextStyle(
fontFamily: kFontFamily.montserrat,
fontSize: 10,
),
),
LoadingBar(),
],
),
),
);
}
}
答案 0 :(得分:0)
导航到initState()方法内的其他屏幕。
initState() {
initializeAndNavigate()
}
initializeAndNavigate() async {
await initializeSomething();
Navigator.of(context) ...
}
答案 1 :(得分:0)
声明initState
Future _future;
@override
void initState() {
// TODO: implement initState
super.initState();
_future = doStuff();
}
使用FutureBuilder
FutureBuilder(
future: _future,
builder: (_, dataSnapshot) {
if (dataSnapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator()); // here add loading screen
} else {
return Dashboard();
}
},
)