gpt4 book ai didi

flutter : Navigator operation requested with a context that does not include a Navigator

转载 作者:IT王子 更新时间:2023-10-29 07:16:26 26 4
gpt4 key购买 nike

我有一个场景,其中我根据将用户重定向到 HomePage 或 LandingPage 的值检查 SharePreferences 的值。我不确定我哪里错了?但我在下面收到此错误:我想它没有正确获取上下文,不知道如何获取它?

Unhandled Exception: Navigator operation requested with a context that does not include a Navigator. E/flutter (11533): The context used to push or pop routes from the Navigator must be that of a widget that is a descendant of a Navigator widget.

这是我的代码:

import 'package:credit/src/pages/landing.dart';
import 'package:flutter/material.dart';
import 'package:credit/src/pages/credit/home.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);

_LoadingPageState createState() => _LoadingPageState();
}

class _LoadingPageState extends State<MyApp> {
@override
void initState() {
super.initState();
getUserStatus().then((userStatus) {
if (userStatus == null) {
Navigator.of(context)
.push(MaterialPageRoute<Null>(builder: (BuildContext context) {
return LandingPage();
}));
} else {
Navigator.of(context)
.push(MaterialPageRoute<Null>(builder: (BuildContext context) {
return HomePage();
}));
}
});
}

@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: CircularProgressIndicator(),
));
}
}

Future<String> getUserStatus() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String userStatus = prefs.getString('userstatus');
print("==On Load Check ==");
print(userStatus);
return userStatus;
}

最佳答案

当您调用 Navigator.of(context) 时,框架会在附加到提供的 context 的小部件树中上升,并尝试找到最近的 Navigator .

您显示的小部件树没有,因此您需要在小部件树中包含Navigator
最简单的选择是将 MaterialApp 与作为 home 传递的小部件一起使用。 MaterialApp 正在其内部创建导航器。 (CupertinoApp 也这样做)

原始示例的更新代码:

import 'package:credit/src/pages/landing.dart';
import 'package:flutter/material.dart';
import 'package:credit/src/pages/credit/home.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
MyApp({Key key}) : super(key: key);

@override
Widget build(BuildContext context) {
return MaterialApp(
home: LoadingPage(),
);
}
}

class LoadingPage extends StatefulWidget {
LoadingPage({Key key}) : super(key: key);

_LoadingPageState createState() => _LoadingPageState();
}

class _LoadingPageState extends State<LoadingPage> { // note type update
@override
void initState() {
super.initState();
getUserStatus().then((userStatus) {
if (userStatus == null) {
Navigator.of(context)
.push(MaterialPageRoute<Null>(builder: (BuildContext context) {
return LandingPage();
}));
} else {
Navigator.of(context)
.push(MaterialPageRoute<Null>(builder: (BuildContext context) {
return HomePage();
}));
}
});
}

@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: CircularProgressIndicator(),
));
}
}

Future<String> getUserStatus() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String userStatus = prefs.getString('userstatus');
print("==On Load Check ==");
print(userStatus);
return userStatus;
}

关于 flutter : Navigator operation requested with a context that does not include a Navigator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57241008/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com