audit #13: notification fix, sync guard, bypass gate, responsive layout, dynamic version, dart format, clock_display to backups, stats race fix, new locks, nginx swarm block

This commit is contained in:
esefxdz committed 2026-07-31 22:41:29 +03:00
1 parent e1c5d5b106
commit 54609a3119
11 files changed
+132 -67

No files matched your search

+56 -47
View File
@@ -29,61 +29,70 @@ class MainScreen extends StatelessWidget {
),
),
child: SafeArea(
child: Stack(
children: [
// ── Lightning — behind rain so drops stay visible during flash ──
const Positioned.fill(child: LightningEffect()),
child: LayoutBuilder(
builder: (context, constraints) {
// Proportional positioning — fractions of available height.
// On the reference device (~700 dp) this produces the exact
// original pixel positions (100, 175, 250, 520) and scales
// proportionally on taller/shorter screens.
final h = constraints.maxHeight;
return Stack(
children: [
// ── Lightning — behind rain so drops stay visible during flash ──
const Positioned.fill(child: LightningEffect()),
// ── Rain effect — behind all UI, baked into the background ──
const Positioned.fill(child: RainEffect()),
// ── Rain effect — behind all UI, baked into the background ──
const Positioned.fill(child: RainEffect()),
Positioned(
top: 0,
right: 4,
child: Builder(
builder: (ctx) => IconButton(
icon: const Icon(Icons.menu, color: AppColors.textWhite, size: 28),
onPressed: () => Scaffold.of(ctx).openEndDrawer(),
tooltip: 'Menu', splashRadius: 24,
Positioned(
top: 0,
right: 4,
child: Builder(
builder: (ctx) => IconButton(
icon: const Icon(Icons.menu, color: AppColors.textWhite, size: 28),
onPressed: () => Scaffold.of(ctx).openEndDrawer(),
tooltip: 'Menu', splashRadius: 24,
),
),
),
),
),
Positioned(
top: 100, // <-- CHANGE ME: timer distance from top
left: 0,
right: 0,
child: const Center(child: TimerBox()),
),
Positioned(
top: h * 0.143,
left: 0,
right: 0,
child: const Center(child: TimerBox()),
),
Positioned(
top: 175, // <-- CHANGE ME: support button from top
left: 0,
right: 0,
child: const Center(child: SupportButton()),
),
Positioned(
top: h * 0.250,
left: 0,
right: 0,
child: const Center(child: SupportButton()),
),
Positioned(
top: 250, // <-- CHANGE ME: connect button from top
left: 0,
right: 0,
child: const Center(child: ConnectButton()),
),
Positioned(
top: h * 0.357,
left: 0,
right: 0,
child: const Center(child: ConnectButton()),
),
Positioned(
top: 520, // <-- CHANGE ME: speed box from top
left: 0,
right: 0,
child: const Center(child: SpeedBox()),
),
Positioned(
top: h * 0.743,
left: 0,
right: 0,
child: const Center(child: SpeedBox()),
),
Positioned(
bottom: 16, // <-- CHANGE ME: status bar from bottom
left: 0,
right: 0,
child: const StatusBar(),
),
],
const Positioned(
bottom: 16,
left: 0,
right: 0,
child: StatusBar(),
),
],
);
},
),
),
),