|
|
|
import 'package:doublefeel_flutter/app/utils/font_utils.dart';
|
|
|
|
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:doublefeel_flutter/l10n/l10n_extensions.dart';
|
|
|
|
|
|
|
|
import '../config/report_date_range_config.dart';
|
|
|
|
import '../models/report_period.dart';
|
|
...
|
...
|
@@ -233,6 +234,8 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
late final FixedExtentScrollController _yearController;
|
|
|
|
late FixedExtentScrollController _monthController;
|
|
|
|
late FixedExtentScrollController _dayController;
|
|
|
|
int _monthControllerVersion = 0;
|
|
|
|
int _dayControllerVersion = 0;
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
...
|
...
|
@@ -271,6 +274,8 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
final lastMonth = _lastSelectableMonth;
|
|
|
|
final firstDay = _firstSelectableDay;
|
|
|
|
final lastDay = _lastSelectableDay;
|
|
|
|
final monthControllerVersion = _monthControllerVersion;
|
|
|
|
final dayControllerVersion = _dayControllerVersion;
|
|
|
|
final yearPicker = Expanded(
|
|
|
|
child: _picker(
|
|
|
|
controller: _yearController,
|
|
...
|
...
|
@@ -290,6 +295,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
);
|
|
|
|
final monthPicker = Expanded(
|
|
|
|
child: _picker(
|
|
|
|
key: ValueKey('month-$_monthControllerVersion'),
|
|
|
|
controller: _monthController,
|
|
|
|
count: lastMonth - firstMonth + 1,
|
|
|
|
selectedIndex: _month - firstMonth,
|
|
...
|
...
|
@@ -298,6 +304,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
Localizations.localeOf(context).toLanguageTag(),
|
|
|
|
),
|
|
|
|
onSelectedItemChanged: (index) {
|
|
|
|
if (monthControllerVersion != _monthControllerVersion) return;
|
|
|
|
setState(() {
|
|
|
|
_month = firstMonth + index;
|
|
|
|
_clampDay();
|
|
...
|
...
|
@@ -307,6 +314,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
);
|
|
|
|
final dayPicker = Expanded(
|
|
|
|
child: _picker(
|
|
|
|
key: ValueKey('day-$_dayControllerVersion'),
|
|
|
|
controller: _dayController,
|
|
|
|
count: lastDay - firstDay + 1,
|
|
|
|
selectedIndex: _day - firstDay,
|
|
...
|
...
|
@@ -315,6 +323,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
Localizations.localeOf(context).toLanguageTag(),
|
|
|
|
),
|
|
|
|
onSelectedItemChanged: (index) {
|
|
|
|
if (dayControllerVersion != _dayControllerVersion) return;
|
|
|
|
setState(() => _day = firstDay + index);
|
|
|
|
},
|
|
|
|
),
|
|
...
|
...
|
@@ -365,6 +374,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
}
|
|
|
|
|
|
|
|
Widget _picker({
|
|
|
|
Key? key,
|
|
|
|
required FixedExtentScrollController controller,
|
|
|
|
required int count,
|
|
|
|
required int selectedIndex,
|
|
...
|
...
|
@@ -372,6 +382,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
required ValueChanged<int> onSelectedItemChanged,
|
|
|
|
}) {
|
|
|
|
return CupertinoPicker.builder(
|
|
|
|
key: key,
|
|
|
|
scrollController: controller,
|
|
|
|
itemExtent: _itemExtent,
|
|
|
|
diameterRatio: 1.6,
|
|
...
|
...
|
@@ -424,6 +435,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
final nextMonth = _month.clamp(firstMonth, lastMonth);
|
|
|
|
_month = nextMonth;
|
|
|
|
_monthController.dispose();
|
|
|
|
_monthControllerVersion++;
|
|
|
|
_monthController =
|
|
|
|
FixedExtentScrollController(initialItem: _month - firstMonth);
|
|
|
|
_clampDay();
|
|
...
|
...
|
@@ -435,6 +447,7 @@ class _DayDatePickerSheetState extends State<_DayDatePickerSheet> { |
|
|
|
final nextDay = _day.clamp(firstDay, lastDay);
|
|
|
|
_day = nextDay;
|
|
|
|
_dayController.dispose();
|
|
|
|
_dayControllerVersion++;
|
|
|
|
_dayController = FixedExtentScrollController(initialItem: _day - firstDay);
|
|
|
|
}
|
|
|
|
|
|
...
|
...
|
@@ -757,7 +770,7 @@ class _AdjacentPicker extends StatelessWidget { |
|
|
|
softWrap: false,
|
|
|
|
overflow: TextOverflow.visible,
|
|
|
|
style: TextStyle(
|
|
|
|
fontFamily: 'PingFangSC',
|
|
|
|
fontFamily: FontUtils.getFontFamily(context),
|
|
|
|
color: selected
|
|
|
|
? _ReportPickerColors.h1
|
|
|
|
: adjacent
|
...
|
...
|
|