-
Notifications
You must be signed in to change notification settings - Fork 26.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix
CalendarDatePicker
day selection shape and overlay (#144317)
fixes [`DatePickerDialog` date entry hover background and ink splash have different radius](#141350) fixes [Ability to customize DatePicker day selection background and overlay shape](#144220) ### Code sample <details> <summary>expand to view the code sample</summary> ```dart import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @OverRide Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: Builder(builder: (context) { return FilledButton( onPressed: () { showDatePicker( context: context, initialDate: DateTime.now(), firstDate: DateTime.utc(2010), lastDate: DateTime.utc(2030), ); }, child: const Text('Show Date picker'), ); }), ), ), ); } } ``` </details> ### Material DatePicker states specs ![overlay_specs](https://github.com/flutter/flutter/assets/48603081/45ce16cf-7ee9-41e1-a4fa-327de07b78d1) ### Day selection overlay | Before | After | | --------------- | --------------- | | <img src="https://github.com/flutter/flutter/assets/48603081/b529d38d-0232-494b-8bf2-55d28420a245" /> | <img src="https://github.com/flutter/flutter/assets/48603081/c4799559-a7ef-45fd-aed9-aeb386370580" /> | ### Hover, pressed, highlight preview | Before | After | | --------------- | --------------- | | <video src="https://github.com/flutter/flutter/assets/48603081/8edde82a-7f39-4482-afab-183e1bce5991" /> | <video src="https://github.com/flutter/flutter/assets/48603081/04e1502e-67a4-4b33-973d-463067d70151" /> | ### Using `DatePickerThemeData.dayShape` to customize day selection background and overlay shape | Before | After | | --------------- | --------------- | | <img src="https://github.com/flutter/flutter/assets/48603081/a0c85f58-a69b-4e14-a45d-41e580ceedce" /> | <img src="https://github.com/flutter/flutter/assets/48603081/db67cee1-d28d-4168-98b8-fd7a9cb70cda" /> | ### Example preview ![Screenshot 2024-02-29 at 15 07 50](https://github.com/flutter/flutter/assets/48603081/3770ed5c-28bf-4d0a-9514-87e1cd2ce515)
- Loading branch information
1 parent
cfabdca
commit ba719bc
Showing
7 changed files
with
245 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
64 changes: 64 additions & 0 deletions
64
examples/api/lib/material/date_picker/date_picker_theme_day_shape.0.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// Copyright 2014 The Flutter Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
import 'package:flutter/material.dart'; | ||
|
||
/// Flutter code sample for [DatePickerThemeData]. | ||
void main() => runApp(const DatePickerApp()); | ||
|
||
class DatePickerApp extends StatelessWidget { | ||
const DatePickerApp({super.key}); | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return MaterialApp( | ||
theme: ThemeData( | ||
datePickerTheme: DatePickerThemeData( | ||
todayBackgroundColor: const MaterialStatePropertyAll<Color>(Colors.amber), | ||
todayForegroundColor: const MaterialStatePropertyAll<Color>(Colors.black), | ||
todayBorder: const BorderSide(width: 2), | ||
dayShape: MaterialStatePropertyAll<OutlinedBorder>( | ||
RoundedRectangleBorder( | ||
borderRadius: BorderRadius.circular(8.0), | ||
), | ||
), | ||
shape: RoundedRectangleBorder( | ||
borderRadius: BorderRadius.circular(16.0), | ||
), | ||
), | ||
), | ||
home: const DatePickerExample(), | ||
); | ||
} | ||
} | ||
|
||
class DatePickerExample extends StatefulWidget { | ||
const DatePickerExample({super.key}); | ||
|
||
@override | ||
State<DatePickerExample> createState() => _DatePickerExampleState(); | ||
} | ||
|
||
class _DatePickerExampleState extends State<DatePickerExample> { | ||
@override | ||
Widget build(BuildContext context) { | ||
return Scaffold( | ||
body: Center( | ||
child: OutlinedButton( | ||
onPressed: () { | ||
showDatePicker( | ||
context: context, | ||
initialDate: DateTime(2021, 1, 20), | ||
currentDate: DateTime(2021, 1, 15), | ||
firstDate: DateTime(2021), | ||
lastDate: DateTime(2022), | ||
); | ||
}, | ||
child: const Text('Open Date Picker'), | ||
), | ||
), | ||
); | ||
} | ||
} |
55 changes: 55 additions & 0 deletions
55
examples/api/test/material/date_picker/date_picker_theme_day_shape.0_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// Copyright 2014 The Flutter Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_api_samples/material/date_picker/date_picker_theme_day_shape.0.dart' as example; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
|
||
void main() { | ||
testWidgets('DatePickerThemeData.dayShape updates day selection shape decoration', (WidgetTester tester) async { | ||
final ThemeData theme = ThemeData(); | ||
final OutlinedBorder dayShape = RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.0)); | ||
const Color todayBackgroundColor = Colors.amber; | ||
const Color todayForegroundColor = Colors.black; | ||
const BorderSide todayBorder = BorderSide(width: 2); | ||
|
||
await tester.pumpWidget( | ||
const example.DatePickerApp(), | ||
); | ||
|
||
await tester.tap(find.text('Open Date Picker')); | ||
await tester.pumpAndSettle(); | ||
|
||
ShapeDecoration dayShapeDecoration = tester.widget<DecoratedBox>(find.ancestor( | ||
of: find.text('15'), | ||
matching: find.byType(DecoratedBox), | ||
)).decoration as ShapeDecoration; | ||
|
||
// Test the current day shape decoration. | ||
expect(dayShapeDecoration.color, todayBackgroundColor); | ||
expect(dayShapeDecoration.shape, dayShape.copyWith(side: todayBorder.copyWith(color: todayForegroundColor))); | ||
|
||
dayShapeDecoration = tester.widget<DecoratedBox>(find.ancestor( | ||
of: find.text('20'), | ||
matching: find.byType(DecoratedBox), | ||
)).decoration as ShapeDecoration; | ||
|
||
// Test the selected day shape decoration. | ||
expect(dayShapeDecoration.color, theme.colorScheme.primary); | ||
expect(dayShapeDecoration.shape, dayShape); | ||
|
||
// Tap to select current day as the selected day. | ||
await tester.tap(find.text('15')); | ||
await tester.pumpAndSettle(); | ||
|
||
dayShapeDecoration = tester.widget<DecoratedBox>(find.ancestor( | ||
of: find.text('15'), | ||
matching: find.byType(DecoratedBox), | ||
)).decoration as ShapeDecoration; | ||
|
||
// Test the selected day shape decoration. | ||
expect(dayShapeDecoration.color, todayBackgroundColor); | ||
expect(dayShapeDecoration.shape, dayShape.copyWith(side: todayBorder.copyWith(color: todayForegroundColor))); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.