首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >toNamed路由不工作,路由替换自动调用,控制器删除

toNamed路由不工作,路由替换自动调用,控制器删除
EN

Stack Overflow用户
提问于 2021-04-25 06:29:20
回答 1查看 2.2K关注 0票数 3

我只是使用命名路由导航到新页面,一旦toNamed触发新屏幕闪烁,然后关闭控制台显示'onDelete调用‘,用导航路径替换路由。

  1. main.dart

代码语言:javascript
复制
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,
    );
  }
}

  1. Pages

代码语言:javascript
复制
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(),

  1. Binding

代码语言:javascript
复制
class TaskBindings extends Bindings{
  @override
  void dependencies() {
   Get.put<TaskController>(TaskController());
  }
}

  1. 任务控制器

代码语言:javascript
复制
class TaskController extends GetxController{

@override
  void onInit() {
    //todo: fetch Task info.
    super.onInit();
  }

}

  1. 任务页

代码语言:javascript
复制
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"),),
    );
  }
}

  1. 导航函数

代码语言:javascript
复制
void navigate2NewTask() {
    Get.toNamed(AppRoutes.newTask);
  }

  1. 调用上述函数

代码语言:javascript
复制
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(),
)
}
}

新任务页闪烁,然后控制台显示如下:

代码语言:javascript
复制
[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

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2021-12-25 14:40:27

您应该在应用程序的第一个屏幕上调用Get.find,这样GetX就不会删除它:

代码语言:javascript
复制
YourController yourController = Get.find<YourController>(); 

它对我有效,✅

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67250429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档