[英]How to redirect a page from a splash screen (Flutter)
我正在开发一个启动画面,它应该显示一个图像作为页面的背景,然后执行一个 rest 调用,其结果是了解要加载哪个其他页面(登录或主页)所必需的,我不明白为什么重定向不起作用
void main() {
runApp(const MainPage());
}
// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
class MainPage extends StatefulWidget {
const MainPage({Key? key}) : super(key: key);
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
@override
void initState() {
super.initState();
}
// ----------------------------------------------------------------------------
// Redirect managed from the server
// ---------------------------------------------------------
Future<void> getRedirectPage(BuildContext context) async {
await initializeSharedPrefs();
ServerResponse serverResponse = await makeRequestToServer(Null);
if (serverResponse.state.compareTo("") != 0) {
if (serverResponse.state.compareTo("true") == 0) {
if (serverResponse.redirect.compareTo("login") == 0) {
Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_,__,___)=> LoginPage()));
} else {
Navigator.of(context).pushReplacement(PageRouteBuilder(pageBuilder: (_,__,___)=> Homepage()));
}
} else {
showAlertDialog(context, "Server error", "Something went wrong: " + serverResponse.msg);
}
} else {
showAlertDialog(context, "Server error", "Something went wrong: " + serverResponse.msg);
}
}
// ----------------------------------------------------------------------------
// Initialization of UI
// ----------------------------------------------------------------------------
@override
Widget build(BuildContext context) {
getRedirectPage(context);
return MaterialApp(
title: 'ID - IoT',
home: Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/background.jpeg'),
fit: BoxFit.cover,
),
),
),
theme: ThemeData(
primarySwatch: Colors.blue,
),
);
}
}
这是从 logcat 显示的错误:
E/flutter (18073): [ERROR:flutter/shell/common/shell.cc(93)] Dart Unhandled Exception: Navigator operation requested with a context that does not include a Navigator.
E/flutter (18073): The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator
您正在将上下文传递给不存储导航器的 function(导航器位于材料应用程序内)。 您可以使用构建器小部件。
return MaterialApp(
home: Builder(
builder: (context) {
getRedirectPage(context);
return Container();
},
),
);
或使用导航键,但在这种情况下不安全
final navKey = GlobalKey<NavigatorState>();
navKey.currentState!.pop();
return MaterialApp(
navigatorKey: navKey,
home: Container(),
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.