fix: Use category color from DB when editing

This commit is contained in:
2025-05-08 23:56:53 +03:00
parent 184cc82469
commit 3545dfacd7
@@ -34,12 +34,19 @@ class _EditCategoryDialogState extends State<EditCategoryDialog> {
if (_selectedIconName == null || !CategoryUtils.getAvailableIcons().containsKey(_selectedIconName)) {
_selectedIconName = CategoryUtils.getAvailableIcons().keys.first;
}
// Ensure the initial color exists in the available list, otherwise pick the first
// Инициализируем цвет из существующей категории при редактировании
_selectedColor = widget.categoryToEdit != null ? Color(widget.categoryToEdit!.color) : null;
if (_selectedColor == null || !CategoryUtils.availableColors.contains(_selectedColor)) {
_selectedColor = CategoryUtils.availableColors.first;
// Инициализируем цвет.
// Если редактируем существующую категорию, используем ее цвет из БД.
// Если добавляем новую, используем первый цвет из доступных.
if (_isEditing) {
_selectedColor = Color(widget.categoryToEdit!.color);
} else {
_selectedColor = CategoryUtils.availableColors.first;
}
// Убедимся, что _selectedColor не null после инициализации
// (это должно быть гарантировано логикой выше, но для безопасности)
_selectedColor ??= CategoryUtils.availableColors.first;
}
@override
@@ -137,6 +144,16 @@ class _EditCategoryDialogState extends State<EditCategoryDialog> {
final isDark = theme.brightness == Brightness.dark;
final availableIcons = CategoryUtils.getAvailableIcons(); // Get filtered icons
// Объединяем цвет текущей категории (если редактируем) с доступными цветами
// для отображения в палитре. Это нужно, чтобы текущий цвет был виден,
// даже если его нет в стандартном списке.
final List<Color> displayedColors = List.from(CategoryUtils.availableColors);
if (_isEditing && _selectedColor != null && !CategoryUtils.availableColors.contains(_selectedColor)) {
// Добавляем цвет текущей категории в начало списка для отображения
displayedColors.insert(0, _selectedColor!);
}
return AlertDialog(
title: Text(_isEditing ? 'Редактировать категорию' : 'Добавить категорию'),
contentPadding: const EdgeInsets.fromLTRB(24.0, 20.0, 24.0, 0.0), // Adjust padding
@@ -212,7 +229,7 @@ class _EditCategoryDialogState extends State<EditCategoryDialog> {
Wrap( // Используем Wrap для отображения цветов в несколько рядов
spacing: 10.0, // Горизонтальный отступ
runSpacing: 10.0, // Вертикальный отступ
children: CategoryUtils.availableColors.map((color) {
children: displayedColors.map((color) { // Используем объединенный список цветов
final isSelected = _selectedColor == color;
return GestureDetector(
onTap: () {