feat:增加对话框工具类

This commit is contained in:
2025-11-23 23:07:36 +08:00
parent 98b389a6ff
commit 1953e43ca4
11 changed files with 669 additions and 93 deletions

View File

@@ -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,
),
],
);
}