feat(accessibility): add reduceMotion scaling and minimize animations; apply RepaintBoundary to heavy widgets
This commit is contained in:
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import '../utils/logger.dart';
|
||||
import 'dart:ui';
|
||||
import '../theme/app_colors.dart';
|
||||
import '../utils/reduce_motion.dart';
|
||||
import 'themed_text.dart';
|
||||
|
||||
class GlassmorphismCard extends StatelessWidget {
|
||||
@@ -52,7 +53,12 @@ class GlassmorphismCard extends StatelessWidget {
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(borderRadius),
|
||||
child: BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: blur, sigmaY: blur),
|
||||
filter: ImageFilter.blur(
|
||||
sigmaX: ReduceMotion.scale(context,
|
||||
normal: blur, reduced: blur * 0.4),
|
||||
sigmaY: ReduceMotion.scale(context,
|
||||
normal: blur, reduced: blur * 0.4),
|
||||
),
|
||||
child: Container(
|
||||
padding: padding,
|
||||
decoration: BoxDecoration(
|
||||
@@ -75,12 +81,13 @@ class GlassmorphismCard extends StatelessWidget {
|
||||
),
|
||||
boxShadow: boxShadow ??
|
||||
[
|
||||
const BoxShadow(
|
||||
BoxShadow(
|
||||
color: AppColors
|
||||
.shadowBlack, // color.md 가이드: rgba(0,0,0,0.08)
|
||||
blurRadius: 20,
|
||||
.shadowBlack, // color.md: rgba(0,0,0,0.08)
|
||||
blurRadius: ReduceMotion.scale(context,
|
||||
normal: 20, reduced: 10),
|
||||
spreadRadius: -5,
|
||||
offset: Offset(0, 10),
|
||||
offset: const Offset(0, 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -209,15 +216,18 @@ class _AnimatedGlassmorphismCardState extends State<AnimatedGlassmorphismCard>
|
||||
child: AnimatedBuilder(
|
||||
animation: _controller,
|
||||
builder: (context, child) {
|
||||
final scaleValue = ReduceMotion.scale(context,
|
||||
normal: _scaleAnimation.value, reduced: 1.0);
|
||||
return Transform.scale(
|
||||
scale: _scaleAnimation.value,
|
||||
scale: scaleValue,
|
||||
child: GlassmorphismCard(
|
||||
padding: widget.padding,
|
||||
margin: widget.margin,
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
borderRadius: widget.borderRadius,
|
||||
blur: _blurAnimation.value,
|
||||
blur: ReduceMotion.scale(context,
|
||||
normal: _blurAnimation.value, reduced: widget.blur),
|
||||
opacity: widget.opacity,
|
||||
onTap: null, // GlassmorphismCard의 onTap은 사용하지 않음
|
||||
child: widget.child,
|
||||
|
||||
Reference in New Issue
Block a user