Flutter&Dart:跳转页面时如何将Stateful Widget的值传递给Controller
解决方案
要把科目ID和章节ID传递给TopicWiseQuestionController,可以通过以下步骤实现:
修正
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(); } }修改
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
相关产品推荐
相关产品推荐

