Flutter如何通过传入变量名返回指定变量?
不用if/switch,通过传入名称获取对应关卡列表的实现方案
完全可以做到,核心思路是用Map映射来存储各个关卡的列表,通过键(关卡名称/标识)直接取值,彻底避开条件判断。
具体实现代码(Dart)
// 存储所有关卡问题列表的映射表,键为关卡标识,值为对应列表 final Map<String, List<Map<String, Object>>> levelQuestionMap = { 'level1': const [ { 'question': '德国啤酒节(Oktoberfest)主要在哪个月份举办?', 'answers': [ {'answerText': '一月', 'score': false}, {'answerText': '十月', 'score': false}, {'answerText': '九月', 'score': true}, ], }, { 'question': '谁为《刺猬索尼克3》创作了音乐?', 'answers': [ {'answerText': '布兰妮·斯皮尔斯', 'score': false}, {'answerText': '提姆巴兰', 'score': false}, {'answerText': '迈克尔·杰克逊', 'score': true}, ], }, { 'question': '在美国佐治亚州,用叉子吃什么是违法的?', 'answers': [ {'answerText': '汉堡', 'score': false}, {'answerText': '炸鸡', 'score': true}, {'answerText': '披萨', 'score': false}, ], }, ], // 新增关卡只需在这里添加键值对 'level2': const [ // 关卡2的问题列表 ], }; // 获取指定关卡的问题列表 List<Map<String, Object>> getLevelQuestions(String levelKey) { // 若传入的关卡不存在,返回空列表避免报错,也可根据需求抛出提示 return levelQuestionMap[levelKey] ?? []; }
使用方式
点击关卡1时,直接调用getLevelQuestions('level1')就能拿到对应的问题列表。后续新增关卡,只需要在levelQuestionMap里添加新的键值对即可,不需要修改函数逻辑。
原代码的问题说明
你原来的代码里,_1未声明类型且未正确关联到传入的参数s,直接返回s根本无法实现“根据名称取列表”的逻辑。用Map映射的方式可以完美解决这个问题,同时让代码扩展性更强。
内容的提问来源于stack exchange,提问作者Terminator
相关产品推荐
相关产品推荐

