Flutter 颤振:如何;禁用";在snackbar显示时触摸
RaisedButton将调用Snackbar并具有setState()。 但是,在设置状态更改之前,屏幕是可点击的 以下是代码的一部分:Flutter 颤振:如何;禁用";在snackbar显示时触摸,flutter,setstate,snackbar,Flutter,Setstate,Snackbar,RaisedButton将调用Snackbar并具有setState()。 但是,在设置状态更改之前,屏幕是可点击的 以下是代码的一部分: child: RaisedButton( child: Text('Click Me'), onPressed: () { theMessage = getMessage(); Scaffold.of(context).showSnackB
child: RaisedButton(
child: Text('Click Me'),
onPressed: () {
theMessage = getMessage();
Scaffold.of(context).showSnackBar(SnackBar(content: Text(theMessage), duration: Duration(seconds: 3),
));
_timer = new Timer(const Duration(seconds: 3), () {
setState(() {
n++;
});
});
}),
您可以使用
showSnackBar
返回的Future
来控制行为。要禁用点击,可以使用小部件AbsorbPointer
。下面是一个将两者结合使用的示例:
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _absorbing = false;
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
void _onButtonPress() {
setState(() {
_absorbing = true;
});
print("Do your work here");
snackBarWithCallback("Hello", () {
print("Done");
setState(() {
_absorbing = false;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(
title: Text(widget.title),
),
body: AbsorbPointer(
absorbing: _absorbing,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Pres Me'),
onPressed: _onButtonPress,
),
],
),
),
),
);
}
void snackBarWithCallback(String content, VoidCallback callback) {
final controller = _scaffoldKey.currentState.showSnackBar(
SnackBar(
content: Text(content),
),
);
controller.closed.whenComplete(callback);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
bool\u=假;
最终GlobalKey _scaffoldKey=GlobalKey();
void _onButtonPress(){
设置状态(){
_吸收=真;
});
打印(“在这里工作”);
snackBarWithCallback(“你好”(){
打印(“完成”);
设置状态(){
_吸收=假;
});
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
钥匙:_scaffoldKey,
appBar:appBar(
标题:文本(widget.title),
),
主体:吸收点(
吸收:_吸收,
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
升起的按钮(
child:Text(“Pres Me”),
按下:按下按钮,
),
],
),
),
),
);
}
void snackBarWithCallback(字符串内容,VoidCallback){
最终控制器=_scaffoldKey.currentState.showSnackBar(
小吃条(
内容:文本(内容),
),
);
控制器。关闭。完成时(回调);
}
}