mirror of
https://github.com/flutter/flutter
synced 2024-10-13 19:52:53 +00:00
Fix to DrawerController: Call the callback when drawer opened/closed with a fling. (#52593)
This commit is contained in:
parent
778c2ce923
commit
600a3a74ea
|
@ -436,9 +436,13 @@ class DrawerControllerState extends State<DrawerController> with SingleTickerPro
|
||||||
switch (Directionality.of(context)) {
|
switch (Directionality.of(context)) {
|
||||||
case TextDirection.rtl:
|
case TextDirection.rtl:
|
||||||
_controller.fling(velocity: -visualVelocity);
|
_controller.fling(velocity: -visualVelocity);
|
||||||
|
if (widget.drawerCallback != null)
|
||||||
|
widget.drawerCallback(visualVelocity < 0.0);
|
||||||
break;
|
break;
|
||||||
case TextDirection.ltr:
|
case TextDirection.ltr:
|
||||||
_controller.fling(velocity: visualVelocity);
|
_controller.fling(velocity: visualVelocity);
|
||||||
|
if (widget.drawerCallback != null)
|
||||||
|
widget.drawerCallback(visualVelocity > 0.0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (_controller.value < 0.5) {
|
} else if (_controller.value < 0.5) {
|
||||||
|
|
|
@ -166,4 +166,53 @@ void main() {
|
||||||
await tester.pumpAndSettle();
|
await tester.pumpAndSettle();
|
||||||
expect(find.byType(Drawer), findsNothing);
|
expect(find.byType(Drawer), findsNothing);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('Open/close drawers by flinging', (WidgetTester tester) async {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
drawer: Drawer(
|
||||||
|
child: Container(
|
||||||
|
child: const Text('start drawer'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
endDrawer: Drawer(
|
||||||
|
child: Container(
|
||||||
|
child: const Text('end drawer'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// In the beginning, drawers are closed
|
||||||
|
final ScaffoldState state = tester.firstState(find.byType(Scaffold));
|
||||||
|
expect(state.isDrawerOpen, equals(false));
|
||||||
|
expect(state.isEndDrawerOpen, equals(false));
|
||||||
|
final Size size = tester.getSize(find.byType(Scaffold));
|
||||||
|
|
||||||
|
// A fling from the left opens the start drawer
|
||||||
|
await tester.flingFrom(Offset(0, size.height / 2), const Offset(80, 0), 500);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
expect(state.isDrawerOpen, equals(true));
|
||||||
|
expect(state.isEndDrawerOpen, equals(false));
|
||||||
|
|
||||||
|
// Now, a fling from the right closes the drawer
|
||||||
|
await tester.flingFrom(Offset(size.width - 1, size.height / 2), const Offset(-80, 0), 500);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
expect(state.isDrawerOpen, equals(false));
|
||||||
|
expect(state.isEndDrawerOpen, equals(false));
|
||||||
|
|
||||||
|
// Another fling from the right opens the end drawer
|
||||||
|
await tester.flingFrom(Offset(size.width - 1, size.height / 2), const Offset(-80, 0), 500);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
expect(state.isDrawerOpen, equals(false));
|
||||||
|
expect(state.isEndDrawerOpen, equals(true));
|
||||||
|
|
||||||
|
// And a fling from the left closes it
|
||||||
|
await tester.flingFrom( Offset(0, size.height / 2), const Offset(80, 0), 500);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
expect(state.isDrawerOpen, equals(false));
|
||||||
|
expect(state.isEndDrawerOpen, equals(false));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue