From 66dcf53029a5d938b538b30340c6ae1d732e4b64 Mon Sep 17 00:00:00 2001 From: lake Date: Thu, 25 Apr 2024 16:43:01 +0800 Subject: [PATCH 1/2] Add a note for the desktop environment. --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 723c199..f75aa44 100644 --- a/README.md +++ b/README.md @@ -49,3 +49,24 @@ You can use custom colors and labels by the optional parameters: - `weeknumberColor` Color of the weekday container - `weeknumberTextColor` Color of the weekday text - `daysInWeek` Specifies the number of weekdays to render, default is 7, so Monday to Sunday + +## How to make it scrollable on desktop + +1- Create a class, extend it from MaterialScrollBeavior, and override dragDevices: +```dart +class AppScrollBehavior extends MaterialScrollBehavior { + @override + Set get dragDevices => { + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + PointerDeviceKind.trackpad, + }; +} +``` +2- Pass an AppScrollBehavior instance to scrollBehavior property of MaterialApp: +```dart +MaterialApp( +scrollBehavior: AppScrollBehavior(), +... +); +``` From fd7cd81408c4f5280f50d3b6bae1bbc0b95991b8 Mon Sep 17 00:00:00 2001 From: lake Date: Thu, 25 Apr 2024 17:22:00 +0800 Subject: [PATCH 2/2] scroll with mouse --- README.md | 2 +- lib/weekly_date_picker.dart | 41 ++++++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index f75aa44..236ce1c 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ You can use custom colors and labels by the optional parameters: - `weeknumberTextColor` Color of the weekday text - `daysInWeek` Specifies the number of weekdays to render, default is 7, so Monday to Sunday -## How to make it scrollable on desktop +## ~~How to make it scrollable on desktop~~ 1- Create a class, extend it from MaterialScrollBeavior, and override dragDevices: ```dart diff --git a/lib/weekly_date_picker.dart b/lib/weekly_date_picker.dart index 6b547e7..cd85ad2 100644 --- a/lib/weekly_date_picker.dart +++ b/lib/weekly_date_picker.dart @@ -1,9 +1,19 @@ library weekly_date_picker; +import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:week_of_year/week_of_year.dart'; import "package:weekly_date_picker/datetime_apis.dart"; +class PickerScrollBehavior extends MaterialScrollBehavior { + @override + Set get dragDevices => { + PointerDeviceKind.touch, + PointerDeviceKind.mouse, + PointerDeviceKind.trackpad, + }; +} + class WeeklyDatePicker extends StatefulWidget { WeeklyDatePicker({ Key? key, @@ -114,20 +124,23 @@ class _WeeklyDatePickerState extends State { ) : Container(), Expanded( - child: PageView.builder( - controller: _controller, - onPageChanged: (int index) { - setState(() { - _weeknumberInSwipe = _initialSelectedDay - .addDays(7 * (index - _weekIndexOffset)) - .weekOfYear; - }); - }, - scrollDirection: Axis.horizontal, - itemBuilder: (_, weekIndex) => Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.center, - children: _weekdays(weekIndex - _weekIndexOffset), + child: ScrollConfiguration( + behavior: PickerScrollBehavior(), + child: PageView.builder( + controller: _controller, + onPageChanged: (int index) { + setState(() { + _weeknumberInSwipe = _initialSelectedDay + .addDays(7 * (index - _weekIndexOffset)) + .weekOfYear; + }); + }, + scrollDirection: Axis.horizontal, + itemBuilder: (_, weekIndex) => Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, + children: _weekdays(weekIndex - _weekIndexOffset), + ), ), ), ),