flutter - 如何在没有上下文的情况下导航?
问题描述
我最终使用了一个静态函数,但我需要进行导航,它给了我一个错误,即没有为上下文找到 getter,所以我寻找解决方案并找到了 GET 包,但是当我尝试使用它时,它给了我另一个错误:
E/flutter ( 6078): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)]
Unhandled Exception: NoSuchMethodError: The method 'push' was called on null.
我的代码:
void main() {
runApp(MyApp());
_MyAppState.autologin();
}
class _MyAppState extends State<MyApp> {
static autologin() async {
var userType;
var store = Firestore.instance;
var auth = FirebaseAuth.instance;
final FirebaseUser user = await auth.currentUser();
store.collection('Users').document(user.uid).get().then((value) {
userType = (value.data)['userType'];
if (userType == 'Student') {
Get.to(StudentsPage());
} else if (userType == 'Teacher') {
} else if (userType == 'Admin') {}
});
}
解决方案
创建导航键
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
将其分配给 MaterialApp
MaterialApp(
home: Home(),
navigatorKey: navigatorKey
),
然后通过下面的 navigatorKey 推送您的路线
navigatorKey.currentState.push(MaterialPageRoute(
builder: (context) => AnotherPage(),
));
或者
navigatorKey.currentState.pushNamed(routeName);
推荐阅读
- java - ND4J 执行时间
- mysql - SQL查询获取最近5天或10天的最大值记录
- maven - Intellij 工件工具无法创建正确的可执行火花 jar
- python - 如何将覆盖结果与毒性结合起来?
- javascript - 如何从 HTML 调用 php 函数
- javascript - 会话之间是否可以在浏览器中存储超过 100 MB 的空间?
- node.js - 使用邮件监听器下载附件
- azure - Azure ARM - 将作为参数传递的标签与文字标签结合起来
- java - String java中分割字符链的重复
- wpf - 为什么我的 WPF KeyDown 处理程序没有捕获 CTRL+A?