initial commit

This commit is contained in:
2026-07-27 14:42:23 +02:00
commit 833c68a189
257 changed files with 17947 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
import 'package:flutter/material.dart';
import '../theme/theme_x.dart';
/// Centered "nothing here yet" placeholder — no services discovered, no
/// connections saved, no update history. An optional action gives the user
/// the next step rather than a dead end.
class EmptyState extends StatelessWidget {
const EmptyState({
super.key,
required this.icon,
required this.title,
this.message,
this.actionLabel,
this.onAction,
});
final IconData icon;
final String title;
final String? message;
final String? actionLabel;
final VoidCallback? onAction;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 40, horizontal: 24),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(icon, size: 30, color: context.colors.outline),
const SizedBox(height: 12),
Text(title, style: context.text.titleMedium, textAlign: TextAlign.center),
if (message != null) ...[
const SizedBox(height: 4),
Text(
message!,
style: context.text.bodySmall,
textAlign: TextAlign.center,
),
],
if (actionLabel != null && onAction != null) ...[
const SizedBox(height: 16),
OutlinedButton(onPressed: onAction, child: Text(actionLabel!)),
],
],
),
);
}
}