Vaibhav Surve a5dd5e19fc Add Windows runner implementation for Flutter application
- Created CMakeLists.txt for Flutter and runner components.
- Implemented resource script (Runner.rc) for application metadata.
- Developed main entry point (main.cpp) for the Windows application.
- Added FlutterWindow class to manage the Flutter view within a Win32 window.
- Implemented utility functions for console management and command line argument parsing.
- Established Win32Window class for high DPI-aware window handling.
- Included application icon and manifest for proper Windows integration.
- Set up build configurations and dependencies for the Flutter application on Windows.
2025-04-23 09:55:31 +05:30

583 lines
17 KiB
Dart

// ignore_for_file: prefer_generic_function_type_aliases
import 'package:marco/helpers/theme/app_theme.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
enum MyTextType {
displayLarge,
displayMedium,
displaySmall,
headlineLarge,
headlineMedium,
headlineSmall,
titleLarge,
titleMedium,
titleSmall,
bodyLarge,
bodyMedium,
bodySmall,
labelLarge,
labelMedium,
labelSmall,
}
// TextStyle
typedef TextStyle GoogleFontFunction({
TextStyle? textStyle,
Color? color,
Color? backgroundColor,
double? fontSize,
FontWeight? fontWeight,
FontStyle? fontStyle,
double? letterSpacing,
double? wordSpacing,
TextBaseline? textBaseline,
double? height,
Locale? locale,
Paint? foreground,
Paint? background,
List<Shadow>? shadows,
List<FontFeature>? fontFeatures,
TextDecoration? decoration,
Color? decorationColor,
TextDecorationStyle? decorationStyle,
double? decorationThickness,
});
class MyTextStyle {
static GoogleFontFunction _fontFamily = GoogleFonts.ibmPlexSans;
static changeFontFamily(GoogleFontFunction value) {
_fontFamily = value;
}
static Map<int, FontWeight> _defaultFontWeight = {};
static Map<MyTextType, double> _defaultTextSize = {
MyTextType.displayLarge: 57,
MyTextType.displayMedium: 45,
MyTextType.displaySmall: 36,
MyTextType.headlineLarge: 32,
MyTextType.headlineMedium: 28,
MyTextType.headlineSmall: 26,
MyTextType.titleLarge: 22,
MyTextType.titleMedium: 16,
MyTextType.titleSmall: 14,
MyTextType.labelLarge: 14,
MyTextType.labelMedium: 12,
MyTextType.labelSmall: 11,
MyTextType.bodyLarge: 16,
MyTextType.bodyMedium: 14,
MyTextType.bodySmall: 12,
};
static Map<MyTextType, int> _defaultTextFontWeight = {};
static Map<MyTextType, double> _defaultLetterSpacing = {};
static TextStyle getStyle(
{TextStyle? textStyle,
int? fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
double? finalFontSize =
fontSize ?? (textStyle == null ? 40 : textStyle.fontSize);
Color finalColor = color ?? theme.colorScheme.onSurface;
finalColor = xMuted
? finalColor.withAlpha(160)
: (muted ? finalColor.withAlpha(200) : finalColor);
return _fontFamily(
fontSize: finalFontSize,
fontWeight: _defaultFontWeight[fontWeight],
letterSpacing: letterSpacing,
color: finalColor,
decoration: decoration,
height: height,
wordSpacing: wordSpacing);
}
// Material Design 3
static TextStyle displayLarge(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.displayLarge],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.displayLarge],
fontWeight: _defaultTextFontWeight[MyTextType.displayLarge],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle displayMedium(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.displayMedium],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.displayMedium],
fontWeight: _defaultTextFontWeight[MyTextType.displayMedium],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle displaySmall(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.displaySmall],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.displaySmall],
fontWeight: _defaultTextFontWeight[MyTextType.displaySmall],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle headlineLarge(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.headlineLarge],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.headlineLarge],
fontWeight: _defaultTextFontWeight[MyTextType.headlineLarge],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle headlineMedium(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.headlineMedium],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.headlineMedium],
fontWeight: _defaultTextFontWeight[MyTextType.headlineMedium],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle headlineSmall(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.headlineSmall],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.headlineSmall],
fontWeight: _defaultTextFontWeight[MyTextType.headlineSmall],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle titleLarge(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.titleLarge],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.titleLarge],
fontWeight: _defaultTextFontWeight[MyTextType.titleLarge],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle titleMedium(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.titleMedium],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.titleMedium],
fontWeight: _defaultTextFontWeight[MyTextType.titleMedium],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle titleSmall(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.titleSmall],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.titleSmall],
fontWeight: _defaultTextFontWeight[MyTextType.titleSmall],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle labelLarge(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.labelLarge],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.labelLarge],
fontWeight: _defaultTextFontWeight[MyTextType.labelLarge],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle labelMedium(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.labelMedium],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.labelMedium],
fontWeight: _defaultTextFontWeight[MyTextType.labelMedium],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle labelSmall(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.labelSmall],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.labelSmall],
fontWeight: _defaultTextFontWeight[MyTextType.labelSmall],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle bodyLarge(
{TextStyle? textStyle,
int? fontWeight,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.bodyLarge],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.bodyLarge],
fontWeight: fontWeight ?? _defaultTextFontWeight[MyTextType.bodyLarge],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle bodyMedium(
{TextStyle? textStyle,
int? fontWeight,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.bodyMedium],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.bodyMedium],
fontWeight: fontWeight ?? _defaultTextFontWeight[MyTextType.bodyMedium],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static TextStyle bodySmall(
{TextStyle? textStyle,
int fontWeight = 500,
bool muted = false,
bool xMuted = false,
double? letterSpacing,
Color? color,
TextDecoration decoration = TextDecoration.none,
double? height,
double? wordSpacing,
double? fontSize}) {
return getStyle(
fontSize: fontSize ?? _defaultTextSize[MyTextType.bodySmall],
color: color,
height: height,
muted: muted,
letterSpacing:
letterSpacing ?? _defaultLetterSpacing[MyTextType.bodySmall],
fontWeight: _defaultTextFontWeight[MyTextType.bodySmall],
decoration: decoration,
textStyle: textStyle,
wordSpacing: wordSpacing,
xMuted: xMuted);
}
static void changeDefaultFontWeight(Map<int, FontWeight> defaultFontWeight) {
MyTextStyle._defaultFontWeight = defaultFontWeight;
}
static void changeDefaultTextFontWeight(
Map<MyTextType, int> defaultFontWeight) {
MyTextStyle._defaultTextFontWeight = defaultFontWeight;
}
static void changeDefaultTextSize(Map<MyTextType, double> defaultTextSize) {
MyTextStyle._defaultTextSize = defaultTextSize;
}
static void changeDefaultLetterSpacing(
Map<MyTextType, double> defaultLetterSpacing) {
MyTextStyle._defaultLetterSpacing = defaultLetterSpacing;
}
static Map<MyTextType, double> get defaultTextSize => _defaultTextSize;
static Map<MyTextType, double> get defaultLetterSpacing =>
_defaultLetterSpacing;
static Map<MyTextType, int> get defaultTextFontWeight =>
_defaultTextFontWeight;
static Map<int, FontWeight> get defaultFontWeight => _defaultFontWeight;
//-------------------Reset Font Styles---------------------------------
static resetFontStyles() {
_fontFamily = GoogleFonts.ibmPlexSans;
_defaultFontWeight = {
100: FontWeight.w100,
200: FontWeight.w200,
300: FontWeight.w300,
400: FontWeight.w300,
500: FontWeight.w400,
600: FontWeight.w500,
700: FontWeight.w600,
800: FontWeight.w700,
900: FontWeight.w800,
};
_defaultTextSize = {
MyTextType.displayLarge: 57,
MyTextType.displayMedium: 45,
MyTextType.displaySmall: 36,
MyTextType.headlineLarge: 32,
MyTextType.headlineMedium: 28,
MyTextType.headlineSmall: 26,
MyTextType.titleLarge: 22,
MyTextType.titleMedium: 16,
MyTextType.titleSmall: 14,
MyTextType.labelLarge: 14,
MyTextType.labelMedium: 12,
MyTextType.labelSmall: 11,
MyTextType.bodyLarge: 16,
MyTextType.bodyMedium: 14,
MyTextType.bodySmall: 12,
};
_defaultTextFontWeight = {
MyTextType.displayLarge: 500,
MyTextType.displayMedium: 500,
MyTextType.displaySmall: 500,
MyTextType.headlineLarge: 500,
MyTextType.headlineMedium: 500,
MyTextType.headlineSmall: 500,
MyTextType.titleLarge: 500,
MyTextType.titleMedium: 500,
MyTextType.titleSmall: 500,
MyTextType.labelLarge: 600,
MyTextType.labelMedium: 600,
MyTextType.labelSmall: 600,
MyTextType.bodyLarge: 500,
MyTextType.bodyMedium: 500,
MyTextType.bodySmall: 500,
};
_defaultLetterSpacing = {
MyTextType.displayLarge: -0.25,
MyTextType.displayMedium: 0,
MyTextType.displaySmall: 0,
MyTextType.headlineLarge: -0.2,
MyTextType.headlineMedium: -0.15,
MyTextType.headlineSmall: 0,
MyTextType.titleLarge: 0,
MyTextType.titleMedium: 0.1,
MyTextType.titleSmall: 0.1,
MyTextType.labelLarge: 0.1,
MyTextType.labelMedium: 0.5,
MyTextType.labelSmall: 0.5,
MyTextType.bodyLarge: 0.5,
MyTextType.bodyMedium: 0.25,
MyTextType.bodySmall: 0.4,
};
}
}