3273d63b23
- 新增 Home Screen 视觉设计 token (背景、工具栏、对话区、输入框等) - 重构首页布局为浮动式底部输入栈结构 - 新增 HomeBackgroundField、HomeFloatingHeader、HomeAttachmentStrip 组件 - 优化 MessageComposer 视觉样式为悬浮 shell 设计 - 添加相关测试用例
86 lines
2.5 KiB
Dart
86 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
import '../../../../core/theme/design_tokens.dart';
|
|
|
|
const homeBackgroundFieldKey = ValueKey('home_background_field');
|
|
const homeTopGlowKey = ValueKey('home_top_glow');
|
|
const homeBottomGlowKey = ValueKey('home_bottom_glow');
|
|
|
|
class HomeBackgroundField extends StatelessWidget {
|
|
const HomeBackgroundField({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return DecoratedBox(
|
|
key: homeBackgroundFieldKey,
|
|
decoration: const BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topCenter,
|
|
end: Alignment.bottomCenter,
|
|
colors: [AppColors.homeBackgroundTop, AppColors.homeBackgroundBottom],
|
|
),
|
|
),
|
|
child: const Stack(children: [_HomeTopGlow(), _HomeBottomGlow()]),
|
|
);
|
|
}
|
|
}
|
|
|
|
class _HomeTopGlow extends StatelessWidget {
|
|
const _HomeTopGlow();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Align(
|
|
alignment: const Alignment(-0.25, -0.9),
|
|
child: IgnorePointer(
|
|
child: Container(
|
|
key: homeTopGlowKey,
|
|
width: AppSpacing.xxl * 10,
|
|
height: AppSpacing.xxl * 7,
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(AppSpacing.xxl * 3),
|
|
color: AppColors.homeBackgroundGlowSoft.withValues(alpha: 0.28),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color: AppColors.homeBackgroundGlow.withValues(alpha: 0.28),
|
|
blurRadius: AppSpacing.xxl * 3,
|
|
spreadRadius: AppSpacing.xl,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
class _HomeBottomGlow extends StatelessWidget {
|
|
const _HomeBottomGlow();
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Align(
|
|
alignment: Alignment.bottomCenter,
|
|
child: IgnorePointer(
|
|
child: Container(
|
|
key: homeBottomGlowKey,
|
|
width: double.infinity,
|
|
height: AppSpacing.xxl * 6,
|
|
margin: const EdgeInsets.symmetric(horizontal: AppSpacing.xl),
|
|
decoration: BoxDecoration(
|
|
color: AppColors.homeBackgroundGlowSoft.withValues(alpha: 0.2),
|
|
borderRadius: BorderRadius.circular(AppSpacing.xxl * 2),
|
|
boxShadow: [
|
|
BoxShadow(
|
|
color: AppColors.homeBackgroundGlow.withValues(alpha: 0.12),
|
|
blurRadius: AppSpacing.xxl * 2,
|
|
spreadRadius: AppSpacing.md,
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|