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

Flutter代码报错:表达式类型为void,其值无法使用

问题排查与解决

错误根源在这行代码:

messengerKey.currentState!.removeCurrentSnackBar().showSnackBar(snackBar);

原因很明确:removeCurrentSnackBar()方法的返回类型是void,它执行后不会返回任何对象,所以你没法在它后面链式调用showSnackBar()——根本没有可调用的对象。

解决方法

方法1:拆分调用(简单直接)

把移除旧SnackBar和显示新SnackBar的操作分成两行执行:

import 'package:flutter/material.dart';

class Utils{
  static final messengerKey = GlobalKey<ScaffoldMessengerState>();

  static showSnackBar(String? text){
    if (text == null) return;

    final snackBar = SnackBar(content: Text(text), backgroundColor: Colors.red,);

    messengerKey.currentState!.removeCurrentSnackBar();
    messengerKey.currentState!.showSnackBar(snackBar);
  }
}

方法2:利用回调(更优雅,避免时序冲突)

removeCurrentSnackBar提供了callback参数,可以在旧SnackBar完全移除后再显示新的,避免可能的UI冲突:

import 'package:flutter/material.dart';

class Utils{
  static final messengerKey = GlobalKey<ScaffoldMessengerState>();

  static showSnackBar(String? text){
    if (text == null) return;

    final snackBar = SnackBar(content: Text(text), backgroundColor: Colors.red,);

    messengerKey.currentState!.removeCurrentSnackBar(
      callback: () => messengerKey.currentState!.showSnackBar(snackBar)
    );
  }
}

两种方案都能解决你的报错,根据实际需求选择即可。

内容的提问来源于stack exchange,提问作者Star Anurag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 08:50:28