This commit is contained in:
Leon Bösche
2025-12-17 23:45:39 +01:00
parent 7749ebfd08
commit ab7c734ae7

View File

@@ -240,197 +240,202 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
} else if (!isLoggedIn) { } else if (!isLoggedIn) {
_animationController.reverse(); _animationController.reverse();
} }
return AnimatedContainer( return Padding(
duration: const Duration(milliseconds: 350), padding: const EdgeInsets.only(top: 42.0),
curve: Curves.easeInOut, child: AnimatedContainer(
width: isLoggedIn duration: const Duration(milliseconds: 350),
? MediaQuery.of(context).size.width * 0.9 curve: Curves.easeInOut,
: 340, width: isLoggedIn
height: isLoggedIn ? MediaQuery.of(context).size.width * 0.9
? MediaQuery.of(context).size.height * 0.9 : 340,
: 280, height: isLoggedIn
child: ClipRRect( ? MediaQuery.of(context).size.height * 0.9
borderRadius: BorderRadius.circular(16), : 280,
child: BackdropFilter( child: ClipRRect(
filter: ui.ImageFilter.blur(sigmaX: 10, sigmaY: 10), borderRadius: BorderRadius.circular(16),
child: Stack( child: BackdropFilter(
children: [ filter: ui.ImageFilter.blur(sigmaX: 10, sigmaY: 10),
Container( child: Stack(
decoration: AppTheme.glassDecoration, children: [
child: isLoggedIn Container(
? BlocListener< decoration: AppTheme.glassDecoration,
OrganizationBloc, child: isLoggedIn
OrganizationState ? BlocListener<
>( OrganizationBloc,
listener: (context, state) { OrganizationState
if (state is OrganizationLoaded && >(
state.selectedOrg != null) { listener: (context, state) {
// Reload file browser when org changes if (state is OrganizationLoaded &&
context.read<FileBrowserBloc>().add( state.selectedOrg != null) {
LoadDirectory( // Reload file browser when org changes
orgId: state.selectedOrg!.id, context.read<FileBrowserBloc>().add(
path: '/', LoadDirectory(
orgId: state.selectedOrg!.id,
path: '/',
),
);
}
},
child:
BlocBuilder<
OrganizationBloc,
OrganizationState
>(
builder: (context, orgState) {
if (orgState
is OrganizationInitial) {
WidgetsBinding.instance
.addPostFrameCallback((_) {
context
.read<
OrganizationBloc
>()
.add(
LoadOrganizations(),
);
});
}
return Column(
children: [
const SizedBox(height: 8),
_buildOrgRow(context),
Expanded(
child: _buildDrive(
orgState,
),
),
],
);
},
), ),
); )
} : const LoginForm(),
},
child:
BlocBuilder<
OrganizationBloc,
OrganizationState
>(
builder: (context, orgState) {
if (orgState
is OrganizationInitial) {
WidgetsBinding.instance
.addPostFrameCallback((_) {
context
.read<
OrganizationBloc
>()
.add(
LoadOrganizations(),
);
});
}
return Column(
children: [
const SizedBox(height: 8),
_buildOrgRow(context),
Expanded(
child: _buildDrive(orgState),
),
],
);
},
),
)
: 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],
),
),
),
), ),
), // Top-left radial glow - primary accent light
// Bottom-right warm glow - complementary lighting AnimatedPositioned(
AnimatedPositioned( duration: const Duration(milliseconds: 350),
duration: const Duration(milliseconds: 350), curve: Curves.easeInOut,
curve: Curves.easeInOut, top: isLoggedIn ? -180 : -120,
bottom: isLoggedIn ? -200 : -140, left: isLoggedIn ? -180 : -120,
right: isLoggedIn ? -200 : -140, child: IgnorePointer(
child: IgnorePointer( child: AnimatedContainer(
child: AnimatedContainer( duration: const Duration(milliseconds: 350),
duration: const Duration(milliseconds: 350), curve: Curves.easeInOut,
curve: Curves.easeInOut, width: isLoggedIn ? 550 : 400,
width: isLoggedIn ? 530 : 380, height: isLoggedIn ? 550 : 400,
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
Positioned(
top: 0,
left: 0,
right: 0,
child: IgnorePointer(
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
Positioned(
left: 0,
top: 0,
bottom: 0,
child: IgnorePointer(
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
Positioned(
top: 0,
left: 0,
child: IgnorePointer(
child: Transform.rotate(
angle: 0.785,
child: Container(
width: 600,
height: 100,
decoration: BoxDecoration( decoration: BoxDecoration(
gradient: LinearGradient( shape: BoxShape.circle,
gradient: RadialGradient(
colors: [ colors: [
Colors.white.withValues(alpha: 0), AppTheme.accentColor.withValues(
Colors.white.withValues(alpha: 0.06), alpha: isLoggedIn ? 0.12 : 0.15,
Colors.white.withValues(alpha: 0), ),
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
], Positioned(
top: 0,
left: 0,
right: 0,
child: IgnorePointer(
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
Positioned(
left: 0,
top: 0,
bottom: 0,
child: IgnorePointer(
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
Positioned(
top: 0,
left: 0,
child: IgnorePointer(
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),
],
),
),
),
),
),
),
],
),
), ),
), ),
), ),
@@ -439,7 +444,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
), ),
), ),
Positioned( Positioned(
top: 10, top: 0,
left: 0, left: 0,
right: 0, right: 0,
child: Center( child: Center(
@@ -447,7 +452,7 @@ class _HomePageState extends State<HomePage> with TickerProviderStateMixin {
'b0esche.cloud', 'b0esche.cloud',
style: TextStyle( style: TextStyle(
fontFamily: 'PixelatedElegance', fontFamily: 'PixelatedElegance',
fontSize: 42, fontSize: 48,
color: AppTheme.primaryText, color: AppTheme.primaryText,
decoration: TextDecoration.underline, decoration: TextDecoration.underline,
decorationColor: AppTheme.primaryText, decorationColor: AppTheme.primaryText,