import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/immich_colors.dart'; import 'package:immich_mobile/modules/settings/providers/app_settings.provider.dart'; import 'package:immich_mobile/modules/settings/services/app_settings.service.dart'; final immichThemeProvider = StateProvider((ref) { var themeMode = ref .watch(appSettingsServiceProvider) .getSetting(AppSettingsEnum.themeMode); debugPrint("Current themeMode $themeMode"); if (themeMode == "light") { return ThemeMode.light; } else if (themeMode == "dark") { return ThemeMode.dark; } else { return ThemeMode.system; } }); final ThemeData base = ThemeData( chipTheme: const ChipThemeData( side: BorderSide.none, ), sliderTheme: const SliderThemeData( thumbShape: RoundSliderThumbShape(enabledThumbRadius: 7), trackHeight: 2.0, ), ); final ThemeData immichLightTheme = ThemeData( useMaterial3: true, brightness: Brightness.light, primarySwatch: Colors.indigo, primaryColor: Colors.indigo, hintColor: Colors.indigo, focusColor: Colors.indigo, splashColor: Colors.indigo.withOpacity(0.15), fontFamily: 'BeVietnamPro', scaffoldBackgroundColor: immichBackgroundColor, snackBarTheme: const SnackBarThemeData( contentTextStyle: TextStyle( fontFamily: 'BeVietnamPro', color: Colors.indigo, fontWeight: FontWeight.bold, ), backgroundColor: Colors.white, ), appBarTheme: const AppBarTheme( titleTextStyle: TextStyle( fontFamily: 'BeVietnamPro', color: Colors.indigo, fontWeight: FontWeight.w500, fontSize: 18, ), backgroundColor: immichBackgroundColor, foregroundColor: Colors.indigo, elevation: 0, scrolledUnderElevation: 0, centerTitle: true, ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( type: BottomNavigationBarType.fixed, backgroundColor: immichBackgroundColor, selectedItemColor: Colors.indigo, ), cardTheme: const CardTheme( surfaceTintColor: Colors.transparent, ), drawerTheme: const DrawerThemeData( backgroundColor: immichBackgroundColor, ), // textTheme: const TextTheme( // displayLarge: TextStyle( // fontSize: 26, // fontWeight: FontWeight.bold, // color: Colors.indigo, // ), // displayMedium: TextStyle( // fontSize: 14, // fontWeight: FontWeight.bold, // color: Colors.black87, // ), // displaySmall: TextStyle( // fontSize: 12, // fontWeight: FontWeight.bold, // color: Colors.indigo, // ), // titleSmall: TextStyle( // fontSize: 16.0, // fontWeight: FontWeight.bold, // ), // titleMedium: TextStyle( // fontSize: 18.0, // fontWeight: FontWeight.bold, // ), // titleLarge: TextStyle( // fontSize: 26.0, // fontWeight: FontWeight.bold, // ), // ), elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: Colors.indigo, foregroundColor: Colors.white, ), ), chipTheme: base.chipTheme, sliderTheme: base.sliderTheme, popupMenuTheme: const PopupMenuThemeData( shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), surfaceTintColor: Colors.transparent, color: Colors.white, ), navigationBarTheme: NavigationBarThemeData( indicatorColor: Colors.indigo.withOpacity(0.15), iconTheme: MaterialStatePropertyAll( IconThemeData(color: Colors.grey[700]), ), backgroundColor: immichBackgroundColor, surfaceTintColor: Colors.transparent, labelTextStyle: MaterialStatePropertyAll( TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: Colors.grey[800], ), ), ), dialogTheme: const DialogTheme( surfaceTintColor: Colors.transparent, ), inputDecorationTheme: const InputDecorationTheme( focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.indigo, ), ), labelStyle: TextStyle( color: Colors.indigo, ), hintStyle: TextStyle( fontSize: 14.0, fontWeight: FontWeight.normal, ), ), textSelectionTheme: const TextSelectionThemeData( cursorColor: Colors.indigo, ), ); final ThemeData immichDarkTheme = ThemeData( useMaterial3: true, brightness: Brightness.dark, primarySwatch: Colors.indigo, primaryColor: immichDarkThemePrimaryColor, scaffoldBackgroundColor: immichDarkBackgroundColor, hintColor: Colors.grey[600], fontFamily: 'BeVietnamPro', snackBarTheme: SnackBarThemeData( contentTextStyle: const TextStyle( fontFamily: 'BeVietnamPro', color: immichDarkThemePrimaryColor, fontWeight: FontWeight.bold, ), backgroundColor: Colors.grey[900], ), textButtonTheme: TextButtonThemeData( style: TextButton.styleFrom( foregroundColor: immichDarkThemePrimaryColor, ), ), appBarTheme: const AppBarTheme( titleTextStyle: TextStyle( fontFamily: 'BeVietnamPro', color: immichDarkThemePrimaryColor, fontWeight: FontWeight.w500, fontSize: 18, ), backgroundColor: Color.fromARGB(255, 32, 33, 35), foregroundColor: immichDarkThemePrimaryColor, elevation: 0, scrolledUnderElevation: 0, centerTitle: true, ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( type: BottomNavigationBarType.fixed, backgroundColor: Color.fromARGB(255, 35, 36, 37), selectedItemColor: immichDarkThemePrimaryColor, ), drawerTheme: DrawerThemeData( backgroundColor: immichDarkBackgroundColor, scrimColor: Colors.white.withOpacity(0.1), ), // textTheme: const TextTheme( // displayLarge: TextStyle( // fontSize: 26, // fontWeight: FontWeight.bold, // color: Color.fromARGB(255, 255, 255, 255), // ), // displayMedium: TextStyle( // fontSize: 14, // fontWeight: FontWeight.bold, // color: Color.fromARGB(255, 255, 255, 255), // ), // displaySmall: TextStyle( // fontSize: 12, // fontWeight: FontWeight.bold, // color: immichDarkThemePrimaryColor, // ), // titleSmall: TextStyle( // fontSize: 16.0, // fontWeight: FontWeight.bold, // ), // titleMedium: TextStyle( // fontSize: 18.0, // fontWeight: FontWeight.bold, // ), // titleLarge: TextStyle( // fontSize: 26.0, // fontWeight: FontWeight.bold, // ), // ), cardColor: Colors.grey[900], elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( foregroundColor: Colors.black87, backgroundColor: immichDarkThemePrimaryColor, ), ), chipTheme: base.chipTheme, sliderTheme: base.sliderTheme, popupMenuTheme: const PopupMenuThemeData( shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10)), ), surfaceTintColor: Colors.transparent, ), navigationBarTheme: NavigationBarThemeData( indicatorColor: immichDarkThemePrimaryColor.withOpacity(0.4), iconTheme: MaterialStatePropertyAll( IconThemeData(color: Colors.grey[500]), ), backgroundColor: Colors.grey[900], surfaceTintColor: Colors.transparent, labelTextStyle: MaterialStatePropertyAll( TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: Colors.grey[300], ), ), ), dialogTheme: const DialogTheme( surfaceTintColor: Colors.transparent, ), inputDecorationTheme: const InputDecorationTheme( focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: immichDarkThemePrimaryColor, ), ), labelStyle: TextStyle( color: immichDarkThemePrimaryColor, ), hintStyle: TextStyle( fontSize: 14.0, fontWeight: FontWeight.normal, ), ), textSelectionTheme: const TextSelectionThemeData( cursorColor: immichDarkThemePrimaryColor, ), );