Fix desktop and sliver app bar add client

This commit is contained in:
Juan Gilsanz Polo 2024-03-09 13:57:15 +01:00
parent ad6cb92d4b
commit ce8d38958e
2 changed files with 91 additions and 69 deletions

View file

@ -235,71 +235,90 @@ class _ClientScreenState extends State<ClientScreen> {
if (widget.fullScreen == true) { if (widget.fullScreen == true) {
return Dialog.fullscreen( return Material(
child: Scaffold( child: NestedScrollView(
appBar: AppBar( headerSliverBuilder: (context, innerBoxIsScrolled) => [
leading: IconButton( SliverOverlapAbsorber(
onPressed: () => Navigator.pop(context), handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
icon: const Icon(Icons.close) sliver: SliverAppBar.large(
), pinned: true,
title: Text( floating: true,
widget.client != null centerTitle: false,
? AppLocalizations.of(context)!.client forceElevated: innerBoxIsScrolled,
: AppLocalizations.of(context)!.addClient leading: IconButton(
), onPressed: () => Navigator.pop(context),
actions: actions(), icon: const Icon(Icons.close)
), ),
title: Text(
widget.client != null
? AppLocalizations.of(context)!.client
: AppLocalizations.of(context)!.addClient
),
actions: actions(),
)
)
],
body: SafeArea( body: SafeArea(
child: ListView( top: false,
controller: _scrollController, bottom: true,
children: [ child: Builder(
if (!_nameValid || !_identifiersValid || !_dnsCacheValid) _Errors( builder: (context) => CustomScrollView(
nameValid: _nameValid, slivers: [
identifiersValid: _identifiersValid, SliverOverlapInjector(
dnsCacheValid: _dnsCacheValid handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
), ),
ClientForm( SliverList.list(
isFullScreen: true, children: [
client: widget.client, if (!_nameValid || !_identifiersValid || !_dnsCacheValid) _Errors(
nameController: nameController, nameValid: _nameValid,
identifiersControllers: identifiersControllers, identifiersValid: _identifiersValid,
selectedTags: selectedTags, dnsCacheValid: _dnsCacheValid
useGlobalSettingsFiltering: useGlobalSettingsFiltering, ),
enableFiltering: enableFiltering, ClientForm(
enableParentalControl: enableParentalControl, isFullScreen: true,
enableSafeBrowsing: enableSafeBrowsing, client: widget.client,
enableSafeSearch: enableSafeSearch, nameController: nameController,
safeSearch: safeSearch, identifiersControllers: identifiersControllers,
blockedServices: blockedServices, selectedTags: selectedTags,
updateBlockedServices: (v) => setState(() => blockedServices = v), useGlobalSettingsFiltering: useGlobalSettingsFiltering,
upstreamServers: upstreamServers, enableFiltering: enableFiltering,
updateUpstreamServers: (v) => setState(() => upstreamServers = v), enableParentalControl: enableParentalControl,
defaultSafeSearch: defaultSafeSearch, enableSafeBrowsing: enableSafeBrowsing,
useGlobalSettingsServices: useGlobalSettingsServices, enableSafeSearch: enableSafeSearch,
updateSelectedTags: (v) => setState(() => selectedTags = v), safeSearch: safeSearch,
updateIdentifiersControllers: (v) => setState(() => identifiersControllers = v), blockedServices: blockedServices,
enableDisableGlobalSettingsFiltering: enableDisableGlobalSettingsFiltering, updateBlockedServices: (v) => setState(() => blockedServices = v),
updateEnableFiltering: (v) => setState(() => enableFiltering = v), upstreamServers: upstreamServers,
updateEnableParentalControl: (v) => setState(() => enableParentalControl = v), updateUpstreamServers: (v) => setState(() => upstreamServers = v),
updateEnableSafeBrowsing: (v) => setState(() => enableSafeBrowsing = v), defaultSafeSearch: defaultSafeSearch,
updateEnableSafeSearch: (v) => setState(() => enableSafeSearch = v), useGlobalSettingsServices: useGlobalSettingsServices,
updateSafeSearch: (v) => setState(() => safeSearch = v), updateSelectedTags: (v) => setState(() => selectedTags = v),
updateUseGlobalSettingsServices: (v) => setState(() => useGlobalSettingsServices = v), updateIdentifiersControllers: (v) => setState(() => identifiersControllers = v),
ignoreClientQueryLog: _ignoreClientQueryLog, enableDisableGlobalSettingsFiltering: enableDisableGlobalSettingsFiltering,
ignoreClientStatistics: _ignoreClientStatistics, updateEnableFiltering: (v) => setState(() => enableFiltering = v),
updateIgnoreClientQueryLog: (v) => setState(() => _ignoreClientQueryLog = v), updateEnableParentalControl: (v) => setState(() => enableParentalControl = v),
updateIgnoreClientStatistics: (v) => setState(() => _ignoreClientStatistics = v), updateEnableSafeBrowsing: (v) => setState(() => enableSafeBrowsing = v),
enableDnsCache: _enableDnsCache, updateEnableSafeSearch: (v) => setState(() => enableSafeSearch = v),
updateEnableDnsCache: (v) => setState(() => _enableDnsCache = v), updateSafeSearch: (v) => setState(() => safeSearch = v),
dnsCacheField: _dnsCacheField, updateUseGlobalSettingsServices: (v) => setState(() => useGlobalSettingsServices = v),
dnsCacheError: _dnsCacheError, ignoreClientQueryLog: _ignoreClientQueryLog,
updateDnsCacheError: (v) => setState(() => _dnsCacheError = v), ignoreClientStatistics: _ignoreClientStatistics,
blockedServicesSchedule: _blockedServicesSchedule, updateIgnoreClientQueryLog: (v) => setState(() => _ignoreClientQueryLog = v),
setBlockedServicesSchedule: (v) => setState(() => _blockedServicesSchedule = v), updateIgnoreClientStatistics: (v) => setState(() => _ignoreClientStatistics = v),
), enableDnsCache: _enableDnsCache,
], updateEnableDnsCache: (v) => setState(() => _enableDnsCache = v),
), dnsCacheField: _dnsCacheField,
), dnsCacheError: _dnsCacheError,
updateDnsCacheError: (v) => setState(() => _dnsCacheError = v),
blockedServicesSchedule: _blockedServicesSchedule,
setBlockedServicesSchedule: (v) => setState(() => _blockedServicesSchedule = v),
),
],
)
],
),
)
)
), ),
); );
} }

View file

@ -148,11 +148,14 @@ class LogTile extends StatelessWidget {
} }
void openAddClient() { void openAddClient() {
openClientFormModal( Future.delayed(
context: context, const Duration(milliseconds: 0),
width: MediaQuery.of(context).size.width, () => openClientFormModal(
onConfirm: confirmAddClient, context: context,
initialData: ClientInitialData(name: "Client ${log.client}", ip: log.client) width: MediaQuery.of(context).size.width,
onConfirm: confirmAddClient,
initialData: ClientInitialData(name: "Client ${log.client}", ip: log.client)
)
); );
} }