如何在 flutter 主页中导航屏幕?
how navigate screen in main page on 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 {
...
}
}
用 MaterialApp
包裹 MyApp
,这将为 Navigator
提供 context
的权利
void main() {
runApp(MaterialApp(home: MyApp()));
}
您需要 context
才能使用 Navigator
导航。
要在不使用 context
的情况下导航,您可以使用名为 GetX
的包
示例:
在你的MaterialApp前加上“Get”,变成GetMaterialApp
GetMaterialApp( // Before: MaterialApp(
home: MyHome(),
)
导航到新屏幕:
Get.to(NextScreen());
我想在主页上等待 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 {
...
}
}
用 MaterialApp
包裹 MyApp
,这将为 Navigator
context
的权利
void main() {
runApp(MaterialApp(home: MyApp()));
}
您需要 context
才能使用 Navigator
导航。
要在不使用 context
的情况下导航,您可以使用名为 GetX
示例:
在你的MaterialApp前加上“Get”,变成GetMaterialApp
GetMaterialApp( // Before: MaterialApp( home: MyHome(), )
导航到新屏幕:
Get.to(NextScreen());