b0-cloud second commit

This commit is contained in:
Leon Bösche
2025-12-16 21:19:01 +01:00
parent 7d372a1aac
commit bd9dc5e485
20 changed files with 602 additions and 284 deletions

View File

@@ -1,9 +1,9 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import '../blocs/auth/auth_bloc.dart';
import '../blocs/auth/auth_state.dart';
import '../theme/app_theme.dart';
import 'login_form.dart';
import 'file_explorer.dart';
@@ -36,7 +36,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
backgroundColor: AppTheme.primaryBackground,
body: Stack(
children: [
Center(
@@ -61,17 +61,138 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
borderRadius: BorderRadius.circular(16),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: Container(
decoration: BoxDecoration(
color: Colors.white.withValues(alpha: 0.1),
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: Colors.white.withValues(alpha: 0.2),
child: Stack(
children: [
Container(
decoration: AppTheme.glassDecoration,
child: isLoggedIn
? const FileExplorer()
: const LoginForm(),
),
),
child: isLoggedIn
? const FileExplorer()
: const LoginForm(),
// Top-left radial glow - primary accent light
AnimatedPositioned(
duration: const Duration(milliseconds: 350),
curve: Curves.easeInOut,
top: isLoggedIn ? -180 : -120,
left: isLoggedIn ? -180 : -120,
child: IgnorePointer(
child: AnimatedContainer(
duration: const Duration(milliseconds: 350),
curve: Curves.easeInOut,
width: isLoggedIn ? 550 : 400,
height: isLoggedIn ? 550 : 400,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: RadialGradient(
colors: [
AppTheme.accentColor.withValues(
alpha: isLoggedIn ? 0.12 : 0.15,
),
AppTheme.accentColor.withValues(
alpha: 0.04,
),
Colors.transparent,
],
stops: const [0.0, 0.6, 1.0],
),
),
),
),
),
// Bottom-right warm glow - complementary lighting
AnimatedPositioned(
duration: const Duration(milliseconds: 350),
curve: Curves.easeInOut,
bottom: isLoggedIn ? -200 : -140,
right: isLoggedIn ? -200 : -140,
child: IgnorePointer(
child: AnimatedContainer(
duration: const Duration(milliseconds: 350),
curve: Curves.easeInOut,
width: isLoggedIn ? 530 : 380,
height: isLoggedIn ? 530 : 380,
decoration: BoxDecoration(
shape: BoxShape.circle,
gradient: RadialGradient(
colors: [
Colors.cyan.withValues(
alpha: isLoggedIn ? 0.06 : 0.08,
),
Colors.transparent,
],
),
),
),
),
),
// Top edge subtle highlight
IgnorePointer(
child: Positioned(
top: 0,
left: 0,
right: 0,
child: Container(
height: 60,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.white.withValues(alpha: 0.05),
Colors.transparent,
],
),
),
),
),
),
// Left edge subtle side lighting
IgnorePointer(
child: Positioned(
left: 0,
top: 0,
bottom: 0,
child: Container(
width: 40,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
AppTheme.accentColor.withValues(
alpha: 0.04,
),
Colors.transparent,
],
),
),
),
),
),
// Diagonal shimmer overlay
IgnorePointer(
child: Positioned(
top: -100,
right: -100,
child: Transform.rotate(
angle: 0.785,
child: Container(
width: 600,
height: 100,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
Colors.white.withValues(alpha: 0),
Colors.white.withValues(alpha: 0.06),
Colors.white.withValues(alpha: 0),
],
),
),
),
),
),
),
],
),
),
),
@@ -89,9 +210,9 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
style: TextStyle(
fontFamily: 'PixelatedElegance',
fontSize: 42,
color: Colors.white,
color: AppTheme.primaryText,
decoration: TextDecoration.underline,
decorationColor: Colors.white,
decorationColor: AppTheme.primaryText,
fontFeatures: [const FontFeature.slashedZero()],
),
),
@@ -136,7 +257,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
Widget _buildNavButton(String label, IconData icon, {bool isAvatar = false}) {
final isSelected = _selectedTab == label;
final highlightColor = Color.fromARGB(255, 100, 200, 255);
final defaultColor = Colors.white70;
final defaultColor = AppTheme.secondaryText;
return GestureDetector(
onTap: () {
@@ -147,7 +268,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
child: isAvatar
? CircleAvatar(
backgroundColor: isSelected ? highlightColor : defaultColor,
child: Icon(icon, color: Colors.black),
child: Icon(icon, color: AppTheme.primaryBackground),
)
: Column(
mainAxisSize: MainAxisSize.min,