mirror of
https://github.com/flutter/flutter
synced 2024-10-13 11:42:54 +00:00
Added clearSnackBars method to ScaffoldMessengerState (#76146)
This commit is contained in:
parent
3594d1aa47
commit
aa16a8cac0
|
@ -432,6 +432,17 @@ class ScaffoldMessengerState extends State<ScaffoldMessenger> with TickerProvide
|
|||
_snackBarTimer = null;
|
||||
}
|
||||
|
||||
/// Removes all the snackBars currently in queue by clearing the queue
|
||||
/// and running normal exit animation on the current snackBar.
|
||||
void clearSnackBars() {
|
||||
if (_snackBars.isEmpty || _snackBarController!.status == AnimationStatus.dismissed)
|
||||
return;
|
||||
final ScaffoldFeatureController<SnackBar, SnackBarClosedReason> currentSnackbar = _snackBars.first;
|
||||
_snackBars.clear();
|
||||
_snackBars.add(currentSnackbar);
|
||||
hideCurrentSnackBar();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
assert(debugCheckHasMediaQuery(context));
|
||||
|
|
|
@ -2323,4 +2323,54 @@ void main() {
|
|||
final Offset snackBarTopRight = tester.getTopRight(find.byType(SnackBar));
|
||||
expect(snackBarTopRight.dy, 465.0);
|
||||
});
|
||||
|
||||
testWidgets('ScaffoldMessengerState clearSnackBars works as expected', (WidgetTester tester) async {
|
||||
final List<String> snackBars = <String>['Hello Snackbar', 'Hi Snackbar', 'Bye Snackbar'];
|
||||
int snackBarCounter = 0;
|
||||
const Key tapTarget = Key('tap-target');
|
||||
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey = GlobalKey();
|
||||
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: ScaffoldMessenger(
|
||||
key: scaffoldMessengerKey,
|
||||
child: Scaffold(
|
||||
body: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return GestureDetector(
|
||||
key: tapTarget,
|
||||
onTap: () {
|
||||
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
|
||||
content: Text(snackBars[snackBarCounter++]),
|
||||
duration: const Duration(seconds: 2),
|
||||
));
|
||||
},
|
||||
behavior: HitTestBehavior.opaque,
|
||||
child: Container(
|
||||
height: 100.0,
|
||||
width: 100.0,
|
||||
),
|
||||
);
|
||||
}
|
||||
),
|
||||
),
|
||||
),
|
||||
));
|
||||
expect(find.text(snackBars[0]), findsNothing);
|
||||
expect(find.text(snackBars[1]), findsNothing);
|
||||
expect(find.text(snackBars[2]), findsNothing);
|
||||
await tester.tap(find.byKey(tapTarget));
|
||||
await tester.tap(find.byKey(tapTarget));
|
||||
await tester.tap(find.byKey(tapTarget));
|
||||
expect(find.text(snackBars[0]), findsNothing);
|
||||
expect(find.text(snackBars[1]), findsNothing);
|
||||
expect(find.text(snackBars[2]), findsNothing);
|
||||
await tester.pump(); // schedule animation
|
||||
expect(find.text(snackBars[0]), findsOneWidget);
|
||||
scaffoldMessengerKey.currentState!.clearSnackBars();
|
||||
expect(find.text(snackBars[0]), findsOneWidget);
|
||||
await tester.pump(const Duration(seconds: 2));
|
||||
expect(find.text(snackBars[0]), findsNothing);
|
||||
expect(find.text(snackBars[1]), findsNothing);
|
||||
expect(find.text(snackBars[2]), findsNothing);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue