在Flutter中,如何显示来自平台调用处理程序的SnackBar?

在Flutter中,如何显示来自平台调用处理程序的SnackBar?,flutter,Flutter,flift中的snackbar通常看起来非常简单,但是当试图从频道的methodCallHandler中显示它们时,它们不会显示出来。有人知道为什么吗 下面是我的代码的精简版本(仅相关部分): class\u LoginState扩展状态{ 最终GlobalKey _scaffoldKey=GlobalKey(); @凌驾 void initState(){ super.initState(); _channel.setMethodCallHandler(_handlePlatformMessa

flift中的snackbar通常看起来非常简单,但是当试图从
频道
methodCallHandler
中显示它们时,它们不会显示出来。有人知道为什么吗

下面是我的代码的精简版本(仅相关部分):

class\u LoginState扩展状态{
最终GlobalKey _scaffoldKey=GlobalKey();
@凌驾
void initState(){
super.initState();
_channel.setMethodCallHandler(_handlePlatformMessages);
}
void\u onExampleButtonPressed(BuildContext上下文){
//如果我用它作为一个工具,它会正确地显示我的SnackBar
//从按钮按下处理程序
_showGeneralError();
}
Future\u handlePlatformMessages(MethodCall调用)异步{
//…(为清楚起见省略)。。。
如果(!成功){
_showGeneralError();//不显示快捷键:(
}
}
void _showGeneralError(){
var snackBar=新snackBar(
内容:新文本(Strings.of(context).generalError()),
背景颜色:调色板。黄色
);
_scaffoldKey.currentState.showSnackBar(snackBar);
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
钥匙:_scaffoldKey,
正文:/*一些小部件*/;
);
}
}

编辑:根据Remi的评论,使用GlobalKey。但这并没有解决问题。

解决方案是延迟从平台代码发送消息。消息一定是发送得太快或其他原因(即使代码是在颤振端处理的)。我通过将消息发布到Android上的主线程处理程序,将消息延迟了一帧。

我不知道实际的问题是什么。但不要这样使用
\u scaffoldContext
。这是反模式的,可能会导致潜在的问题。如果需要,请将有状态的小部件包装在
Scaffold
中。或者使用
GlobalKey
。啊,很酷,感谢tipIt不清楚使用
GlobalKey
是否真的解决了你的问题。你能澄清一下吗,如果它真的解决了,你可以自己添加一个答案(如果Remi不想)解释你做了什么,这样就不会再打开了?哦,对不起,它没有解决问题。我会在编辑评论中澄清