我是Flutter的新手,我想在我的应用程序中显示启动画面。我使用了initState()和导航器。但这没有用。该应用程序会打开显示初始屏幕,但之后不会导航到下一个屏幕。
我的main.dart
import 'package:flutter/material.dart'; import 'package:bmi/HomePage.dart'; import 'dart:async'; main(){ runApp(MyApp()); } class MyApp extends StatelessWidget{ @override Widget build(BuildContext context) { return SplashScreen(); } } class SplashScreen extends StatefulWidget{ @override State<StatefulWidget> createState() { return SplashScreenState(); } } class SplashScreenState extends State<SplashScreen>{ @override void initState() { super.initState(); Future.delayed( Duration( seconds: 4 ), (){ Navigator.push( context, MaterialPageRoute( builder: (context) => HomePage(), ) ); } ); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( backgroundColor: Colors.red, body: Text( 'Welcome to BMI Calculator', style: new TextStyle( fontSize: 15.0, color: Colors.white, fontWeight: FontWeight.bold ), ), ), ); } }
还有我的HomePage.dart
import 'package:flutter/material.dart'; class HomePage extends StatelessWidget{ @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( backgroundColor: Colors.red, title: Text( 'BMI Calculator', style: new TextStyle( color: Colors.white ), ), ), ), ); } }
我该如何解决?
由于我是新手,所以我不知道这是否是实现splashScreen的正确方法,如果还有其他更简单的方法,请您也建议一下。
先感谢您。
已更正代码:
MaterialApp应该是所有小部件的父级(根)。
import 'package:flutter/material.dart'; import 'package:bmi/HomePage.dart'; import 'dart:async'; main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp(home: SplashScreen()); // define it once at root level. } } class SplashScreen extends StatefulWidget { @override State<StatefulWidget> createState() { return SplashScreenState(); } } class SplashScreenState extends State<SplashScreen> { @override void initState() { super.initState(); Future.delayed(Duration(seconds: 4), () { Navigator.push( context, MaterialPageRoute( builder: (context) => HomePage(), )); }); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.red, body: Text( 'Welcome to BMI Calculator', style: new TextStyle( fontSize: 15.0, color: Colors.white, fontWeight: FontWeight.bold), ), ); } } class HomePage extends StatelessWidget{ @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.red, title: Text( 'BMI Calculator', style: new TextStyle( color: Colors.white ), ), ), ); } }