144 lines
4.8 KiB
Dart
144 lines
4.8 KiB
Dart
part of '../main.dart';
|
|
|
|
class AppColors {
|
|
static const background = Color(0xFF05080F);
|
|
static const surface = Color(0xFF0B1220);
|
|
static const surfaceRaised = Color(0xFF101B30);
|
|
static const navy = Color(0xFF102A56);
|
|
static const blue = Color(0xFF3B82F6);
|
|
static const blueSoft = Color(0xFF93C5FD);
|
|
static const border = Color(0xFF203354);
|
|
static const text = Color(0xFFF1F5F9);
|
|
static const textMuted = Color(0xFF9FB0C9);
|
|
static const warningBackground = Color(0xFF2B1E10);
|
|
static const warningBorder = Color(0xFF8A5A20);
|
|
static const warningText = Color(0xFFFED7AA);
|
|
static const recordingBackground = Color(0xFF29151D);
|
|
static const recordingBorder = Color(0xFF7F3148);
|
|
static const recording = Color(0xFFF87171);
|
|
}
|
|
|
|
void showCompactSnackBar(
|
|
BuildContext context, {
|
|
required String message,
|
|
IconData? icon,
|
|
}) {
|
|
final messenger = ScaffoldMessenger.of(context);
|
|
messenger.clearSnackBars();
|
|
messenger.showSnackBar(
|
|
SnackBar(
|
|
duration: const Duration(milliseconds: 1500),
|
|
behavior: SnackBarBehavior.floating,
|
|
margin: const EdgeInsets.fromLTRB(18, 0, 18, 18),
|
|
elevation: 0,
|
|
backgroundColor: AppColors.navy,
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(14)),
|
|
content: Row(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
if (icon != null) ...[
|
|
Icon(icon, color: AppColors.blueSoft, size: 20),
|
|
const SizedBox(width: 10),
|
|
],
|
|
Expanded(
|
|
child: Text(
|
|
message,
|
|
style: const TextStyle(
|
|
color: Colors.white,
|
|
fontWeight: FontWeight.w700,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
class ConfiVoiceMobileApp extends StatelessWidget {
|
|
const ConfiVoiceMobileApp({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
debugShowCheckedModeBanner: false,
|
|
title: 'ConfiVoice',
|
|
theme: ThemeData(
|
|
brightness: Brightness.dark,
|
|
colorScheme: const ColorScheme.dark(
|
|
primary: AppColors.blue,
|
|
onPrimary: Colors.white,
|
|
secondary: AppColors.blueSoft,
|
|
surface: AppColors.surface,
|
|
onSurface: AppColors.text,
|
|
outline: AppColors.border,
|
|
error: AppColors.recording,
|
|
),
|
|
scaffoldBackgroundColor: AppColors.background,
|
|
appBarTheme: const AppBarTheme(
|
|
centerTitle: false,
|
|
elevation: 0,
|
|
scrolledUnderElevation: 0,
|
|
backgroundColor: AppColors.background,
|
|
foregroundColor: AppColors.text,
|
|
),
|
|
cardTheme: CardTheme(
|
|
elevation: 0,
|
|
color: AppColors.surface,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(8),
|
|
side: const BorderSide(color: AppColors.border),
|
|
),
|
|
),
|
|
inputDecorationTheme: const InputDecorationTheme(
|
|
filled: true,
|
|
fillColor: AppColors.surfaceRaised,
|
|
border: OutlineInputBorder(
|
|
borderSide: BorderSide(color: AppColors.border),
|
|
),
|
|
enabledBorder: OutlineInputBorder(
|
|
borderSide: BorderSide(color: AppColors.border),
|
|
),
|
|
focusedBorder: OutlineInputBorder(
|
|
borderSide: BorderSide(color: AppColors.blue, width: 1.5),
|
|
),
|
|
labelStyle: TextStyle(color: AppColors.textMuted),
|
|
prefixIconColor: AppColors.blueSoft,
|
|
),
|
|
filledButtonTheme: FilledButtonThemeData(
|
|
style: FilledButton.styleFrom(
|
|
backgroundColor: AppColors.blue,
|
|
foregroundColor: Colors.white,
|
|
disabledBackgroundColor: AppColors.navy,
|
|
disabledForegroundColor: AppColors.textMuted,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 16),
|
|
),
|
|
),
|
|
outlinedButtonTheme: OutlinedButtonThemeData(
|
|
style: OutlinedButton.styleFrom(
|
|
foregroundColor: AppColors.blueSoft,
|
|
side: const BorderSide(color: AppColors.border),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(8),
|
|
),
|
|
padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 16),
|
|
),
|
|
),
|
|
progressIndicatorTheme: const ProgressIndicatorThemeData(
|
|
color: AppColors.blue,
|
|
linearTrackColor: AppColors.navy,
|
|
),
|
|
snackBarTheme: const SnackBarThemeData(
|
|
backgroundColor: AppColors.surfaceRaised,
|
|
contentTextStyle: TextStyle(color: AppColors.text),
|
|
),
|
|
useMaterial3: true,
|
|
),
|
|
home: const AuthGate(),
|
|
);
|
|
}
|
|
}
|