299 lines
10 KiB
Dart
299 lines
10 KiB
Dart
// ignore_for_file: prefer_const_constructors
|
|
|
|
/*
|
|
* File : App Theme
|
|
* Version : 1.0.0
|
|
* */
|
|
import 'dart:io';
|
|
import 'dart:math';
|
|
import 'package:marco/helpers/theme/admin_theme.dart';
|
|
import 'package:marco/helpers/theme/theme_customizer.dart';
|
|
import 'package:marco/helpers/widgets/my.dart';
|
|
import 'package:marco/helpers/widgets/my_breadcrumb_item.dart';
|
|
import 'package:marco/helpers/widgets/my_constant.dart';
|
|
import 'package:marco/helpers/widgets/my_screen_media.dart';
|
|
import 'package:marco/helpers/widgets/my_text_style.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
ThemeData get theme => AppTheme.theme;
|
|
|
|
double get flexSpacing => MyScreenMedia.flexSpacing;
|
|
|
|
int get flexColumns => MyScreenMedia.flexColumns;
|
|
|
|
class MaterialRadius {
|
|
double xs, small, medium, large;
|
|
|
|
MaterialRadius({this.xs = 2, this.small = 4, this.medium = 6, this.large = 8});
|
|
}
|
|
|
|
class ColorGroup {
|
|
final Color color, onColor;
|
|
|
|
ColorGroup(this.color, this.onColor);
|
|
}
|
|
|
|
class AppTheme {
|
|
static ThemeData theme = AppTheme.getThemeFromThemeMode();
|
|
static TextDirection textDirection = TextDirection.ltr;
|
|
|
|
static Color primaryColor = Color(0xff663399);
|
|
|
|
static ThemeData getThemeFromThemeMode() {
|
|
return ThemeCustomizer.instance.theme == ThemeMode.light ? lightTheme : darkTheme;
|
|
}
|
|
|
|
/// -------------------------- Light Theme -------------------------------------------- ///
|
|
|
|
static final ThemeData lightTheme = ThemeData(
|
|
/// Brightness
|
|
brightness: Brightness.light,
|
|
useMaterial3: false,
|
|
|
|
/// Primary Color
|
|
primaryColor: AppTheme.primaryColor,
|
|
|
|
/// Scaffold and Background color
|
|
scaffoldBackgroundColor: Color(0xffF5F5F5),
|
|
canvasColor: Colors.transparent,
|
|
|
|
/// AppBar Theme
|
|
appBarTheme: AppBarTheme(
|
|
backgroundColor: Color(0xffF5F5F5), iconTheme: IconThemeData(color: Color(0xff495057)), actionsIconTheme: IconThemeData(color: Color(0xff495057))),
|
|
|
|
/// Card Theme
|
|
cardTheme: CardTheme(color: Color(0xffffffff)),
|
|
cardColor: Color(0xffffffff),
|
|
|
|
/// Colorscheme
|
|
colorScheme: ColorScheme.fromSeed(seedColor: Color(0xff663399), brightness: Brightness.light),
|
|
|
|
snackBarTheme: SnackBarThemeData(actionTextColor: Colors.white),
|
|
|
|
/// Floating Action Theme
|
|
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
|
backgroundColor: AppTheme.primaryColor,
|
|
splashColor: Color(0xffeeeeee).withAlpha(100),
|
|
highlightElevation: 8,
|
|
elevation: 4,
|
|
focusColor: AppTheme.primaryColor,
|
|
hoverColor: AppTheme.primaryColor,
|
|
foregroundColor: Color(0xffeeeeee)),
|
|
|
|
/// Divider Theme
|
|
dividerTheme: DividerThemeData(color: Color(0xffdddddd), thickness: 1),
|
|
dividerColor: Color(0xffdddddd),
|
|
|
|
/// Bottom AppBar Theme
|
|
bottomAppBarTheme: BottomAppBarTheme(color: Color(0xffeeeeee), elevation: 2),
|
|
|
|
/// Tab bar Theme
|
|
tabBarTheme: TabBarTheme(
|
|
unselectedLabelColor: Color(0xff495057),
|
|
labelColor: AppTheme.primaryColor,
|
|
indicatorSize: TabBarIndicatorSize.label,
|
|
indicator: UnderlineTabIndicator(
|
|
borderSide: BorderSide(color: AppTheme.primaryColor, width: 2.0),
|
|
),
|
|
),
|
|
|
|
inputDecorationTheme: InputDecorationTheme(),
|
|
|
|
/// Slider Theme
|
|
sliderTheme: SliderThemeData(
|
|
activeTrackColor: AppTheme.primaryColor,
|
|
inactiveTrackColor: AppTheme.primaryColor.withAlpha(140),
|
|
trackShape: RoundedRectSliderTrackShape(),
|
|
trackHeight: 4.0,
|
|
thumbColor: AppTheme.primaryColor,
|
|
thumbShape: RoundSliderThumbShape(enabledThumbRadius: 10.0),
|
|
overlayShape: RoundSliderOverlayShape(overlayRadius: 24.0),
|
|
tickMarkShape: RoundSliderTickMarkShape(),
|
|
inactiveTickMarkColor: Colors.red[100],
|
|
valueIndicatorShape: PaddleSliderValueIndicatorShape(),
|
|
valueIndicatorTextStyle: TextStyle(
|
|
color: Color(0xffeeeeee),
|
|
),
|
|
),
|
|
checkboxTheme: CheckboxThemeData(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(2),
|
|
),
|
|
checkColor: WidgetStateProperty.all(Color(0xffffffff)),
|
|
fillColor: WidgetStateProperty.all(AppTheme.primaryColor),
|
|
),
|
|
switchTheme:
|
|
SwitchThemeData(thumbColor: WidgetStateProperty.resolveWith((states) => states.contains(WidgetState.selected) ? AppTheme.primaryColor : Colors.white)),
|
|
|
|
/// Other Colors
|
|
splashColor: Colors.white.withAlpha(100),
|
|
indicatorColor: Color(0xffeeeeee),
|
|
highlightColor: Color(0xffeeeeee),
|
|
);
|
|
|
|
/// -------------------------- Dark Theme -------------------------------------------- ///
|
|
static final ThemeData darkTheme = ThemeData.dark(useMaterial3: false).copyWith(
|
|
/// Brightness
|
|
|
|
/// Scaffold and Background color
|
|
scaffoldBackgroundColor: Color(0xff262729),
|
|
canvasColor: Colors.transparent,
|
|
|
|
primaryColor: Color(0xff32BFAE),
|
|
|
|
/// AppBar Theme
|
|
appBarTheme: AppBarTheme(backgroundColor: Color(0xff262729)),
|
|
|
|
/// Card Theme
|
|
cardTheme: CardTheme(color: Color(0xff1b1b1c)),
|
|
cardColor: Color(0xff1b1b1c),
|
|
|
|
/// Colorscheme
|
|
colorScheme: ColorScheme.fromSeed(
|
|
seedColor: Color(0xff32BFAE),
|
|
surface: Color(0xff262729),
|
|
onSurface: Color(0xFFD7D7D7),
|
|
brightness: Brightness.dark,
|
|
),
|
|
|
|
/// Input (Text-Field) Theme
|
|
inputDecorationTheme: InputDecorationTheme(),
|
|
|
|
/// Divider Color
|
|
dividerTheme: DividerThemeData(color: Color(0xff393A41), thickness: 1),
|
|
dividerColor: Color(0xff393A41),
|
|
|
|
/// Floating Action Theme
|
|
floatingActionButtonTheme: FloatingActionButtonThemeData(
|
|
backgroundColor: AppTheme.primaryColor,
|
|
splashColor: Colors.white.withAlpha(100),
|
|
highlightElevation: 8,
|
|
elevation: 4,
|
|
focusColor: AppTheme.primaryColor,
|
|
hoverColor: AppTheme.primaryColor,
|
|
foregroundColor: Colors.white),
|
|
|
|
/// Bottom AppBar Theme
|
|
bottomAppBarTheme: BottomAppBarTheme(color: Color(0xff464c52), elevation: 2),
|
|
|
|
/// Tab bar Theme
|
|
tabBarTheme: TabBarTheme(
|
|
unselectedLabelColor: Color(0xff495057),
|
|
labelColor: AppTheme.primaryColor,
|
|
indicatorSize: TabBarIndicatorSize.label,
|
|
indicator: UnderlineTabIndicator(
|
|
borderSide: BorderSide(color: AppTheme.primaryColor, width: 2.0),
|
|
),
|
|
),
|
|
|
|
/// Slider Theme
|
|
sliderTheme: SliderThemeData(
|
|
activeTrackColor: AppTheme.primaryColor,
|
|
inactiveTrackColor: AppTheme.primaryColor.withAlpha(100),
|
|
trackShape: RoundedRectSliderTrackShape(),
|
|
trackHeight: 4.0,
|
|
thumbColor: AppTheme.primaryColor,
|
|
thumbShape: RoundSliderThumbShape(enabledThumbRadius: 10.0),
|
|
overlayShape: RoundSliderOverlayShape(overlayRadius: 24.0),
|
|
tickMarkShape: RoundSliderTickMarkShape(),
|
|
inactiveTickMarkColor: Colors.red[100],
|
|
valueIndicatorShape: PaddleSliderValueIndicatorShape(),
|
|
valueIndicatorTextStyle: TextStyle(
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
|
|
///Other Color
|
|
indicatorColor: Colors.white,
|
|
disabledColor: Color(0xffa3a3a3),
|
|
highlightColor: Color(0xff47484b),
|
|
splashColor: Colors.white.withAlpha(100),
|
|
);
|
|
}
|
|
|
|
class AppStyle {
|
|
static void init() {
|
|
initMyStyle();
|
|
AdminTheme.setTheme();
|
|
}
|
|
|
|
static void changeMyTheme() {
|
|
My.changeTheme(AppTheme.theme);
|
|
}
|
|
|
|
static void initMyStyle() {
|
|
MyTextStyle.resetFontStyles();
|
|
MyTextStyle.changeFontFamily(GoogleFonts.inter);
|
|
My.changeTheme(AppTheme.theme);
|
|
My.setConstant(MyConstantData(
|
|
containerRadius: AppStyle.containerRadius.medium,
|
|
cardRadius: AppStyle.cardRadius.medium,
|
|
buttonRadius: AppStyle.buttonRadius.medium,
|
|
defaultBreadCrumbItem: MyBreadcrumbItem(name: 'Marco', route: '/client/dashboard'),
|
|
));
|
|
bool isMobile = true;
|
|
try {
|
|
isMobile = Platform.isAndroid || Platform.isIOS;
|
|
} catch (_) {
|
|
isMobile = false;
|
|
}
|
|
My.setFlexSpacing(isMobile ? 16 : 24);
|
|
}
|
|
|
|
/// -------------------------- Styles -------------------------------------------- ///
|
|
|
|
static MaterialRadius buttonRadius = MaterialRadius(small: 2, medium: 4, large: 8);
|
|
static MaterialRadius cardRadius = MaterialRadius(xs: 2, small: 4, medium: 4, large: 8);
|
|
static MaterialRadius containerRadius = MaterialRadius(xs: 2, small: 4, medium: 4, large: 8);
|
|
static MaterialRadius imageRadius = MaterialRadius(xs: 2, small: 4, medium: 4, large: 8);
|
|
}
|
|
|
|
class AppColors {
|
|
static final Color star = Color(0xffFFC233);
|
|
static Color ratingStarColor = Color(0xFFF9A825);
|
|
static Color success = Color(0xff1abc9c);
|
|
|
|
static ColorGroup pink = ColorGroup(Color(0xffFFC2D9), Color(0xffF5005E));
|
|
static ColorGroup violet = ColorGroup(Color(0xffD0BADE), Color(0xff4E2E60));
|
|
|
|
static ColorGroup blue = ColorGroup(Color(0xffADD8FF), Color.fromRGBO(0, 74, 143, 1));
|
|
static ColorGroup green = ColorGroup(Color(0xffAFE9DA), Color(0xff165041));
|
|
static ColorGroup orange = ColorGroup(Color(0xffFFCEC2), Color(0xffFF3B0A));
|
|
static ColorGroup skyBlue = ColorGroup(Color(0xffC2F0FF), Color(0xff0099CC));
|
|
static ColorGroup lavender = ColorGroup(Color(0xffEAE2F3), Color(0xff7748AD));
|
|
static ColorGroup queenPink = ColorGroup(Color(0xffE8D9DC), Color(0xff804D57));
|
|
static ColorGroup blueViolet = ColorGroup(Color(0xffC5C6E7), Color(0xff3B3E91));
|
|
static ColorGroup rosePink = ColorGroup(Color(0xffFCB1E0), Color(0xffEC0999));
|
|
|
|
static ColorGroup rubinRed = ColorGroup(Color(0x98f6a8bd), Color(0xffd03760));
|
|
static ColorGroup favorite = rubinRed;
|
|
static ColorGroup redOrange = ColorGroup(Color(0xffFFAD99), Color(0xffF53100));
|
|
|
|
static Color notificationSuccessBGColor = Color(0xff117E68);
|
|
static Color notificationSuccessTextColor = Color(0xffffffff);
|
|
static Color notificationSuccessActionColor = Color(0xffFFE815);
|
|
|
|
static Color notificationErrorBGColor = Color(0xfffcd9df);
|
|
static Color notificationErrorTextColor = Color(0xffFF3B0A);
|
|
static Color notificationErrorActionColor = Color(0xff006784);
|
|
|
|
static List<ColorGroup> list = [redOrange, violet, blue, green, orange, skyBlue, lavender, blueViolet];
|
|
|
|
static ColorGroup get random => list[Random().nextInt(list.length)];
|
|
|
|
static ColorGroup get(int index) {
|
|
return list[index % list.length];
|
|
}
|
|
|
|
static Color getColorByRating(int rating) {
|
|
var colors = {1: Color(0xfff0323c), 2: Color(0xcdf0323c), 3: star, 4: Color(0xcd3cd278), 5: Color(0xff3cd278)};
|
|
|
|
return colors[rating] ?? colors[1]!;
|
|
}
|
|
|
|
AppColors() {
|
|
list.addAll([pink, violet, blue, green, orange]);
|
|
}
|
|
}
|