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
相关产品推荐
相关产品推荐

