|
|
@@ -11,26 +11,68 @@ import '../resource/colors.gen.dart';
|
|
|
class SelectMessageReminderDateDialog {
|
|
|
static const String _tag = 'SelectMessageReminderDateDialog';
|
|
|
|
|
|
- static void show({List<int>? selectWeekDays}) {
|
|
|
+ static void show(
|
|
|
+ {List<int>? selectWeekDays, void Function(List<int>)? onSelected}) {
|
|
|
SmartDialog.show(
|
|
|
tag: _tag,
|
|
|
animationType: SmartAnimationType.centerFade_otherSlide,
|
|
|
alignment: Alignment.bottomCenter,
|
|
|
keepSingle: true,
|
|
|
builder: (_) {
|
|
|
- return SelectMessageReminderDateView(selectWeekDays);
|
|
|
+ return SelectMessageReminderDateView(selectWeekDays, onSelected);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
static void hide() {
|
|
|
SmartDialog.dismiss(tag: _tag);
|
|
|
}
|
|
|
+
|
|
|
+ static String convertString(List<int> weekDays) {
|
|
|
+ //如果weekDays = 7天则返回每天
|
|
|
+ if (weekDays.length == 7) {
|
|
|
+ return '每天';
|
|
|
+ }
|
|
|
+ //如果不是则返回周一/周三/周四/周五/周六/周日 这样
|
|
|
+ List<String> dayNames = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
|
|
|
+ List<String> selectedDayNames = [];
|
|
|
+ for (var day in weekDays) {
|
|
|
+ if (day >= 1 && day <= 7) {
|
|
|
+ selectedDayNames.add(dayNames[day - 1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return selectedDayNames.join('/');
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
-class SelectMessageReminderDateView extends StatelessWidget {
|
|
|
+class SelectMessageReminderDateView extends StatefulWidget {
|
|
|
final List<int>? selectWeekDays;
|
|
|
+ final void Function(List<int>)? onSelected;
|
|
|
+
|
|
|
+ const SelectMessageReminderDateView(this.selectWeekDays, this.onSelected,
|
|
|
+ {super.key});
|
|
|
+
|
|
|
+ @override
|
|
|
+ State<SelectMessageReminderDateView> createState() =>
|
|
|
+ _SelectMessageReminderDateViewState();
|
|
|
+}
|
|
|
|
|
|
- const SelectMessageReminderDateView(this.selectWeekDays, {super.key});
|
|
|
+class _SelectMessageReminderDateViewState
|
|
|
+ extends State<SelectMessageReminderDateView> {
|
|
|
+ late List<int> _selectedWeekDays;
|
|
|
+
|
|
|
+ @override
|
|
|
+ void initState() {
|
|
|
+ super.initState();
|
|
|
+ // 传入的1=周一, 2=周二, ..., 7=周日,内部用0=周日, 1=周一...
|
|
|
+ if (widget.selectWeekDays != null) {
|
|
|
+ _selectedWeekDays = widget.selectWeekDays!
|
|
|
+ .where((d) => d >= 1 && d <= 7)
|
|
|
+ .map((d) => d % 7) // 1=>1, 2=>2, ..., 7=>0
|
|
|
+ .toList();
|
|
|
+ } else {
|
|
|
+ _selectedWeekDays = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
@@ -65,7 +107,14 @@ class SelectMessageReminderDateView extends StatelessWidget {
|
|
|
}
|
|
|
|
|
|
Widget buildDateView() {
|
|
|
- return WeekdaySelector();
|
|
|
+ return WeekdaySelector(
|
|
|
+ initialSelected: _selectedWeekDays,
|
|
|
+ onChanged: (selected) {
|
|
|
+ setState(() {
|
|
|
+ _selectedWeekDays = selected;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
Widget buildSelectBtnView() {
|
|
|
@@ -116,17 +165,43 @@ class SelectMessageReminderDateView extends StatelessWidget {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- void onSureClick() {}
|
|
|
+ void onSureClick() {
|
|
|
+ // 返回时将0=周日, 1=周一... 转换为1=周一, ..., 7=周日 并将7放到最后
|
|
|
+ List<int> result = _selectedWeekDays.map((d) => d == 0 ? 7 : d).toList();
|
|
|
+ result.sort((a, b) {
|
|
|
+ if (a == 7 && b != 7) return 1;
|
|
|
+ if (a != 7 && b == 7) return -1;
|
|
|
+ return a.compareTo(b);
|
|
|
+ });
|
|
|
+ widget.onSelected?.call(result);
|
|
|
+ SelectMessageReminderDateDialog.hide();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
class WeekdaySelector extends StatefulWidget {
|
|
|
+ final List<int>? initialSelected;
|
|
|
+ final ValueChanged<List<int>>? onChanged;
|
|
|
+
|
|
|
+ const WeekdaySelector({this.initialSelected, this.onChanged, super.key});
|
|
|
+
|
|
|
@override
|
|
|
_WeekdaySelectorState createState() => _WeekdaySelectorState();
|
|
|
}
|
|
|
|
|
|
class _WeekdaySelectorState extends State<WeekdaySelector> {
|
|
|
final List<String> days = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
|
|
|
- List<bool> selected = List.filled(7, false); // 保存勾选状态
|
|
|
+ late List<bool> selected;
|
|
|
+
|
|
|
+ @override
|
|
|
+ void initState() {
|
|
|
+ super.initState();
|
|
|
+ selected = List.filled(7, false);
|
|
|
+ if (widget.initialSelected != null) {
|
|
|
+ for (var i in widget.initialSelected!) {
|
|
|
+ if (i >= 0 && i < 7) selected[i] = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
@@ -139,6 +214,7 @@ class _WeekdaySelectorState extends State<WeekdaySelector> {
|
|
|
onTap: () {
|
|
|
setState(() {
|
|
|
selected[index] = !selected[index];
|
|
|
+ widget.onChanged?.call(_getSelectedIndexes());
|
|
|
});
|
|
|
},
|
|
|
child: Container(
|
|
|
@@ -169,4 +245,12 @@ class _WeekdaySelectorState extends State<WeekdaySelector> {
|
|
|
}),
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ List<int> _getSelectedIndexes() {
|
|
|
+ List<int> result = [];
|
|
|
+ for (int i = 0; i < selected.length; i++) {
|
|
|
+ if (selected[i]) result.add(i);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|