在GetMaterialApp之前启动身份验证控制器并尝试导航到命名路由时出现getx问题



使用getx:尝试执行以下操作

  • Get.put身份验证控制器(侦听身份验证更改(
  • 创建GetMaterialApp
  • 身份验证更改后,导航到命名路由"/login">

下面是一个示例代码:

void main() async {
WidgetsFlutterBinding.ensureInitialized();
// firebase init
await Firebase.initializeApp();
// controllers
Get.put<AuthController>(AuthController());
runApp(
MyApp(),
);
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Get',
initialRoute: "/",
routes: appRoutes,
);
}
}

尝试这样做会导致以下错误:

You are trying to use contextless navigation without a GetMaterialApp or Get.key

这是因为onAuthChanged事件是在创建/启动GetMaterialApp之前调用的,我想。。。

如何在我的主类上创建和启动身份验证控制器?

删除主功能块上的Get.put语句,然后删除

试试这个

@override
Widget build(BuildContext context) {
// Add this line
Get.put<AuthController>(AuthController(), permanent: true,);
return GetMaterialApp(
title: 'Get',
initialRoute: "/",
routes: appRoutes,
);
}

@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Get',
initialRoute: "/",
routes: appRoutes,
// add this argument
onInit: () {
Get.put<AuthController>(AuthController(), permanent: true,);
},
);
}

最新更新