马良AI写作初始化仓库

This commit is contained in:
邓滨杰
2025-09-10 00:07:52 +08:00
parent 3c06bb1a03
commit 39c0f8840f
1309 changed files with 318528 additions and 0 deletions

View File

@@ -0,0 +1,240 @@
import 'package:equatable/equatable.dart';
import 'package:ainoval/models/preset_models.dart';
/// 预设管理状态
class PresetState extends Equatable {
/// 是否正在加载
final bool isLoading;
/// 错误信息
final String? errorMessage;
/// 用户预设概览
final UserPresetOverview? userOverview;
/// 当前预设包
final PresetPackage? currentPackage;
/// 批量预设包
final Map<String, PresetPackage> batchPackages;
/// 按功能类型分组的预设
final Map<String, List<AIPromptPreset>> groupedPresets;
/// 当前选中的预设
final AIPromptPreset? selectedPreset;
/// 搜索结果
final List<AIPromptPreset> searchResults;
/// 搜索查询
final String searchQuery;
/// 预设统计信息
final PresetStatistics? statistics;
/// 收藏预设列表
final List<AIPromptPreset> favoritePresets;
/// 最近使用预设列表
final List<AIPromptPreset> recentlyUsedPresets;
/// 快捷访问预设列表
final List<AIPromptPreset> quickAccessPresets;
/// 缓存预热结果
final CacheWarmupResult? warmupResult;
/// 缓存统计信息
final AggregationCacheStats? cacheStats;
/// 健康检查结果
final Map<String, dynamic>? healthStatus;
/// 🚀 所有预设聚合数据
final AllUserPresetData? allPresetData;
const PresetState({
this.isLoading = false,
this.errorMessage,
this.userOverview,
this.currentPackage,
this.batchPackages = const {},
this.groupedPresets = const {},
this.selectedPreset,
this.searchResults = const [],
this.searchQuery = '',
this.statistics,
this.favoritePresets = const [],
this.recentlyUsedPresets = const [],
this.quickAccessPresets = const [],
this.warmupResult,
this.cacheStats,
this.healthStatus,
this.allPresetData,
});
/// 初始状态
const PresetState.initial() : this();
/// 加载状态
PresetState.loading() : this(isLoading: true);
/// 错误状态
PresetState.error(String message) : this(errorMessage: message);
/// 复制状态并更新指定字段
PresetState copyWith({
bool? isLoading,
String? errorMessage,
UserPresetOverview? userOverview,
PresetPackage? currentPackage,
Map<String, PresetPackage>? batchPackages,
Map<String, List<AIPromptPreset>>? groupedPresets,
AIPromptPreset? selectedPreset,
List<AIPromptPreset>? searchResults,
String? searchQuery,
PresetStatistics? statistics,
List<AIPromptPreset>? favoritePresets,
List<AIPromptPreset>? recentlyUsedPresets,
List<AIPromptPreset>? quickAccessPresets,
CacheWarmupResult? warmupResult,
AggregationCacheStats? cacheStats,
Map<String, dynamic>? healthStatus,
AllUserPresetData? allPresetData,
}) {
return PresetState(
isLoading: isLoading ?? this.isLoading,
errorMessage: errorMessage,
userOverview: userOverview ?? this.userOverview,
currentPackage: currentPackage ?? this.currentPackage,
batchPackages: batchPackages ?? this.batchPackages,
groupedPresets: groupedPresets ?? this.groupedPresets,
selectedPreset: selectedPreset,
searchResults: searchResults ?? this.searchResults,
searchQuery: searchQuery ?? this.searchQuery,
statistics: statistics ?? this.statistics,
favoritePresets: favoritePresets ?? this.favoritePresets,
recentlyUsedPresets: recentlyUsedPresets ?? this.recentlyUsedPresets,
quickAccessPresets: quickAccessPresets ?? this.quickAccessPresets,
warmupResult: warmupResult ?? this.warmupResult,
cacheStats: cacheStats ?? this.cacheStats,
healthStatus: healthStatus ?? this.healthStatus,
allPresetData: allPresetData ?? this.allPresetData,
);
}
/// 是否有数据
bool get hasData {
return userOverview != null ||
currentPackage != null ||
batchPackages.isNotEmpty ||
groupedPresets.isNotEmpty ||
searchResults.isNotEmpty;
}
/// 是否有错误
bool get hasError => errorMessage != null;
/// 是否有选中的预设
bool get hasSelectedPreset => selectedPreset != null;
/// 是否正在搜索
bool get isSearching => searchQuery.isNotEmpty;
/// 获取所有预设的总数
int get totalPresetCount {
return groupedPresets.values.fold(0, (sum, presets) => sum + presets.length);
}
/// 获取用户预设数量
int get userPresetCount {
return groupedPresets.values
.expand((presets) => presets)
.where((preset) => !preset.isSystem)
.length;
}
/// 获取系统预设数量
int get systemPresetCount {
return groupedPresets.values
.expand((presets) => presets)
.where((preset) => preset.isSystem)
.length;
}
/// 获取收藏预设数量
int get favoritePresetCount {
return groupedPresets.values
.expand((presets) => presets)
.where((preset) => preset.isFavorite)
.length;
}
/// 获取快捷访问预设数量
int get quickAccessPresetCount {
return groupedPresets.values
.expand((presets) => presets)
.where((preset) => preset.showInQuickAccess)
.length;
}
/// 获取指定功能类型的预设列表
List<AIPromptPreset> getPresetsByFeatureType(String featureType) {
return groupedPresets[featureType] ?? [];
}
/// 获取所有预设的平铺列表
List<AIPromptPreset> get allPresets {
return groupedPresets.values.expand((presets) => presets).toList();
}
/// 🚀 获取合并后的分组预设(系统预设+用户预设,按功能分组)
/// 优先使用allPresetData中的合并数据如果没有则使用旧的groupedPresets
Map<String, List<AIPromptPreset>> get mergedGroupedPresets {
if (allPresetData != null) {
return allPresetData!.mergedGroupedPresets;
}
return groupedPresets;
}
/// 是否已加载聚合数据
bool get hasAllPresetData => allPresetData != null;
@override
List<Object?> get props => [
isLoading,
errorMessage,
userOverview,
currentPackage,
batchPackages,
groupedPresets,
selectedPreset,
searchResults,
searchQuery,
statistics,
favoritePresets,
recentlyUsedPresets,
quickAccessPresets,
warmupResult,
cacheStats,
healthStatus,
allPresetData,
];
@override
String toString() {
return '''PresetState(
isLoading: $isLoading,
hasError: $hasError,
hasData: $hasData,
totalPresets: $totalPresetCount,
userPresets: $userPresetCount,
systemPresets: $systemPresetCount,
favoritePresets: $favoritePresetCount,
quickAccessPresets: $quickAccessPresetCount,
selectedPreset: ${selectedPreset?.presetName ?? 'null'},
searchQuery: '$searchQuery',
)''';
}
}