mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-10-31 18:15:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flowy_infra/colorscheme/colorscheme.dart';
 | |
| import 'package:flowy_infra/colorscheme/default_colorscheme.dart';
 | |
| import 'plugins/service/plugin_service.dart';
 | |
| 
 | |
| class BuiltInTheme {
 | |
|   static const String defaultTheme = 'Default';
 | |
|   static const String dandelion = 'Dandelion';
 | |
|   static const String lemonade = 'Lemonade';
 | |
|   static const String lavender = 'Lavender';
 | |
| }
 | |
| 
 | |
| class AppTheme {
 | |
|   // metadata member
 | |
|   final bool builtIn;
 | |
|   final String themeName;
 | |
|   final FlowyColorScheme lightTheme;
 | |
|   final FlowyColorScheme darkTheme;
 | |
|   // static final Map<String, dynamic> _cachedJsonData = {};
 | |
| 
 | |
|   const AppTheme({
 | |
|     required this.builtIn,
 | |
|     required this.themeName,
 | |
|     required this.lightTheme,
 | |
|     required this.darkTheme,
 | |
|   });
 | |
| 
 | |
|   static const AppTheme fallback = AppTheme(
 | |
|     builtIn: true,
 | |
|     themeName: BuiltInTheme.defaultTheme,
 | |
|     lightTheme: DefaultColorScheme.light(),
 | |
|     darkTheme: DefaultColorScheme.dark(),
 | |
|   );
 | |
| 
 | |
|   static Future<Iterable<AppTheme>> _plugins(FlowyPluginService service) async {
 | |
|     final plugins = await service.plugins;
 | |
|     return plugins.map((plugin) => plugin.theme).whereType<AppTheme>();
 | |
|   }
 | |
| 
 | |
|   static Iterable<AppTheme> get builtins => themeMap.entries
 | |
|       .map(
 | |
|         (entry) => AppTheme(
 | |
|           builtIn: true,
 | |
|           themeName: entry.key,
 | |
|           lightTheme: entry.value[0],
 | |
|           darkTheme: entry.value[1],
 | |
|         ),
 | |
|       )
 | |
|       .toList();
 | |
| 
 | |
|   static Future<Iterable<AppTheme>> themes(FlowyPluginService service) async =>
 | |
|       [
 | |
|         ...builtins,
 | |
|         ...(await _plugins(service)),
 | |
|       ];
 | |
| 
 | |
|   static Future<AppTheme> fromName(
 | |
|     String themeName, {
 | |
|     FlowyPluginService? pluginService,
 | |
|   }) async {
 | |
|     pluginService ??= FlowyPluginService.instance;
 | |
|     for (final theme in await themes(pluginService)) {
 | |
|       if (theme.themeName == themeName) {
 | |
|         return theme;
 | |
|       }
 | |
|     }
 | |
|     throw ArgumentError('The theme $themeName does not exist.');
 | |
|   }
 | |
| }
 | 
