我只是使用命名路由导航到新页面,一旦toNamed触发新屏幕闪烁,然后关闭控制台显示'onDelete调用‘,用导航路径替换路由。
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return GetMaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.green,
),
initialRoute: AppRoutes.splash,
getPages: Pages.getPages,
);
}
}abstract class Pages {
static List<GetPage> getPages = [
GetPage(name: AppRoutes.splash, page: () => SplashPage(), binding: SplashBinding()),
GetPage(name: AppRoutes.login, page: () => LoginPage(), binding: LoginBinding()),
GetPage(name: AppRoutes.home, page: () => HomePage(), binding: HomeBinding(), transition: Transition.fadeIn),
//issue in last one.
GetPage(name: AppRoutes.newTask, page: () => NewTaskPage(), binding: TaskBindings(), transition: Transition.fadeIn),
];
}注意:导航到NewTaskPage(),
class TaskBindings extends Bindings{
@override
void dependencies() {
Get.put<TaskController>(TaskController());
}
}class TaskController extends GetxController{
@override
void onInit() {
//todo: fetch Task info.
super.onInit();
}
}class NewTaskPage extends GetView<TaskController> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.red,
appBar: AppBar(
title: Text("NEW TASK"),
),
body: Center(child: Text("No Working"),),
);
}
}void navigate2NewTask() {
Get.toNamed(AppRoutes.newTask);
}class HomePage extends GetView<HomeController> {
final GlobalKey<ScaffoldState> _homeScfKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
//SEE HERE
onPressed: () => controller.navigate2NewTask(),
child: Icon(Icons.add),
),
key: _homeScfKey,
drawer: HomeDrawer(),
)
}
}新任务页闪烁,然后控制台显示如下:
[GETX] GOING TO ROUTE /new-task
[GETX] Instance "TaskController" has been created
[GETX] Instance "TaskController" has been initialized
flutter: Splash navigation
[GETX] REPLACE ROUTE /new-task
[GETX] NEW ROUTE /app-home
flutter: Splash navigation
[GETX] "TaskController" onDelete() called
[GETX] "TaskController" deleted from memory请帮帮忙。
发布于 2021-12-25 14:40:27
您应该在应用程序的第一个屏幕上调用Get.find,这样GetX就不会删除它:
YourController yourController = Get.find<YourController>(); 它对我有效,✅
https://stackoverflow.com/questions/67250429
复制相似问题