MIF_E31231708/cv_app/mobile_app/lib/app/app.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(),
);
}
}