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

Flutter问题:ElevatedButton onPress触发后Overlay未渲染显示

Flutter Overlay Not Showing on ElevatedButton Press

我仔细看了你的代码,核心问题出在异步操作的处理顺序上——你的Overlay刚启动就被立刻关闭了,所以完全看不到它的渲染效果。

问题分析

你的_submit是异步函数,但调用DatabaseService.createPayout时没有添加await关键字,再加上setState是同步执行的,代码会直接跳到OverlayLoadingProgress.stop(context)这一行。相当于Overlay刚被插入到页面中,下一秒就被移除了,自然没法显示出来。

修复方案

给DatabaseService.createPayout加上await,确保等待异步操作完成后再关闭Overlay,同时调整代码逻辑让状态更新更合理:

void _submit() async {
    HapticFeedback.mediumImpact();
    // 先启动加载Overlay
    OverlayLoadingProgress.start(context, barrierDismissible: false);
    if (!_isLoading) {
      setState(() {
        _isLoading = true;
      });

      // 等待异步创建支付的操作完成
      await DatabaseService.createPayout(context, widget.user!, widget.task!);

      setState(() {
        _isLoading = false;
      });
    }
    // 所有操作完成后再关闭Overlay
    OverlayLoadingProgress.stop(context);
  }

额外检查点

如果修复后还是看不到Overlay,可以再排查这两个地方:

  • 确认Overlay.of(context)能获取到正确的OverlayState,可以在OverlayLoadingProgress.start里加个判断:
    final overlayState = Overlay.of(context);
    if (overlayState == null) {
      debugPrint("无法获取有效OverlayState");
      return;
    }
    overlayState.insert(_overlay!);
    
  • 临时修改_LoadingWidget的barrierColor为Colors.red这类高对比度颜色,排查是否是颜色太接近背景导致看起来没显示。

内容的提问来源于stack exchange,提问作者Boss Nass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:45:49