diff --git a/README.md b/README.md index 70283cc..84ebde7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![header.jpg](header.jpg) -**Flutter widget form select a date in horizontal timeline with customizable styles.** +**DISCONTINUED - Flutter widget form select a date in horizontal timeline with customizable styles.** ## Getting Started @@ -46,4 +46,4 @@ CalendarTimeline( selectableDayPredicate: (date) => date.day != 23, locale: 'en_ISO', ) -``` \ No newline at end of file +``` diff --git a/example/android/build.gradle b/example/android/build.gradle index a8af9f4..40dc88c 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -26,6 +26,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/example/pubspec.lock b/example/pubspec.lock index 5ab2335..92d10de 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" boolean_selector: dependency: transitive description: @@ -28,10 +28,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -44,10 +44,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.2" fake_async: dependency: transitive description: @@ -86,10 +86,10 @@ packages: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" lints: dependency: transitive description: @@ -101,35 +101,34 @@ packages: matcher: dependency: transitive description: - name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" scrollable_positioned_list: dependency: transitive description: @@ -147,10 +146,10 @@ packages: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -187,10 +186,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.6.0" vector_math: dependency: transitive description: @@ -199,6 +198,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=3.0.0-0 <4.0.0" flutter: ">=2.12.0" diff --git a/lib/src/calendar_timeline.dart b/lib/src/calendar_timeline.dart index 6046254..67b4305 100644 --- a/lib/src/calendar_timeline.dart +++ b/lib/src/calendar_timeline.dart @@ -28,6 +28,14 @@ class CalendarTimeline extends StatefulWidget { this.monthColor, this.dotColor, this.dayNameColor, + this.height = 80, + this.width = 60, + this.shrinkHeight = 50, + this.shrinkWidth = 33, + this.fontSize = 32, + this.shrinkFontSize = 14, + this.dayNameFontSize = 14, + this.shrinkDayNameFontSize = 9, this.shrink = false, this.locale, this.showYears = false, @@ -65,6 +73,14 @@ class CalendarTimeline extends StatefulWidget { final Color? monthColor; final Color? dotColor; final Color? dayNameColor; + final double height; + final double width; + final double shrinkHeight; + final double shrinkWidth; + final double fontSize; + final double shrinkFontSize; + final double dayNameFontSize; + final double shrinkDayNameFontSize; final bool shrink; final String? locale; final List? eventDates; @@ -260,8 +276,8 @@ class _CalendarTimelineState extends State { _moveToYearIndex(index); // Reset month and day index - _monthSelectedIndex = null; - _daySelectedIndex = null; + _monthSelectedIndex = 0; + _daySelectedIndex = 0; // Regenerate months and days final date = _years[index]; @@ -442,7 +458,7 @@ class _CalendarTimelineState extends State { Widget _buildDayList() { return SizedBox( key: const Key('ScrollableDayList'), - height: 70, + height: widget.shrink ? widget.shrinkHeight : widget.height, child: ScrollablePositionedList.builder( itemScrollController: _controllerDay, initialScrollIndex: _daySelectedIndex ?? 0, @@ -471,6 +487,14 @@ class _CalendarTimelineState extends State { showDot: _eventDates?.contains(currentDay) ?? false, dotColor: widget.dotColor, dayNameColor: widget.dayNameColor, + height: widget.height, + width: widget.width, + shrinkHeight: widget.shrinkHeight, + shrinkWidth: widget.shrinkWidth, + fontSize: widget.fontSize, + shrinkFontSize: widget.shrinkFontSize, + dayNameFontSize: widget.dayNameFontSize, + shrinkDayNameFontSize: widget.shrinkDayNameFontSize, shrink: widget.shrink, ), if (index == _days.length - 1) diff --git a/lib/src/day_item.dart b/lib/src/day_item.dart index 9884f9e..586b208 100644 --- a/lib/src/day_item.dart +++ b/lib/src/day_item.dart @@ -15,6 +15,14 @@ class DayItem extends StatelessWidget { this.showDot = false, this.dotColor, this.dayNameColor, + required this.height, + required this.width, + required this.shrinkHeight, + required this.shrinkWidth, + required this.fontSize, + required this.shrinkFontSize, + required this.dayNameFontSize, + required this.shrinkDayNameFontSize, this.shrink = false, }) : super(key: key); final int dayNumber; @@ -28,6 +36,14 @@ class DayItem extends StatelessWidget { final bool showDot; final Color? dotColor; final Color? dayNameColor; + final double height; + final double width; + final double shrinkHeight; + final double shrinkWidth; + final double fontSize; + final double shrinkFontSize; + final double dayNameFontSize; + final double shrinkDayNameFontSize; final bool shrink; GestureDetector _buildDay(BuildContext context) { @@ -36,12 +52,12 @@ class DayItem extends StatelessWidget { ? dayColor ?? Theme.of(context).colorScheme.secondary : dayColor?.withOpacity(0.5) ?? Theme.of(context).colorScheme.secondary.withOpacity(0.5), - fontSize: shrink ? 14 : 32, - fontWeight: FontWeight.normal, + fontSize: shrink ? shrinkFontSize : fontSize, + height: 0.8, ); final selectedStyle = TextStyle( color: activeDayColor ?? Colors.white, - fontSize: shrink ? 14 : 32, + fontSize: shrink ? shrinkFontSize : fontSize, fontWeight: FontWeight.bold, height: 0.8, ); @@ -56,9 +72,10 @@ class DayItem extends StatelessWidget { borderRadius: BorderRadius.circular(12), ) : const BoxDecoration(color: Colors.transparent), - height: shrink ? 40 : 70, - width: shrink ? 33 : 60, + height: shrink ? shrinkHeight : height, + width: shrink ? shrinkWidth : width, child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (showDot) ...[ SizedBox(height: shrink ? 6 : 7), @@ -71,14 +88,34 @@ class DayItem extends StatelessWidget { style: isSelected ? selectedStyle : textStyle, ), if (isSelected) - Text( + Column( + children: [ + SizedBox(height: shrink ? 6 : 7), + if (!shrink) _buildDots(), + SizedBox(height: shrink ? 6 : 7), + ], + ) + else + SizedBox(height: shrink ? 12 : 19), + Center( + child: Text( + dayNumber.toString(), + style: isSelected ? selectedStyle : textStyle, + ), + ), + Padding( + padding: const EdgeInsets.only(bottom: 4), + child: Text( shortName, style: TextStyle( - color: dayNameColor ?? activeDayColor ?? Colors.white, + color: isSelected + ? dayNameColor ?? activeDayColor ?? Colors.white + : Colors.transparent, fontWeight: FontWeight.bold, - fontSize: shrink ? 9 : 14, + fontSize: shrink ? shrinkDayNameFontSize : dayNameFontSize, ), ), + ), ], ), ), diff --git a/pubspec.lock b/pubspec.lock index 8198720..d8bf939 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" boolean_selector: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.2" fake_async: dependency: transitive description: @@ -63,26 +63,26 @@ packages: dependency: "direct main" description: name: intl - sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.18.0" + version: "0.18.1" js: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" matcher: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.16" material_color_utilities: dependency: transitive description: @@ -90,31 +90,31 @@ packages: sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" scrollable_positioned_list: dependency: "direct main" description: name: scrollable_positioned_list - sha256: ca7fcaa743db712d4f7b1580526f494d0093c77a721a65705ee51fbeac7a2bd3 + sha256: "1b54d5f1329a1e263269abc9e2543d90806131aa14fe7c6062a8054d57249287" url: "https://pub.dev" source: hosted - version: "0.3.5" + version: "0.3.8" sky_engine: dependency: transitive description: flutter @@ -127,7 +127,7 @@ packages: sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" stack_trace: dependency: transitive description: @@ -164,10 +164,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" vector_math: dependency: transitive description: @@ -184,6 +184,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.0+1" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" + source: hosted + version: "0.1.4-beta" sdks: - dart: ">=2.19.0 <3.0.0" + dart: ">=3.0.0-0 <4.0.0" flutter: ">=2.12.0" diff --git a/test/src/day_item_test.dart b/test/src/day_item_test.dart index 25286b0..11aee81 100644 --- a/test/src/day_item_test.dart +++ b/test/src/day_item_test.dart @@ -19,6 +19,14 @@ void main() { dayNumber: ParamFactory.dayNumber, shortName: ParamFactory.dayName, isSelected: true, + height: 70, + width: 60, + shrinkHeight: 40, + shrinkWidth: 33, + fontSize: 32, + shrinkFontSize: 14, + dayNameFontSize: 14, + shrinkDayNameFontSize: 9, onTap: () {}, ), ); @@ -42,6 +50,14 @@ void main() { dayNumber: ParamFactory.dayNumber, shortName: ParamFactory.dayName, activeDayBackgroundColor: ParamFactory.activeColor, + height: 70, + width: 60, + shrinkHeight: 40, + shrinkWidth: 33, + fontSize: 32, + shrinkFontSize: 14, + dayNameFontSize: 14, + shrinkDayNameFontSize: 9, onTap: () {}, ), ); @@ -61,6 +77,14 @@ void main() { shortName: ParamFactory.dayName, activeDayBackgroundColor: ParamFactory.activeColor, isSelected: true, + height: 70, + width: 60, + shrinkHeight: 40, + shrinkWidth: 33, + fontSize: 32, + shrinkFontSize: 14, + dayNameFontSize: 14, + shrinkDayNameFontSize: 9, onTap: () {}, ), ); @@ -83,6 +107,14 @@ void main() { dayNumber: ParamFactory.dayNumber, shortName: ParamFactory.dayName, activeDayColor: ParamFactory.activeColor, + height: 70, + width: 60, + shrinkHeight: 40, + shrinkWidth: 33, + fontSize: 32, + shrinkFontSize: 14, + dayNameFontSize: 14, + shrinkDayNameFontSize: 9, onTap: () {}, ), ); @@ -102,6 +134,14 @@ void main() { shortName: ParamFactory.dayName, activeDayColor: ParamFactory.activeColor, isSelected: true, + height: 70, + width: 60, + shrinkHeight: 40, + shrinkWidth: 33, + fontSize: 32, + shrinkFontSize: 14, + dayNameFontSize: 14, + shrinkDayNameFontSize: 9, onTap: () {}, ), );