This commit is contained in:
2026-03-20 18:46:22 +03:00
parent 7becbc403c
commit 58ae9e0450
+13 -12
View File
@@ -415,13 +415,11 @@ class _BalanceCardState extends ConsumerState<_BalanceCard>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
// repeat() — тикает каждый vsync кадр
_controller = AnimationController( _controller = AnimationController(
vsync: this, vsync: this,
duration: const Duration(seconds: 1), duration: const Duration(seconds: 1),
)..repeat(); )..repeat();
// Акселерометр ТОЛЬКО пишет target — никакого setState/rebuild
_sub = accelerometerEventStream( _sub = accelerometerEventStream(
samplingPeriod: const Duration(milliseconds: 50), samplingPeriod: const Duration(milliseconds: 50),
).listen((e) { ).listen((e) {
@@ -449,28 +447,31 @@ class _BalanceCardState extends ConsumerState<_BalanceCard>
return AnimatedBuilder( return AnimatedBuilder(
animation: _controller, animation: _controller,
builder: (context, child) { builder: (context, child) {
// ← lerp здесь, вызывается каждый кадр автоматически через AnimatedBuilder _tiltX += (_targetTiltX - _tiltX) * 0.15;
_tiltX += (_targetTiltX - _tiltX) * 0.1; _tiltY += (_targetTiltY - _tiltY) * 0.15;
_tiltY += (_targetTiltY - _tiltY) * 0.1;
return Transform( return Transform(
alignment: Alignment.center, alignment: Alignment.center,
transform: Matrix4.identity() transform: Matrix4.identity()
..setEntry(3, 2, 0.001) // перспектива — без неё вращение плоское ..setEntry(3, 2, 0.001)
..rotateX(_tiltX * 0.12) ..rotateX(_tiltX * 0.22)
..rotateY(_tiltY * 0.12), ..rotateY(_tiltY * 0.22),
child: child, child: child,
); );
}, },
child: Container( // строится ОДИН раз, не пересоздаётся каждый кадр child: Container(
width: double.infinity, width: double.infinity,
height: 180, height: 180,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(20),
gradient: const LinearGradient( gradient: const LinearGradient(
begin: Alignment(-0.5, -0.5), begin: Alignment(-1.0, -1.0),
end: Alignment(0.5, 0.5), end: Alignment(1.0, 1.0),
colors: [Color(0xFF6B5DD3), Color(0xFF2A2040), Color(0xFF1A1625)], colors: [
Color(0xFF2A2545),
Color(0xFF1A1530),
Color(0xFF141228),
],
stops: [0.0, 0.5, 1.0], stops: [0.0, 0.5, 1.0],
), ),
boxShadow: [ boxShadow: [