Вы можете использовать Future
, возвращаемое showSnackBar
для управления поведением. Для отключения постукивания вы можете использовать виджет 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);
}
}