MoodCanvas/lib/providers/editor_provider.dart
fengshengxiong 91b7eebbf2 接入TopON
2026-01-22 16:34:55 +08:00

90 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:aesthetica_wallpaper/models/recipe.dart';
// EditorProvider 持有当前编辑器的所有状态
class EditorProvider with ChangeNotifier {
// 从一个空白的 Recipe 开始
Recipe _currentRecipe = Recipe(id: '', baseImagePath: '');
// 获取当前状态的 getter
Recipe get currentRecipe => _currentRecipe;
// 动态模拟器状态
bool _isTimeAware = false;
bool get isTimeAware => _isTimeAware;
bool _isBatteryAware = false;
get isBatteryAware => _isBatteryAware;
// 当进入编辑器时,重置或加载一个新的 Recipe
void startEditing(String baseImagePath) {
_currentRecipe = Recipe(
id: DateTime.now().millisecondsSinceEpoch.toString(),
baseImagePath: baseImagePath,
);
// 重置动态开关
_isTimeAware = false;
_isBatteryAware = false;
notifyListeners();
}
// 当从"我的配方"加载时
void loadFromRecipe(Recipe recipe) {
_currentRecipe = recipe;
notifyListeners();
}
// 更新各种参数的方法
// 每个方法都会更新值并通知监听器 (UI) 重建
void setBrightness(double value) {
_currentRecipe = _currentRecipe.copyWith(brightness: value);
notifyListeners();
}
void setContrast(double value) {
_currentRecipe = _currentRecipe.copyWith(contrast: value);
notifyListeners();
}
void setSaturation(double value) {
_currentRecipe = _currentRecipe.copyWith(saturation: value);
notifyListeners();
}
void setBlur(double value) {
_currentRecipe = _currentRecipe.copyWith(blur: value);
notifyListeners();
}
void setPixelate(double value) {
_currentRecipe = _currentRecipe.copyWith(pixelate: value);
notifyListeners();
}
void setText(String text) {
_currentRecipe = _currentRecipe.copyWith(overlayText: text);
notifyListeners();
}
void setFont(String font) {
_currentRecipe = _currentRecipe.copyWith(fontFamily: font);
notifyListeners();
}
void setTextColor(Color color) {
_currentRecipe = _currentRecipe.copyWith(textColor: color.toARGB32());
notifyListeners();
}
void setTimeAware(bool value) {
_isTimeAware = value;
notifyListeners();
}
void setBatteryAware(bool value) {
_isBatteryAware = value;
notifyListeners();
}
}