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

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内置类,报错是因为没有导入对应文件或者工具类已被移除
  • 修复方案:
    1. 若项目中仍保留该工具类,直接在当前dart文件头部添加导入语句即可,示例:import 'package:your_project_name/utils/common.dart';(替换为项目中Utils类的实际路径)
    2. 若工具类已丢失,直接手动定义语言列表替换原有调用逻辑即可,示例:
    // 替换原代码中 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"},
      // 按需添加其他语言配置
    ];
    

额外兼容提示

Flutter 2.2.3版本中FlatButton已被官方弃用,会触发编译警告,建议替换为TextButton,修改代码如下:

// 替换原FlatButton部分
TextButton(
  onPressed: () {
    Navigator.pop(context);
  },
  child: const Text("OK")
)

内容的提问来源于stack exchange,提问作者Rushika Pawar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:48:03