feat:增加对话框工具类
This commit is contained in:
@@ -3,26 +3,21 @@ import 'package:flutter/material.dart';
|
||||
import 'common_widget.dart';
|
||||
|
||||
class YearSelector extends StatefulWidget {
|
||||
final int initialYear;
|
||||
final int? minYear;
|
||||
final int? maxYear;
|
||||
final int currentYear;
|
||||
final Function(int) onYearChanged;
|
||||
|
||||
const YearSelector({
|
||||
super.key,
|
||||
required this.initialYear,
|
||||
required this.onYearChanged,
|
||||
this.minYear,
|
||||
this.maxYear,
|
||||
});
|
||||
const YearSelector(
|
||||
{super.key, required this.currentYear, required this.onYearChanged});
|
||||
|
||||
@override
|
||||
State<YearSelector> createState() => _YearSelectorState();
|
||||
}
|
||||
|
||||
// SingleTickerProviderStateMixin 动画控制器
|
||||
class _YearSelectorState extends State<YearSelector>
|
||||
with SingleTickerProviderStateMixin {
|
||||
final int minYear = 2000;
|
||||
final int maxYear = 2100;
|
||||
|
||||
late int _currentYear;
|
||||
|
||||
// 用于动画效果
|
||||
@@ -32,7 +27,8 @@ class _YearSelectorState extends State<YearSelector>
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_currentYear = widget.initialYear;
|
||||
|
||||
_currentYear = widget.currentYear;
|
||||
|
||||
// 初始化动画控制器
|
||||
_animationController = AnimationController(
|
||||
@@ -46,6 +42,17 @@ class _YearSelectorState extends State<YearSelector>
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(YearSelector oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
|
||||
if (oldWidget.currentYear != widget.currentYear) {
|
||||
setState(() {
|
||||
_currentYear = widget.currentYear;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_animationController.dispose();
|
||||
@@ -54,24 +61,26 @@ class _YearSelectorState extends State<YearSelector>
|
||||
|
||||
/// 切换到上一年
|
||||
void _previousYear() {
|
||||
if (widget.minYear == null || _currentYear > widget.minYear!) {
|
||||
if (_currentYear > minYear) {
|
||||
_animateYearChange(() {
|
||||
final newYear = _currentYear - 1;
|
||||
setState(() {
|
||||
_currentYear--;
|
||||
_currentYear = newYear;
|
||||
});
|
||||
widget.onYearChanged(_currentYear);
|
||||
widget.onYearChanged(newYear);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// 切换到下一年
|
||||
void _nextYear() {
|
||||
if (widget.maxYear == null || _currentYear < widget.maxYear!) {
|
||||
if (_currentYear < maxYear) {
|
||||
_animateYearChange(() {
|
||||
final newYear = _currentYear + 1;
|
||||
setState(() {
|
||||
_currentYear++;
|
||||
_currentYear = newYear;
|
||||
});
|
||||
widget.onYearChanged(_currentYear);
|
||||
widget.onYearChanged(newYear);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -91,7 +100,7 @@ class _YearSelectorState extends State<YearSelector>
|
||||
children: [
|
||||
CircleIconButton(
|
||||
icon: Icons.chevron_left,
|
||||
onPressed: () => _previousYear(),
|
||||
onPressed: _previousYear,
|
||||
),
|
||||
AnimatedBuilder(
|
||||
animation: _scaleAnimation,
|
||||
@@ -109,8 +118,8 @@ class _YearSelectorState extends State<YearSelector>
|
||||
),
|
||||
CircleIconButton(
|
||||
icon: Icons.chevron_right,
|
||||
onPressed: () => _nextYear(),
|
||||
)
|
||||
onPressed: _nextYear,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user