Flutter 2.2.3语言选择弹窗开发遇showDialog builder缺失、Utils未定义错误
Flutter 2.2.3语言弹窗报错解决方案
问题1:showDialog参数报错(builder为必填项未传入、child参数未定义)
- 原因:Flutter 2.0及以上版本对
showDialogAPI做了破坏性更新,移除了原有child参数,强制要求使用builder参数构造弹窗内容 - 修复代码:
Future <void> _languageCheck() async { SharedPreferences prefs = await SharedPreferences.getInstance(); final firstRun = prefs.getBool("firstRunLanguage"); if (firstRun ?? false) return; await showDialog( barrierDismissible: false, context: context, builder: (context) => AlertDialog(content: LanguageDialog()) ); await prefs.setBool('firstRunLanguage', true); }
问题2:名称Utils未定义
- 原因:
Utils是项目自定义的工具类,不属于Flutter SDK内置类,报错是因为没有导入对应文件或者工具类已被移除 - 修复方案:
- 若项目中仍保留该工具类,直接在当前dart文件头部添加导入语句即可,示例:
import 'package:your_project_name/utils/common.dart';(替换为项目中Utils类的实际路径) - 若工具类已丢失,直接手动定义语言列表替换原有调用逻辑即可,示例:
// 替换原代码中 List<Map<String, dynamic>> languages = Utils.getLanguagesList(context); 行 List<Map<String, dynamic>> languages = [ {"code": "zh", "name": "简体中文", "icon": "assets/icons/zh_cn.png"}, {"code": "en", "name": "English", "icon": "assets/icons/en_us.png"}, // 按需添加其他语言配置 ]; - 若项目中仍保留该工具类,直接在当前dart文件头部添加导入语句即可,示例:
额外兼容提示
Flutter 2.2.3版本中FlatButton已被官方弃用,会触发编译警告,建议替换为TextButton,修改代码如下:
// 替换原FlatButton部分 TextButton( onPressed: () { Navigator.pop(context); }, child: const Text("OK") )
内容的提问来源于stack exchange,提问作者Rushika Pawar
相关产品推荐
相关产品推荐

