feat: add remote pull and push

This commit is contained in:
2026-09-23 00:19:58 +02:00
parent 9aaba69e3c
commit ccf5165417
29 changed files with 3042 additions and 24 deletions
+39 -1
View File
@@ -15,6 +15,7 @@ import 'package:flutter_slidable/flutter_slidable.dart';
import '../models/bar_tab.dart';
import '../models/product.dart';
import '../models/tab_item.dart';
import '../models/remote_command.dart';
import '../services/product_service.dart';
import '../utils/app_updater.dart';
import '../viewmodels/bar_screen_view_model.dart';
@@ -38,6 +39,43 @@ class _BarScreenViewState extends State<BarScreenView> {
});
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_checkRemoteEvent();
}
@override
void didUpdateWidget(covariant BarScreenView oldWidget) {
super.didUpdateWidget(oldWidget);
_checkRemoteEvent();
}
void _checkRemoteEvent() {
final viewModel = context.read<BarScreenViewModel>();
final event = viewModel.lastRemoteEvent;
if (event == null) return;
viewModel.clearRemoteEvent();
if (event.type == RemoteSyncEventType.tabClosedRemotely) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;
final l10n = AppLocalizations.of(context);
final message = l10n.tabClosedRemotely(
event.tabCustomerName ?? '',
event.requestedBy ?? '',
);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(message),
behavior: SnackBarBehavior.floating,
),
);
});
}
}
@override
Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
@@ -83,7 +121,7 @@ class _BarScreenViewState extends State<BarScreenView> {
const SizedBox(width: 6),
IconButton(
tooltip: l10n.refresh,
onPressed: () => viewModel.load(),
onPressed: () => viewModel.loadAndSync(),
icon: const Icon(Icons.refresh_rounded),
),
const SizedBox(width: 6),