Unverified Commit 9a243a12 authored by xubaolin's avatar xubaolin Committed by GitHub

fix a Scaffold.bottomSheet update bug (#83689)

parent 63c49c3d
......@@ -2415,7 +2415,7 @@ class ScaffoldState extends State<Scaffold> with TickerProviderStateMixin, Resto
// bottom sheet.
final List<_StandardBottomSheet> _dismissedBottomSheets = <_StandardBottomSheet>[];
PersistentBottomSheetController<dynamic>? _currentBottomSheet;
final GlobalKey _currentBottomSheetKey = GlobalKey();
GlobalKey _currentBottomSheetKey = GlobalKey();
void _maybeBuildPersistentBottomSheet() {
if (widget.bottomSheet != null && _currentBottomSheet == null) {
......@@ -2443,8 +2443,14 @@ class ScaffoldState extends State<Scaffold> with TickerProviderStateMixin, Resto
return false;
}
// It is possible that the fade-out animation of the sheet has not finished
// yet, and the key needs to be regenerated at this time, otherwise, there will
// be an exception of duplicate GlobalKey.
if (_currentBottomSheetKey.currentState != null)
_currentBottomSheetKey = GlobalKey();
_currentBottomSheet = _buildBottomSheet<void>(
(BuildContext context) {
assert(_currentBottomSheetKey.currentState == null);
return NotificationListener<DraggableScrollableNotification>(
onNotification: _persistentBottomSheetExtentChanged,
child: DraggableScrollableActuator(
......
......@@ -501,6 +501,23 @@ void main() {
},
);
// Regression test for https://github.com/flutter/flutter/issues/83668
testWidgets('Scaffold.bottomSheet update test', (WidgetTester tester) async {
Widget buildFrame(Widget? bottomSheet) {
return MaterialApp(
home: Scaffold(
body: const Placeholder(),
bottomSheet: bottomSheet,
),
);
}
await tester.pumpWidget(buildFrame(const Text('I love Flutter!')));
await tester.pumpWidget(buildFrame(null));
// The disappearing animation has not yet been completed.
await tester.pumpWidget(buildFrame(const Text('I love Flutter!')));
});
testWidgets('Verify that visual properties are passed through', (WidgetTester tester) async {
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
const Color color = Colors.pink;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment