import 'dart:ui'; import 'package:flutter/material.dart'; import '../app/app_theme.dart'; class GlassDock extends StatelessWidget { const GlassDock({ super.key, required this.selectedIndex, required this.onSelected, }); final int selectedIndex; final ValueChanged onSelected; @override Widget build(BuildContext context) => Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(40), boxShadow: [ BoxShadow( color: ink.withValues(alpha: 0.13), blurRadius: 28, offset: const Offset(0, 10), ), ], ), child: ClipRRect( borderRadius: BorderRadius.circular(40), child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 22, sigmaY: 22), child: Container( width: 166, height: 68, padding: const EdgeInsets.all(7), decoration: BoxDecoration( borderRadius: BorderRadius.circular(40), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ Colors.white.withValues(alpha: 0.85), Colors.white.withValues(alpha: 0.5), ], ), border: Border.all( color: Colors.white.withValues(alpha: 0.95), width: 1.2, ), ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _item(0, Icons.calendar_month_rounded, '课表'), _item(1, Icons.person_outline_rounded, '我的'), ], ), ), ), ), ); Widget _item(int index, IconData icon, String label) => Semantics( label: label, button: true, selected: index == selectedIndex, excludeSemantics: true, child: GestureDetector( onTap: () => onSelected(index), behavior: HitTestBehavior.opaque, child: AnimatedContainer( duration: const Duration(milliseconds: 220), width: 66, height: 52, decoration: BoxDecoration( borderRadius: BorderRadius.circular(30), color: index == selectedIndex ? river.withValues(alpha: 0.12) : Colors.transparent, ), child: Icon( icon, size: 27, color: index == selectedIndex ? river : ink.withValues(alpha: 0.45), ), ), ), ); }