mirror of
https://github.com/koloideal/Casha.git
synced 2026-06-10 18:35:28 +03:00
update
This commit is contained in:
@@ -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: [
|
||||||
|
|||||||
Reference in New Issue
Block a user