advanced desktop mode

This commit is contained in:
Fabian Freund
2026-06-06 15:39:09 +02:00
parent 4a12acab99
commit 370c422e12
23 changed files with 732 additions and 78 deletions
@@ -21,8 +21,8 @@ import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:weblibre/features/gestures/data/models/gesture_settings.dart';
import 'package:weblibre/features/gestures/domain/repositories/gesture_settings.dart';
import 'package:weblibre/features/gestures/presentation/widgets/string_list_editor.dart';
import 'package:weblibre/features/settings/presentation/widgets/settings_detail.dart';
import 'package:weblibre/features/settings/presentation/widgets/string_list_settings_screen.dart';
import 'package:weblibre/utils/host_rules.dart';
/// Manages the list of sites on which gestures are disabled.
class GestureExcludedSitesScreen extends HookConsumerWidget {
@@ -34,38 +34,21 @@ class GestureExcludedSitesScreen extends HookConsumerWidget {
gestureSettingsWithDefaultsProvider.select((s) => s.excludedSites),
);
return SettingsCustomScrollScaffold(
return StringListSettingsScreen(
title: 'Excluded sites',
slivers: [
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 8, 16, 0),
child: Text(
'Gestures are disabled on these sites. Subdomains are included '
'(e.g. "example.com" also covers "m.example.com").',
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
),
),
),
SliverToBoxAdapter(
child: StringListEditor(
values: excludedSites,
hintText: 'example.com',
itemIcon: Icons.public_off,
emptyLabel: 'No sites excluded.',
normalize: normalizeGestureSiteHost,
onChanged: (next) async {
await ref
.read(gestureSettingsRepositoryProvider.notifier)
.updateSettings(
(current) => current.copyWith.excludedSites(next),
);
},
),
),
],
description:
'Gestures are disabled on these sites. Subdomains are included '
'(e.g. "example.com" also covers "m.example.com").',
values: excludedSites,
hintText: 'example.com',
itemIcon: Icons.public_off,
emptyLabel: 'No sites excluded.',
normalize: normalizeRuleHost,
onChanged: (next) async {
await ref
.read(gestureSettingsRepositoryProvider.notifier)
.updateSettings((current) => current.copyWith.excludedSites(next));
},
);
}
}