152 lines
4.6 KiB
Dart
152 lines
4.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
|
import "package:universal_html/html.dart" as html;
|
|
|
|
class MihTheme {
|
|
late String mode;
|
|
late String screenType;
|
|
late AssetImage loading;
|
|
late String loadingAssetText;
|
|
late TargetPlatform platform;
|
|
bool kIsWeb = const bool.fromEnvironment('dart.library.js_util');
|
|
String latestVersion = "1.2.6";
|
|
MihTheme() {
|
|
mode = "Dark";
|
|
}
|
|
|
|
ThemeData getData(bool bool) {
|
|
return ThemeData(
|
|
fontFamily: 'Segoe UI',
|
|
scaffoldBackgroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
colorScheme: ColorScheme(
|
|
brightness: getBritness(),
|
|
primary: MihColors.getSecondaryColor(mode == "Dark"),
|
|
onPrimary: MihColors.getPrimaryColor(mode == "Dark"),
|
|
secondary: MihColors.getPrimaryColor(mode == "Dark"),
|
|
onSecondary: MihColors.getSecondaryColor(mode == "Dark"),
|
|
error: MihColors.getRedColor(mode == "Dark"),
|
|
onError: MihColors.getPrimaryColor(mode == "Dark"),
|
|
surface: MihColors.getPrimaryColor(mode == "Dark"),
|
|
onSurface: MihColors.getSecondaryColor(mode == "Dark"),
|
|
),
|
|
datePickerTheme: DatePickerThemeData(
|
|
backgroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
headerBackgroundColor: MihColors.getSecondaryColor(mode == "Dark"),
|
|
headerForegroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
),
|
|
appBarTheme: AppBarTheme(
|
|
color: MihColors.getSecondaryColor(mode == "Dark"),
|
|
foregroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
titleTextStyle: TextStyle(
|
|
color: MihColors.getPrimaryColor(mode == "Dark"),
|
|
fontSize: 25,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
|
backgroundColor: MihColors.getSecondaryColor(mode == "Dark"),
|
|
foregroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
extendedTextStyle:
|
|
TextStyle(color: MihColors.getPrimaryColor(mode == "Dark")),
|
|
),
|
|
drawerTheme: DrawerThemeData(
|
|
backgroundColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
),
|
|
textSelectionTheme: TextSelectionThemeData(
|
|
cursorColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
selectionColor:
|
|
MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.25),
|
|
selectionHandleColor: MihColors.getPrimaryColor(mode == "Dark"),
|
|
),
|
|
tooltipTheme: TooltipThemeData(
|
|
decoration: BoxDecoration(
|
|
color: MihColors.getSecondaryColor(mode == "Dark"),
|
|
borderRadius: BorderRadius.circular(6),
|
|
border: Border.all(
|
|
width: 1.0,
|
|
color: MihColors.getPrimaryColor(mode == "Dark"),
|
|
),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color:
|
|
MihColors.getPrimaryColor(mode == "Dark").withOpacity(0.18),
|
|
blurRadius: 6,
|
|
offset: const Offset(0, 2),
|
|
),
|
|
],
|
|
),
|
|
textStyle: TextStyle(
|
|
color: MihColors.getPrimaryColor(mode == "Dark"),
|
|
fontSize: 13,
|
|
height: 1.2,
|
|
),
|
|
waitDuration: const Duration(milliseconds: 500),
|
|
showDuration: const Duration(seconds: 3),
|
|
preferBelow: true,
|
|
verticalOffset: 24,
|
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
|
triggerMode: TooltipTriggerMode.longPress,
|
|
),
|
|
);
|
|
}
|
|
|
|
String getPlatform() {
|
|
if (kIsWeb) {
|
|
return "Web";
|
|
} else if (!kIsWeb) {
|
|
if (platform == TargetPlatform.android) {
|
|
return "Android";
|
|
} else if (platform == TargetPlatform.iOS) {
|
|
return "iOS";
|
|
} else if (platform == TargetPlatform.linux) {
|
|
return "Linux";
|
|
} else if (platform == TargetPlatform.macOS) {
|
|
return "macOS";
|
|
} else if (platform == TargetPlatform.windows) {
|
|
return "Windows";
|
|
}
|
|
}
|
|
return "Other";
|
|
}
|
|
|
|
bool isPwa() {
|
|
return html.window.matchMedia('(display-mode: standalone)').matches;
|
|
}
|
|
|
|
void setMode(String m) {
|
|
mode;
|
|
}
|
|
|
|
String getLatestVersion() {
|
|
return latestVersion;
|
|
}
|
|
|
|
ThemeData getThemeData() {
|
|
return getData(mode == "Dark");
|
|
}
|
|
|
|
ThemeData darkMode() {
|
|
return getData(mode == "Dark");
|
|
}
|
|
|
|
ThemeData lightMode() {
|
|
return getData(mode == "Dark");
|
|
}
|
|
|
|
Brightness getBritness() {
|
|
if (mode == "Dark") {
|
|
return Brightness.dark;
|
|
} else {
|
|
return Brightness.light;
|
|
}
|
|
}
|
|
|
|
void setScreenType(double width) {
|
|
if (width <= 800) {
|
|
screenType = "mobile";
|
|
} else {
|
|
screenType = "desktop";
|
|
}
|
|
}
|
|
}
|