This commit is contained in:
2026-07-27 21:32:03 +02:00
parent 160b4e4cda
commit 77c1747b40
23 changed files with 1392 additions and 87 deletions
+25 -24
View File
@@ -1,6 +1,4 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widget_previews.dart';
import 'package:go_router/go_router.dart';
import 'package:kooltab2/viewmodels/pin_lock_view_model.dart';
import 'package:kooltab2/viewmodels/product_list_view_model.dart';
@@ -43,6 +41,12 @@ class BarScreenView extends StatelessWidget {
icon: const Icon(Icons.refresh_rounded),
),
const SizedBox(width: 6),
IconButton(
tooltip: 'Settings',
onPressed: () => context.go('/settings'),
icon: const Icon(Icons.settings),
),
const SizedBox(width: 6),
IconButton(
tooltip: 'logout',
onPressed: (){
@@ -234,12 +238,12 @@ class _ProductGrid extends StatelessWidget {
padding: const EdgeInsets.all(20),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: scheme.onSurface.withOpacity(0.05),
color: scheme.onSurface.withValues(alpha: 0.05),
),
child: Icon(
Icons.inventory_2_outlined,
size: 40,
color: scheme.onSurface.withOpacity(0.3),
color: scheme.onSurface.withValues(alpha: 0.3),
),
),
const SizedBox(height: 16),
@@ -280,7 +284,7 @@ class _ProductGrid extends StatelessWidget {
vertical: 4,
),
decoration: BoxDecoration(
color: scheme.onSurface.withOpacity(0.06),
color: scheme.onSurface.withValues(alpha: 0.06),
borderRadius: BorderRadius.circular(999),
),
child: Row(
@@ -289,7 +293,7 @@ class _ProductGrid extends StatelessWidget {
Icon(
Icons.info_outline_rounded,
size: 14,
color: scheme.onSurface.withOpacity(0.5),
color: scheme.onSurface.withValues(alpha: 0.5),
),
const SizedBox(width: 4),
Flexible(
@@ -369,7 +373,7 @@ class _ProductTile extends StatelessWidget {
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(16),
border: Border.all(color: scheme.onSurface.withOpacity(0.08), width: 1),
border: Border.all(color: scheme.onSurface.withValues(alpha: 0.08), width: 1),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
@@ -396,7 +400,7 @@ class _ProductTile extends StatelessWidget {
Icon(
Icons.image_not_supported_outlined,
size: 34,
color: scheme.onSurface.withOpacity(0.3),
color: scheme.onSurface.withValues(alpha: 0.3),
),
const SizedBox(height: 6),
Text(
@@ -406,9 +410,6 @@ class _ProductTile extends StatelessWidget {
],
),
),
// Scrim stays black regardless of theme — it's for legibility
// of the (usually light/photographic) image beneath it, not
// themed UI chrome.
if (_hasImage)
Positioned.fill(
child: DecoratedBox(
@@ -418,7 +419,7 @@ class _ProductTile extends StatelessWidget {
end: Alignment.bottomCenter,
colors: [
Colors.transparent,
Colors.black.withOpacity(0.35),
Colors.black.withValues(alpha: 0.35),
],
stops: const [0.6, 1.0],
),
@@ -541,7 +542,7 @@ class _TabPanelState extends State<_TabPanel> {
vertical: 2,
),
decoration: BoxDecoration(
color: scheme.onSurface.withOpacity(0.06),
color: scheme.onSurface.withValues(alpha: 0.06),
borderRadius: BorderRadius.circular(999),
),
child: Text(
@@ -577,7 +578,7 @@ class _TabPanelState extends State<_TabPanel> {
Icon(
Icons.receipt_long_outlined,
size: 36,
color: scheme.onSurface.withOpacity(0.25),
color: scheme.onSurface.withValues(alpha: 0.25),
),
const SizedBox(height: 10),
Text(
@@ -627,7 +628,7 @@ class _OpenTabsList extends StatelessWidget {
return ListView.separated(
itemCount: tabs.length,
separatorBuilder: (_, __) => const SizedBox(height: 8),
separatorBuilder: (_, _) => const SizedBox(height: 8),
itemBuilder: (context, index) {
final tab = tabs[index];
final selected = tab.id == selectedTabId;
@@ -665,13 +666,13 @@ class _OpenTabsList extends StatelessWidget {
duration: const Duration(milliseconds: 150),
decoration: BoxDecoration(
color: selected
? primary.withOpacity(0.14)
: scheme.onSurface.withOpacity(0.04),
? primary.withValues(alpha: 0.14)
: scheme.onSurface.withValues(alpha: 0.04),
borderRadius: BorderRadius.circular(14),
border: Border.all(
color: selected
? primary.withOpacity(0.6)
: scheme.onSurface.withOpacity(0.06),
? primary.withValues(alpha: 0.6)
: scheme.onSurface.withValues(alpha: 0.06),
width: selected ? 1.4 : 1,
),
),
@@ -764,7 +765,7 @@ class _SelectedTabDetails extends StatelessWidget {
Icon(
Icons.local_bar_outlined,
size: 32,
color: scheme.onSurface.withOpacity(0.25),
color: scheme.onSurface.withValues(alpha: 0.25),
),
const SizedBox(height: 8),
Text(
@@ -776,7 +777,7 @@ class _SelectedTabDetails extends StatelessWidget {
)
: ListView.separated(
itemCount: tab.items.length,
separatorBuilder: (_, __) => const Divider(height: 1),
separatorBuilder: (_, _) => const Divider(height: 1),
itemBuilder: (context, index) {
final item = tab.items[index];
@@ -791,10 +792,10 @@ class _SelectedTabDetails extends StatelessWidget {
Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.primary.withOpacity(0.12),
color: Theme.of(context).colorScheme.primary.withValues(alpha: 0.12),
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: Theme.of(context).colorScheme.primary.withOpacity(0.3),
color: Theme.of(context).colorScheme.primary.withValues(alpha: 0.3),
),
),
child: Row(
@@ -858,7 +859,7 @@ class _TabItemRow extends StatelessWidget {
),
Container(
decoration: BoxDecoration(
color: scheme.onSurface.withOpacity(0.05),
color: scheme.onSurface.withValues(alpha: 0.05),
borderRadius: BorderRadius.circular(999),
),
child: Row(