[英]In Flutter, how do I show a SnackBar from a platform call handler?
Flutter中的SnackBars通常看起来很简单,但是当尝试从Channel
的methodCallHandler
显示时,它们不会显示。 有人知道为什么吗?
这是我的代码的精简版(只是相关部分):
class _LoginState extends State<Login> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override
void initState() {
super.initState();
_channel.setMethodCallHandler(_handlePlatformMessages);
}
void _onExampleButtonPressed(BuildContext context) {
// This correctly shows my SnackBar if I use this as an
// onPressed handler from a button
_showGeneralError();
}
Future<Null> _handlePlatformMessages(MethodCall call) async {
// ... (omitted for clarity) ...
if (!successful) {
_showGeneralError(); // Does not show a SnackBar :(
}
}
void _showGeneralError() {
var snackBar = new SnackBar(
content: new Text(Strings.of(context).generalError()),
backgroundColor: Palette.yellow
);
_scaffoldKey.currentState.showSnackBar(snackBar);
}
@override
Widget build(BuildContext context) {
return new Scaffold(
key: _scaffoldKey,
body: /* some widgets */;
);
}
}
编辑:根据Remi的评论使用GlobalKey。 但是,这并不能解决问题。
解决方案是将平台代码的消息发送延迟一点。 它一定是发送得太早了或什么(即使代码是在颤抖的一面处理)。 通过将消息发布到Android上的主线程处理程序,我将消息延迟了一个帧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.