【发布时间】:2020-02-08 03:41:36
【问题描述】:
我试图在初始屏幕之后导航到新屏幕,当我尝试在 init 方法中导航到新屏幕时它显示错误,
E/flutter (5636): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:使用不包含导航器的上下文请求导航器操作。
E/flutter (5636):用于从 Navigator 推送或弹出路由的上下文必须是作为 Navigator 小部件后代的小部件的上下文。
我的代码
import 'package:flutter/material.dart';
import 'package:igloled_app/home.dart';
import 'dart:async';
class SplashScreen extends StatefulWidget {
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 3),(){
print('3 sec done');
Navigator.push(context, MaterialPageRoute(builder: (context){
return AppHeader();
}));
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Stack(
fit: StackFit.expand,
children: <Widget>[
Container(
decoration: BoxDecoration(
color: Colors.white70,
),
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(flex: 2,
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20.0),
child: Container(
margin: EdgeInsets.all(10.0),
child: Image.asset('images/splash_logo.png')
),
)
],
),
),
),
Expanded(flex: 1,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(valueColor: AlwaysStoppedAnimation<Color>(Colors.green),),
Padding(padding: EdgeInsets.only(top: 20.0),
),
Text('Make Your Life Brighter',
style: TextStyle(
color: Colors.lightGreen,
fontStyle: FontStyle.italic,
fontSize: 20.0,
),
),
],
),
)
],
),
],
),
),
);
}
}
}
谁能帮我解决这个问题。 提前谢谢你。
【问题讨论】:
-
请张贴您使用
initState的课程的完整代码 -
@CopsOnRoad 更新了我的问题。
-
我刚刚运行了你的代码,看起来不错,我可以导航到第二个屏幕。
-
你能把
AppHeader班级的代码也贴出来吗? -
@CopsOnRoad 感谢您的代码,我也需要将 MaterialApp 添加到我的第一个屏幕。