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

