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

Flutter中SnackBar内容函数返回字符串类型不匹配报错求助

问题解决:Flutter中SnackBar文本的函数返回值错误

你的报错原因很明确:Text组件需要接收String类型的参数,但你现在传进去的是一个未执行的匿名函数(val){...},所以类型不匹配。

要在不单独提取函数的前提下解决,只需要把这个匿名函数立即执行,也就是给它加上调用括号并传入当前的val参数。修改后的代码如下:

loginButton(context) => Material(
  child: MaterialButton(
    onPressed: () {
      if (_formKey.currentState!.validate()) {
        const User().login(username: email, password: password).then((val) {
          if(val == "Success") {
            successRoute(context);
          }
          ScaffoldMessenger
              .of(context)
              .showSnackBar(SnackBar(content: Text(((val){
                switch (val){
                  case "dataIncorrectly":
                    return AppLocalizations.of(context)!.dataIncorrectly;
                  case "unexpectedResponse":
                    return AppLocalizations.of(context)!.unexpectedResponse;
                  case "connectionTimeOut":
                    return AppLocalizations.of(context)!.connectionTimeOut;
                  case "errorConnection":
                    return AppLocalizations.of(context)!.errorConnection;
                  default:
                    return "unexpectedError";
                }
              })(val)))); // 给匿名函数加上(val)调用,立即返回String
        });
      }
    },
    child: Text(AppLocalizations.of(context)!.signin)
  ),
);

为什么你之前的尝试没用?

  • (){} as String:这是把函数对象强行转换为String类型,本质还是函数,不是函数执行后的返回值,类型依然不匹配。
  • (){}.toString():只是把函数对象本身转成字符串(比如输出Closure: (dynamic) => dynamic),不是执行函数得到的翻译文本,自然不符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:10:37