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

Flutter中showBottomModalSheet内Alert Dialog无法弹出问题

问题分析与修复

你的代码存在两个关键问题导致AlertDialog无法正常显示:

  1. 仅创建了AlertDialog实例,但未调用Flutter提供的showDialog方法触发对话框展示。
  2. 无论输入验证是否通过,代码末尾都会执行清空输入框和Navigator.of(context).pop(),直接关闭底部表单弹窗,即便对话框能弹出也会被立刻关闭。

修复后的代码

ElevatedButton(
  //button to confirm entry
  onPressed: () async {
    //if else check that none of the entries are empty
    if (_exercisenameController.text.isEmpty ||
        _totalweightController.text.isEmpty ||
        _totalrepsController.text.isEmpty) {
      print('Do you even lift');
      // 使用showDialog方法弹出AlertDialog
      await showDialog(
        context: context,
        builder: (context) => AlertDialog(
          title: const Text('Do you even lift'),
          content: SingleChildScrollView(
            child: ListBody(
              children: const <Widget>[
                Text('All Input fields must be filled.'),
              ],
            ),
          ),
          actions: <Widget>[
            TextButton(
              child: const Text('OK'),
              onPressed: () {
                Navigator.of(context).pop(); // 关闭AlertDialog
              },
            ),
          ],
        ),
      );
      // 验证不通过时直接return,不执行后续清空和关闭操作
      return;
    } else {
      //Save new journal
      if (id == null) {
        //if the item doesnt exist
        await _addItem();
      } else {
        //if it exists update it instead
        await _updateItem(id);
      }

      // Clear the text fields
      _exercisenameController.text = '';
      _totalweightController.text = '';
      _totalrepsController.text = '';

      //closing the popup
      Navigator.of(context).pop();
    }
  },
  //the text of the button change depending on if its new or updating an existing
  child: Text(id == null ? 'Create New' : 'Update'),
)

关键修改说明

  • 添加showDialog方法:Flutter中所有对话框都需要通过showDialog触发展示,仅实例化AlertDialog不会产生界面效果。
  • 验证不通过时return:阻止后续清空输入框和关闭底部弹窗的代码执行,确保点击AlertDialog的OK按钮后,用户能回到底部表单界面继续输入。
  • 调整代码结构:将清空输入框和关闭弹窗的逻辑移至else分支,仅在输入验证通过时执行,符合业务逻辑。

内容的提问来源于stack exchange,提问作者Russel jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:15:04