You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GetX导航从页面跳转到自身并生成不同控制器

解决Getx命名路由重复打开页面创建新控制器的问题

步骤1:导航时生成唯一Tag并传递参数

每次打开页面时生成唯一标识作为控制器的tag,将tag和业务参数一起通过arguments传递:

import 'package:uuid/uuid.dart';

Future<void> openMemberDetails(MemberData data) async {
  // 生成全局唯一的tag
  String uniqueTag = const Uuid().v4();
  await Get.toNamed(
    Routes.MEMBER_DETAILS,
    arguments: {
      'memberData': data,
      'controllerTag': uniqueTag,
    },
    preventDuplicates: false,
  );
}

步骤2:修改视图,通过Tag绑定控制器

将原GetView改为StatelessWidget,手动通过tag获取/创建对应控制器,确保每个页面绑定独立实例:

class MemberDetailsView extends StatelessWidget {
  const MemberDetailsView({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final args = Get.arguments as Map<String, dynamic>;
    final String controllerTag = args['controllerTag'];
    // 通过tag创建并绑定专属控制器
    final controller = Get.put(MemberDetailsController(tag: controllerTag), tag: controllerTag);
    controller.context = context;

    return Scaffold(
      // 页面布局内容
    );
  }

  @override
  void dispose() {
    // 页面销毁时删除对应tag的控制器,避免内存泄漏
    final args = Get.arguments as Map<String, dynamic>;
    Get.delete<MemberDetailsController>(tag: args['controllerTag']);
    super.dispose();
  }
}

步骤3:调整控制器,适配Tag与参数获取

修改控制器构造函数接收tag,在初始化阶段从arguments中取出对应参数:

class MemberDetailsController extends GetxController with GetTickerProviderStateMixin {
  final String tag;
  late MemberData memberData;
  final apiHelper = Get.find<ApiHelper>();
  late BuildContext context;

  // 构造函数接收tag
  MemberDetailsController({required this.tag});

  @override
  void onInit() {
    super.onInit();
    // 从arguments中获取当前页面专属的业务数据
    final args = Get.arguments as Map<String, dynamic>;
    memberData = args['memberData'] as MemberData;
  }

  // 内部打开页面的方法同样遵循tag规则
  Future<void> openMemberDetails(MemberData data) async {
    String uniqueTag = const Uuid().v4();
    await Get.toNamed(
      Routes.MEMBER_DETAILS,
      arguments: {
        'memberData': data,
        'controllerTag': uniqueTag,
      },
      preventDuplicates: false,
    );
  }
}

内容的提问来源于stack exchange,提问作者Fiveone Digital

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:02:31