diff --git a/packages/flutter/lib/src/material/calendar_date_picker.dart b/packages/flutter/lib/src/material/calendar_date_picker.dart index e8f5bf8437b..74a99efe0cd 100644 --- a/packages/flutter/lib/src/material/calendar_date_picker.dart +++ b/packages/flutter/lib/src/material/calendar_date_picker.dart @@ -1542,18 +1542,20 @@ class _YearPickerState extends State { @override Widget build(BuildContext context) { - assert(debugCheckHasMaterial(context)); return Column( children: [ const Divider(), Expanded( - child: GridView.builder( - controller: _scrollController, - dragStartBehavior: widget.dragStartBehavior, - gridDelegate: _YearPickerGridDelegate(context), - itemBuilder: _buildYearItem, - itemCount: math.max(_itemCount, minYears), - padding: const EdgeInsets.symmetric(horizontal: _yearPickerPadding), + child: Material( + type: MaterialType.transparency, + child: GridView.builder( + controller: _scrollController, + dragStartBehavior: widget.dragStartBehavior, + gridDelegate: _YearPickerGridDelegate(context), + itemBuilder: _buildYearItem, + itemCount: math.max(_itemCount, minYears), + padding: const EdgeInsets.symmetric(horizontal: _yearPickerPadding), + ), ), ), const Divider(), diff --git a/packages/flutter/test/material/calendar_date_picker_test.dart b/packages/flutter/test/material/calendar_date_picker_test.dart index 92f25490ab6..571ca47ce24 100644 --- a/packages/flutter/test/material/calendar_date_picker_test.dart +++ b/packages/flutter/test/material/calendar_date_picker_test.dart @@ -1734,6 +1734,42 @@ void main() { ), ); }); + + // Regression test for https://github.com/flutter/flutter/issues/155198. + testWidgets('Ink features are painted on inner Material', (WidgetTester tester) async { + await tester.pumpWidget( + yearPicker( + firstDate: DateTime(2020), + lastDate: DateTime(2030), + selectedDate: DateTime(2025), + ), + ); + + expect(find.byType(Material), findsNWidgets(2)); + + // Material outside the GridView. + final MaterialInkController outerMaterial = Material.of( + tester.element(find.byType(YearPicker)), + ); + // Material directly wrapping the GridView. + final MaterialInkController innerMaterial = Material.of( + tester.element(find.byType(GridView)), + ); + + expect(outerMaterial, isNot(same(innerMaterial))); + expect((outerMaterial as dynamic).debugInkFeatures, isNull); + expect((innerMaterial as dynamic).debugInkFeatures, isNull); + + // Hover over the 2022 year item to trigger the ink highlight. + final TestGesture gesture = await tester.createGesture(kind: PointerDeviceKind.mouse); + await gesture.addPointer(location: tester.getCenter(find.text('2022'))); + addTearDown(gesture.removePointer); + await tester.pump(); + + // Only the inner Material should have ink features. + expect((outerMaterial as dynamic).debugInkFeatures, isNull); + expect((innerMaterial as dynamic).debugInkFeatures, hasLength(1)); + }); }); group('Calendar Delegate', () {