Fixes issue where navigating to new route breaks FocusNode of previou… (#92615)
This commit is contained in:
parent
15d0a8be1c
commit
3c27851833
@ -488,8 +488,8 @@ class _FocusState extends State<Focus> {
|
|||||||
if (widget.skipTraversal != null) {
|
if (widget.skipTraversal != null) {
|
||||||
focusNode.skipTraversal = widget.skipTraversal;
|
focusNode.skipTraversal = widget.skipTraversal;
|
||||||
}
|
}
|
||||||
if (widget.canRequestFocus != null) {
|
if (widget._canRequestFocus != null) {
|
||||||
focusNode.canRequestFocus = widget.canRequestFocus;
|
focusNode.canRequestFocus = widget._canRequestFocus!;
|
||||||
}
|
}
|
||||||
_couldRequestFocus = focusNode.canRequestFocus;
|
_couldRequestFocus = focusNode.canRequestFocus;
|
||||||
_descendantsWereFocusable = focusNode.descendantsAreFocusable;
|
_descendantsWereFocusable = focusNode.descendantsAreFocusable;
|
||||||
@ -575,8 +575,8 @@ class _FocusState extends State<Focus> {
|
|||||||
if (widget.skipTraversal != null) {
|
if (widget.skipTraversal != null) {
|
||||||
focusNode.skipTraversal = widget.skipTraversal;
|
focusNode.skipTraversal = widget.skipTraversal;
|
||||||
}
|
}
|
||||||
if (widget.canRequestFocus != null) {
|
if (widget._canRequestFocus != null) {
|
||||||
focusNode.canRequestFocus = widget.canRequestFocus;
|
focusNode.canRequestFocus = widget._canRequestFocus!;
|
||||||
}
|
}
|
||||||
focusNode.descendantsAreFocusable = widget.descendantsAreFocusable;
|
focusNode.descendantsAreFocusable = widget.descendantsAreFocusable;
|
||||||
}
|
}
|
||||||
|
@ -1925,5 +1925,36 @@ void main() {
|
|||||||
final TestSemantics expectedSemantics = TestSemantics.root();
|
final TestSemantics expectedSemantics = TestSemantics.root();
|
||||||
expect(semantics, hasSemantics(expectedSemantics));
|
expect(semantics, hasSemantics(expectedSemantics));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Regression test for https://github.com/flutter/flutter/issues/92693
|
||||||
|
testWidgets('Setting parent FocusScope.canRequestFocus to false, does not set descendant Focus._internalNode._canRequestFocus to false', (WidgetTester tester) async {
|
||||||
|
final FocusNode childFocusNode = FocusNode(debugLabel: 'node 1');
|
||||||
|
|
||||||
|
Widget buildFocusTree({required bool parentCanRequestFocus}) {
|
||||||
|
return FocusScope(
|
||||||
|
canRequestFocus: parentCanRequestFocus,
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
Focus(
|
||||||
|
focusNode: childFocusNode,
|
||||||
|
child: Container(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// childFocusNode.canRequestFocus is true when parent canRequestFocus is true
|
||||||
|
await tester.pumpWidget(buildFocusTree(parentCanRequestFocus: true));
|
||||||
|
expect(childFocusNode.canRequestFocus, isTrue);
|
||||||
|
|
||||||
|
// childFocusNode.canRequestFocus is false when parent canRequestFocus is false
|
||||||
|
await tester.pumpWidget(buildFocusTree(parentCanRequestFocus: false));
|
||||||
|
expect(childFocusNode.canRequestFocus, isFalse);
|
||||||
|
|
||||||
|
// childFocusNode.canRequestFocus is true again when parent canRequestFocus is changed back to true
|
||||||
|
await tester.pumpWidget(buildFocusTree(parentCanRequestFocus: true));
|
||||||
|
expect(childFocusNode.canRequestFocus, isTrue);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user