如何解决如何在flutter的主页上导航屏幕?
我想在主页上等待 5 秒钟并显示加载动画,然后导航到另一个页面。 这是我的代码
import 'mainPage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool isLoading = true;
@override
void initState() {
super.initState();
loadData();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,home: Scaffold(
backgroundColor: Colors.cyan,body: Builder(
builder: (context) => Center(
child: Container(
child: SpinKitCubeGrid(color: Colors.white,size: 50.0),),);
}
Future loadData() async {
return new Timer(Duration(seconds: 5),() {
setState(() {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) => MainPage()));
});
});
}
}
但我收到此错误:
未处理的异常:使用不包含导航器的上下文请求导航器操作。
我该怎么办?
解决方法
也许这对你有帮助
static Route route() {
return MaterialPageRoute<void>(builder: (_) => MyApp());
}
onPressed: () => Navigator.of(context).push<void>(MainPage.route()),................
static Route route() {
return MaterialPageRoute<void>(builder: (_) => MainPage());
}
onPressed: () => Navigator.of(context).push<void>(MyApp.route()),
,
你可以这样试试吗?我没有运行代码,而是展示了基本思想。只需传递上下文并从构建函数中调用它即可。
class _MyAppState extends State<MyApp> {
bool isLoading = true;
@override
Widget build(BuildContext context) {
loadData(context);
return MaterialApp(
...
);
}
Future loadData(context) async {
...
}
}
,
用 MyApp
包裹 MaterialApp
,这将为 context
提供正确的 Navigator
void main() {
runApp(MaterialApp(home: MyApp()));
}
,
您需要一个 context
才能使用 Navigator
进行导航。
要在不使用 context
的情况下进行导航,您可以使用名为 GetX 的包
示例:
-
在你的 MaterialApp 前添加“Get”,把它变成 GetMaterialApp
GetMaterialApp( // Before: MaterialApp( home: MyHome(),)
-
导航到新屏幕:
Get.to(NextScreen());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。