CheckedPopupMenuItem
: Fix cursor bug and add cursor parameter (#103474)
This commit is contained in:
parent
a27fcf1a89
commit
e02462a44f
@ -461,6 +461,7 @@ class CheckedPopupMenuItem<T> extends PopupMenuItem<T> {
|
|||||||
super.enabled,
|
super.enabled,
|
||||||
super.padding,
|
super.padding,
|
||||||
super.height,
|
super.height,
|
||||||
|
super.mouseCursor,
|
||||||
super.child,
|
super.child,
|
||||||
}) : assert(checked != null);
|
}) : assert(checked != null);
|
||||||
|
|
||||||
@ -514,13 +515,15 @@ class _CheckedPopupMenuItemState<T> extends PopupMenuItemState<T, CheckedPopupMe
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget buildChild() {
|
Widget buildChild() {
|
||||||
return ListTile(
|
return IgnorePointer(
|
||||||
enabled: widget.enabled,
|
child: ListTile(
|
||||||
leading: FadeTransition(
|
enabled: widget.enabled,
|
||||||
opacity: _opacity,
|
leading: FadeTransition(
|
||||||
child: Icon(_controller.isDismissed ? null : Icons.done),
|
opacity: _opacity,
|
||||||
|
child: Icon(_controller.isDismissed ? null : Icons.done),
|
||||||
|
),
|
||||||
|
title: widget.child,
|
||||||
),
|
),
|
||||||
title: widget.child,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1620,7 +1620,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
testWidgets('CheckedPopupMenuItem custom padding', (WidgetTester tester) async {
|
testWidgets('CheckedPopupMenuItem custom padding', (WidgetTester tester) async {
|
||||||
final Key popupMenuButtonKey = UniqueKey();
|
final Key popupMenuButtonKey = UniqueKey();
|
||||||
final Type menuItemType = const CheckedPopupMenuItem<String>(child: Text('item')).runtimeType;
|
final Type menuItemType = const CheckedPopupMenuItem<String>(child: Text('item')).runtimeType;
|
||||||
@ -2092,6 +2091,86 @@ void main() {
|
|||||||
expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic);
|
expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('CheckedPopupMenuItem changes mouse cursor when hovered', (WidgetTester tester) async {
|
||||||
|
const Key key = ValueKey<int>(1);
|
||||||
|
// Test CheckedPopupMenuItem() constructor
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
body: Align(
|
||||||
|
alignment: Alignment.topLeft,
|
||||||
|
child: Material(
|
||||||
|
child: MouseRegion(
|
||||||
|
cursor: SystemMouseCursors.forbidden,
|
||||||
|
child: CheckedPopupMenuItem<int>(
|
||||||
|
key: key,
|
||||||
|
mouseCursor: SystemMouseCursors.text,
|
||||||
|
value: 1,
|
||||||
|
child: Container(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse, pointer: 1);
|
||||||
|
await gesture.addPointer(location: tester.getCenter(find.byKey(key)));
|
||||||
|
addTearDown(gesture.removePointer);
|
||||||
|
|
||||||
|
await tester.pump();
|
||||||
|
|
||||||
|
expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.text);
|
||||||
|
|
||||||
|
// Test default cursor
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
body: Align(
|
||||||
|
alignment: Alignment.topLeft,
|
||||||
|
child: Material(
|
||||||
|
child: MouseRegion(
|
||||||
|
cursor: SystemMouseCursors.forbidden,
|
||||||
|
child: CheckedPopupMenuItem<int>(
|
||||||
|
key: key,
|
||||||
|
value: 1,
|
||||||
|
child: Container(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.click);
|
||||||
|
|
||||||
|
// Test default cursor when disabled
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
body: Align(
|
||||||
|
alignment: Alignment.topLeft,
|
||||||
|
child: Material(
|
||||||
|
child: MouseRegion(
|
||||||
|
cursor: SystemMouseCursors.forbidden,
|
||||||
|
child: CheckedPopupMenuItem<int>(
|
||||||
|
key: key,
|
||||||
|
value: 1,
|
||||||
|
enabled: false,
|
||||||
|
child: Container(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(RendererBinding.instance.mouseTracker.debugDeviceActiveCursor(1), SystemMouseCursors.basic);
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('PopupMenu in AppBar does not overlap with the status bar', (WidgetTester tester) async {
|
testWidgets('PopupMenu in AppBar does not overlap with the status bar', (WidgetTester tester) async {
|
||||||
const List<PopupMenuItem<int>> choices = <PopupMenuItem<int>>[
|
const List<PopupMenuItem<int>> choices = <PopupMenuItem<int>>[
|
||||||
PopupMenuItem<int>(value: 1, child: Text('Item 1')),
|
PopupMenuItem<int>(value: 1, child: Text('Item 1')),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user