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

Flutter&Dart:跳转页面时如何将Stateful Widget的值传递给Controller

解决方案

要把科目ID和章节ID传递给TopicWiseQuestionController,可以通过以下步骤实现:

  1. 修正TopicWiseQuizScreen的参数定义
    先完善页面的构造参数,确保参数能被后续传递给控制器:

    class TopicWiseQuizScreen extends StatelessWidget {
      // 添加final修饰符和明确类型
      final int quizSubjectID;
      final int catID;
    
      const TopicWiseQuizScreen({
        super.key,
        required this.quizSubjectID,
        required this.catID,
      });
    
      @override
      Widget build(BuildContext context) {
        // 初始化控制器时直接传入ID参数
        TopicWiseQuestionController _controller = Get.put(
          TopicWiseQuestionController(
            subID: quizSubjectID,
            catID: catID,
          ),
        );
        return Scaffold();
      }
    }
    
  2. 修改TopicWiseQuestionController接收参数
    给控制器添加构造函数,接收并存储传入的ID值,后续业务逻辑可直接使用:

    class TopicWiseQuestionController extends GetxController
        with SingleGetTickerProviderMixin {
      final int subID;
      final int catID;
    
      // 通过构造函数接收页面传递的ID
      TopicWiseQuestionController({required this.subID, required this.catID});
    
      @override
      void onInit() {
        super.onInit();
        // 这里可以用subID和catID执行初始化操作,比如请求对应章节的题目
        loadQuizQuestions();
      }
    
      void loadQuizQuestions() {
        // 示例:根据subID和catID调用接口获取题目
        // QuizApi.fetchQuestions(subID, catID).then((questions) {
        //   // 处理题目数据
        // });
      }
    }
    

原理说明

原来的代码中,控制器初始化时没有传入任何参数,导致subID和catID始终未被赋值。通过在Get.put()时直接实例化控制器并传入构造参数,就能把页面拿到的科目ID和章节ID传递到控制器中,后续加载题目等业务逻辑就可以直接使用这些ID。

内容的提问来源于stack exchange,提问作者SuRaj Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:40:30