Display unknown values as a dash and centralise repeated literals

Backend: notifications now show a plain "-" for an absent name, vendor, or
device type (was empty string / "(unknown)" / "Unknown"), via a single
UNKNOWN_PLACEHOLDER constant.

Frontend:
- Empty/unknown values render as an em dash everywhere, centralised in a new
  Placeholders.emptyValue constant (replaces inline '—' and '(unknown)').
- Route paths moved to a new Routes class, used by the router and every
  navigation call site.
- Device event type modelled as a DeviceEventType enum mirroring the backend
  (NewDevice/DeviceSeen) instead of bare string comparisons.
- Hardcoded EdgeInsets/SizedBox spacing replaced with existing Insets tokens.

Tests and formatting updated; all backend and frontend tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
rzuasti
2026-06-06 16:07:05 -04:00
co-authored by Claude Opus 4.8
parent cf8979f63d
commit a51b9c06dc
32 changed files with 295 additions and 180 deletions
+13 -12
View File
@@ -10,6 +10,7 @@ import 'theme/dimens.dart';
import 'utils/pref_utils.dart';
import 'widgets/offline_banner.dart';
import 'widgets/pagination_progress.dart';
import 'routes.dart';
typedef _NavDest = ({IconData icon, IconData activeIcon, String label});
@@ -40,7 +41,7 @@ final RouteObserver<ModalRoute<void>> routeObserver =
// Routes definitions
final GoRouter router = GoRouter(
initialLocation: '/',
initialLocation: Routes.home,
routes: [
ShellRoute(
observers: [routeObserver],
@@ -49,19 +50,19 @@ final GoRouter router = GoRouter(
},
routes: [
GoRoute(
path: '/',
path: Routes.home,
name: 'home',
builder: (context, state) => const HomeScreen(),
redirect: (context, state) => _redirectToSettings(),
),
GoRoute(
path: '/devices',
path: Routes.devices,
name: 'devices',
builder: (context, state) => const DeviceList(),
redirect: (context, state) => _redirectToSettings(),
routes: [
GoRoute(
path: ':macAddress',
path: Routes.deviceDetailSegment,
name: 'deviceDetail',
builder: (context, state) {
final mac = state.pathParameters['macAddress']!;
@@ -71,18 +72,18 @@ final GoRouter router = GoRouter(
],
),
GoRoute(
path: '/status',
path: Routes.status,
name: 'status',
builder: (context, state) => const StatusScreen(),
redirect: (context, state) => _redirectToSettings(),
),
GoRoute(
path: '/settings',
path: Routes.settings,
name: 'settings',
builder: (context, state) => Settings(),
),
GoRoute(
path: '/about',
path: Routes.about,
name: 'about',
builder: (context, state) => const About(),
),
@@ -310,19 +311,19 @@ int _calculateSelectedIndex(BuildContext context) {
void _onDestinationSelected(int index, BuildContext context) {
switch (index) {
case 0:
context.go('/');
context.go(Routes.home);
break;
case 1:
context.go('/devices');
context.go(Routes.devices);
break;
case 2:
context.go('/status');
context.go(Routes.status);
break;
case 3:
context.go('/settings');
context.go(Routes.settings);
break;
case 4:
context.go('/about');
context.go(Routes.about);
break;
}
}