mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
ignore Scaffold drawer callbacks when value doesn't change (#92329)
This commit is contained in:
parent
d2cea6432f
commit
a5863932ad
@ -1960,17 +1960,21 @@ class ScaffoldState extends State<Scaffold> with TickerProviderStateMixin, Resto
|
||||
bool get isEndDrawerOpen => _endDrawerOpened.value;
|
||||
|
||||
void _drawerOpenedCallback(bool isOpened) {
|
||||
setState(() {
|
||||
_drawerOpened.value = isOpened;
|
||||
});
|
||||
widget.onDrawerChanged?.call(isOpened);
|
||||
if (_drawerOpened.value != isOpened) {
|
||||
setState(() {
|
||||
_drawerOpened.value = isOpened;
|
||||
});
|
||||
widget.onDrawerChanged?.call(isOpened);
|
||||
}
|
||||
}
|
||||
|
||||
void _endDrawerOpenedCallback(bool isOpened) {
|
||||
setState(() {
|
||||
_endDrawerOpened.value = isOpened;
|
||||
});
|
||||
widget.onEndDrawerChanged?.call(isOpened);
|
||||
if (_endDrawerOpened.value != isOpened) {
|
||||
setState(() {
|
||||
_endDrawerOpened.value = isOpened;
|
||||
});
|
||||
widget.onEndDrawerChanged?.call(isOpened);
|
||||
}
|
||||
}
|
||||
|
||||
/// Opens the [Drawer] (if any).
|
||||
|
||||
@ -50,6 +50,40 @@ void main() {
|
||||
expect(false, isEndDrawerOpen);
|
||||
});
|
||||
|
||||
testWidgets('Scaffold drawer callback test - only call when changed', (WidgetTester tester) async {
|
||||
// Regression test for https://github.com/flutter/flutter/issues/87914
|
||||
bool onDrawerChangedCalled = false;
|
||||
bool onEndDrawerChangedCalled = false;
|
||||
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: Scaffold(
|
||||
drawer: Container(
|
||||
color: Colors.blue,
|
||||
),
|
||||
onDrawerChanged: (bool isOpen) {
|
||||
onDrawerChangedCalled = true;
|
||||
},
|
||||
endDrawer: Container(
|
||||
color: Colors.green,
|
||||
),
|
||||
onEndDrawerChanged: (bool isOpen) {
|
||||
onEndDrawerChangedCalled = true;
|
||||
},
|
||||
body: Container(),
|
||||
),
|
||||
));
|
||||
|
||||
await tester.flingFrom(Offset.zero, const Offset(10.0, 0.0), 10.0);
|
||||
expect(false, onDrawerChangedCalled);
|
||||
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
final double width = tester.getSize(find.byType(MaterialApp)).width;
|
||||
await tester.flingFrom(Offset(width - 1, 0.0), const Offset(-10.0, 0.0), 10.0);
|
||||
await tester.pumpAndSettle();
|
||||
expect(false, onEndDrawerChangedCalled);
|
||||
});
|
||||
|
||||
testWidgets('Scaffold control test', (WidgetTester tester) async {
|
||||
final Key bodyKey = UniqueKey();
|
||||
Widget boilerplate(Widget child) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user