Unverified Commit 613a0ac5 authored by Qun Cheng's avatar Qun Cheng Committed by GitHub

Implement `SubmenuButton.onFocusChange` (#139678)

Fixes #139409

`SubmenuButton.onFocusChange` is not implemented. This PR is just add one line fix to assign this property to `TextButton.onFocusChange` which is used in `SubmenuButton`:)
parent c22c19b6
......@@ -1951,6 +1951,7 @@ class _SubmenuButtonState extends State<SubmenuButton> {
child: TextButton(
style: mergedStyle,
focusNode: _buttonFocusNode,
onFocusChange: _enabled ? widget.onFocusChange : null,
onHover: _enabled ? (bool hovering) => handleHover(hovering, context) : null,
onPressed: _enabled ? () => toggleShowMenu(context) : null,
isSemanticButton: null,
......
......@@ -3519,6 +3519,43 @@ void main() {
expect(material.textStyle?.wordSpacing, menuTextStyle.wordSpacing);
expect(material.textStyle?.decoration, menuTextStyle.decoration);
});
testWidgetsWithLeakTracking('SubmenuButton.onFocusChange is respected', (WidgetTester tester) async {
final FocusNode focusNode = FocusNode();
int onFocusChangeCalled = 0;
await tester.pumpWidget(
MaterialApp(
home: Material(
child: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return SubmenuButton(
focusNode: focusNode,
onFocusChange: (bool value) {
setState(() {
onFocusChangeCalled += 1;
});
},
menuChildren: const <Widget>[
MenuItemButton(child: Text('item 0'))
],
child: const Text('Submenu 0'),
);
}
),
),
),
);
focusNode.requestFocus();
await tester.pump();
expect(focusNode.hasFocus, true);
expect(onFocusChangeCalled, 1);
focusNode.unfocus();
await tester.pump();
expect(focusNode.hasFocus, false);
expect(onFocusChangeCalled, 2);
});
}
List<Widget> createTestMenus({
......
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