~repos /only-bible-app

#kotlin#android#ios

GIT_CONFIG_PARAMETERS="'http.version=HTTP/1.1'" git clone https://git.pyrossh.dev/only-bible-app.git
Discussions: https://groups.google.com/g/rust-embed-devs

The only bible app you will ever need. No ads. No in-app purchases. No distractions.



lib/theme.dart



import "package:flutter/material.dart";
const lightHighlights = [
Color(0xFFDAEFFE),
Color(0xFFFFFCB2),
Color(0xFFFFDDF3),
Color(0xFFE6FCC3),
];
const darkHighlights = [
Color(0xFF69A9FC),
Color(0xFFFFEB66),
Color(0xFFFF66B3),
Color(0xFF48F334),
];
const lightColorScheme = ColorScheme(
brightness: Brightness.light,
primary: Color.fromARGB(255, 100, 127, 203),
onPrimary: Color(0xFFFFFFFF),
primaryContainer: Color(0xFFDAE2FF),
onPrimaryContainer: Color(0xFF001848),
secondary: Color(0xFF4C5C92),
onSecondary: Color(0xFFFFFFFF),
secondaryContainer: Color(0xFFDCE1FF),
onSecondaryContainer: Color(0xFF02174B),
tertiary: Color(0xFF7D4E7D),
onTertiary: Color(0xFFFFFFFF),
tertiaryContainer: Color(0xFFFFD6FA),
onTertiaryContainer: Color(0xFF320935),
error: Color(0xFFBA1A1A),
onError: Color(0xFFFFFFFF),
errorContainer: Color(0xFFFFDAD6),
onErrorContainer: Color(0xFF410002),
surface: Color(0xFFFFFFFF),
onSurface: Color(0xFF000000),
onSurfaceVariant: Color(0xFF45464F),
outline: Color.fromARGB(255, 157, 160, 171),
outlineVariant: Color(0xFFC5C6D0),
shadow: Color.fromARGB(255, 88, 85, 85),
scrim: Color(0xFF000000),
inverseSurface: Color(0xFF2F3036),
onInverseSurface: Color(0xFFF1F0F7),
inversePrimary: Color(0xFFB2C5FF),
surfaceDim: Color(0xFFDAD9E0),
surfaceBright: Color(0xFFFAF8FF),
surfaceContainerLowest: Color(0xFFFFFFFF),
surfaceContainerLow: Color(0xFFF4F3FA),
surfaceContainer: Color(0xFFEEEDF4),
surfaceContainerHigh: Color(0xFFE8E7EF),
surfaceContainerHighest: Color(0xFFE3E2E9),
);
const darkColorScheme = ColorScheme(
brightness: Brightness.dark,
primary: Color(0xFFB2C5FF),
onPrimary: Color(0xFF182E60),
primaryContainer: Color(0xFF304578),
onPrimaryContainer: Color(0xFFDAE2FF),
secondary: Color(0xFFB5C4FF),
onSecondary: Color(0xFF1C2D61),
secondaryContainer: Color(0xFF344479),
onSecondaryContainer: Color(0xFFDCE1FF),
tertiary: Color(0xFFEEB4EA),
onTertiary: Color(0xFF4A204C),
tertiaryContainer: Color(0xFF633664),
onTertiaryContainer: Color(0xFFFFD6FA),
error: Color(0xFFFFB4AB),
onError: Color(0xFF690005),
errorContainer: Color(0xFF93000A),
onErrorContainer: Color(0xFFFFDAD6),
surface: Color(0xFF121318),
onSurface: Color(0xFFE3E2E9),
onSurfaceVariant: Color(0xFFC5C6D0),
outline: Color(0xFF8F909A),
outlineVariant: Color(0xFF45464F),
shadow: Color(0xFF000000),
scrim: Color(0xFF000000),
inverseSurface: Color(0xFFE3E2E9),
onInverseSurface: Color(0xFF2F3036),
inversePrimary: Color(0xFF495D92),
surfaceDim: Color(0xFF121318),
surfaceBright: Color(0xFF38393F),
surfaceContainerLowest: Color(0xFF0D0E13),
surfaceContainerLow: Color(0xFF1A1B21),
surfaceContainer: Color(0xFF1E1F25),
surfaceContainerHigh: Color(0xFF282A2F),
surfaceContainerHighest: Color(0xFF33343A),
);
final lightTheme = ThemeData(
brightness: Brightness.light,
colorScheme: lightColorScheme,
useMaterial3: true,
applyElevationOverlayColor: false,
textSelectionTheme: TextSelectionThemeData(
cursorColor: Colors.black,
selectionHandleColor: Colors.black,
selectionColor: Colors.grey.shade200,
),
inputDecorationTheme: const InputDecorationTheme(
focusColor: Colors.transparent,
hoverColor: Colors.transparent,
activeIndicatorBorder: BorderSide(
color: Colors.black,
),
hintStyle: TextStyle(color: Colors.grey),
),
appBarTheme: AppBarTheme(
backgroundColor: lightColorScheme.surface,
foregroundColor: lightColorScheme.onSurface,
elevation: 1,
),
bottomSheetTheme: BottomSheetThemeData(
elevation: 10,
backgroundColor: lightColorScheme.surface,
shadowColor: lightColorScheme.scrim,
showDragHandle: true,
dragHandleSize: Size(50, 3),
),
dialogTheme: const DialogThemeData(
elevation: 10,
shadowColor: Colors.black,
backgroundColor: Colors.white,
surfaceTintColor: Colors.white,
shape: Border(
top: BorderSide(
width: 1.5,
color: Colors.black,
),
),
),
iconButtonTheme: IconButtonThemeData(
style: IconButton.styleFrom(
enableFeedback: true,
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
enableFeedback: true,
padding: EdgeInsets.zero,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
side: BorderSide(
color: Colors.black,
width: 1,
),
),
elevation: 2,
shadowColor: Colors.black,
backgroundColor: lightColorScheme.surfaceContainerLow,
foregroundColor: Colors.black,
textStyle: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
letterSpacing: 0,
),
),
),
segmentedButtonTheme: SegmentedButtonThemeData(
style: ButtonStyle(
backgroundColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return lightColorScheme.primary;
}
return Colors.grey.shade100;
}),
foregroundColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return lightColorScheme.onPrimary;
}
return lightColorScheme.onSurface;
}),
textStyle: WidgetStatePropertyAll(
TextStyle(
fontSize: 16,
fontWeight: FontWeight.w700,
color: lightColorScheme.onSurface,
letterSpacing: 0,
),
),
),
),
toggleButtonsTheme: ToggleButtonsThemeData(
borderRadius: const BorderRadius.all(Radius.circular(12)),
borderColor: lightColorScheme.scrim,
selectedBorderColor: lightColorScheme.scrim,
selectedColor: lightColorScheme.onPrimary,
fillColor: lightColorScheme.primary,
color: lightColorScheme.onSurface,
constraints: const BoxConstraints(minHeight: 40, minWidth: 140),
),
textTheme: TextTheme(
bodyMedium: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w400,
wordSpacing: 0,
letterSpacing: 0,
color: lightColorScheme.onSurface,
),
bodySmall: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w400,
wordSpacing: 0,
letterSpacing: 0,
color: lightColorScheme.onSurface,
),
headlineLarge: TextStyle(
fontSize: 38,
fontWeight: FontWeight.w700,
color: lightColorScheme.secondary,
),
headlineMedium: TextStyle(
color: lightColorScheme.onSurface,
fontSize: 24,
fontWeight: FontWeight.w500,
letterSpacing: 0.5,
),
labelMedium: TextStyle(
fontSize: 13,
fontWeight: FontWeight.w700,
color: lightColorScheme.primary,
letterSpacing: 0,
),
labelLarge: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w700,
color: lightColorScheme.onSurface,
letterSpacing: 0,
),
),
);
final darkTheme = lightTheme.copyWith(
brightness: Brightness.dark,
colorScheme: darkColorScheme,
segmentedButtonTheme: SegmentedButtonThemeData(
style: ButtonStyle(
backgroundColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return darkColorScheme.primary;
}
return darkColorScheme.surfaceContainerHigh;
}),
foregroundColor: WidgetStateProperty.resolveWith((states) {
if (states.contains(WidgetState.selected)) {
return darkColorScheme.onPrimary;
}
return darkColorScheme.onSurface;
}),
textStyle: WidgetStatePropertyAll(
TextStyle(
fontSize: 16,
fontWeight: FontWeight.w700,
color: darkColorScheme.onSurface,
letterSpacing: 0,
),
),
),
),
toggleButtonsTheme: ToggleButtonsThemeData(
borderRadius: const BorderRadius.all(Radius.circular(12)),
borderColor: darkColorScheme.outline,
selectedBorderColor: darkColorScheme.outline,
selectedColor: darkColorScheme.onPrimary,
fillColor: darkColorScheme.primary,
color: darkColorScheme.onSurface,
constraints: const BoxConstraints(minHeight: 40, minWidth: 140),
),
appBarTheme: AppBarTheme(
backgroundColor: darkColorScheme.surface,
foregroundColor: darkColorScheme.onSurface,
elevation: 1,
),
bottomSheetTheme: lightTheme.bottomSheetTheme.copyWith(
backgroundColor: const Color(0xFF141415),
shadowColor: Colors.white,
surfaceTintColor: const Color(0xFF141415),
),
textSelectionTheme: TextSelectionThemeData(
cursorColor: Colors.white,
selectionHandleColor: Colors.white,
selectionColor: Colors.blueGrey.shade800,
),
dialogTheme: DialogThemeData(
backgroundColor: darkColorScheme.surface,
elevation: 1,
shape: Border(
top: BorderSide(
width: 1.5,
color: darkColorScheme.outline,
),
),
),
iconButtonTheme: IconButtonThemeData(
style: IconButton.styleFrom(
enableFeedback: true,
foregroundColor: Colors.white,
),
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(
enableFeedback: lightTheme.textButtonTheme.style!.enableFeedback,
padding: EdgeInsets.all(0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
side: BorderSide(
color: darkColorScheme.onSurface,
width: 1,
),
),
textStyle: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w500,
letterSpacing: 0,
),
elevation: 0,
shadowColor: Colors.white,
backgroundColor: darkColorScheme.surfaceContainerLow,
foregroundColor: darkColorScheme.primary,
),
),
textTheme: TextTheme(
bodyMedium: lightTheme.textTheme.bodyMedium!.copyWith(
color: darkColorScheme.onSurface,
),
bodySmall: lightTheme.textTheme.bodyMedium!.copyWith(
color: darkColorScheme.onSurface,
),
headlineLarge: lightTheme.textTheme.headlineLarge!.copyWith(
color: darkColorScheme.secondary,
),
headlineMedium: lightTheme.textTheme.headlineMedium!.copyWith(
color: darkColorScheme.onSurface,
),
labelMedium: lightTheme.textTheme.labelMedium!.copyWith(
color: lightColorScheme.primary,
),
labelLarge: lightTheme.textTheme.labelLarge!.copyWith(
color: darkColorScheme.onSurface,
),
),
);