import 'package:flutter/material.dart'; import 'package:localstore/localstore.dart'; class AppTheme { ThemeMode mode; AppTheme(this.mode); String get name { if (mode == ThemeMode.light) { return 'Light'; } if (mode == ThemeMode.dark) { return 'Dark'; } return 'System'; } IconData get icon { if (mode == ThemeMode.light) { return Icons.light_mode; } if (mode == ThemeMode.dark) { return Icons.dark_mode; } return Icons.brightness_auto; } static get auto { return AppTheme(ThemeMode.system); } static get light { return AppTheme(ThemeMode.light); } static get dark { return AppTheme(ThemeMode.dark); } static List list() { return [AppTheme.auto, AppTheme.light, AppTheme.dark]; } static listen(Function(Map) cb) { final db = Localstore.instance; final stream = db.collection('settings').stream; stream.listen(cb); } Future toDisk() async { final db = Localstore.instance; await db.collection('settings').doc('ui').set({'theme': mode.index}); } static Future fromDisk() async { final db = Localstore.instance; final doc = await db.collection('settings').doc('ui').get(); try { final index = doc?['theme']; final mode = ThemeMode.values[index]; return AppTheme(mode); } catch (_) { return AppTheme(ThemeMode.system); } } @override bool operator ==(other) { if (other.runtimeType == runtimeType) { if (other.hashCode == hashCode) { return true; } } return false; } @override int get hashCode => mode.index; }