fix settings
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good

This commit is contained in:
2025-09-05 20:56:38 -05:00
parent 06bc838e27
commit a5ac2c3dfe
9 changed files with 164 additions and 34 deletions

View File

@@ -7,7 +7,7 @@ import 'package:flutter/material.dart';
import 'package:repertory/constants.dart' as constants;
import 'package:repertory/models/auth.dart';
import 'package:repertory/widgets/app_dropdown.dart';
import 'package:settings_ui/settings_ui.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
import 'package:sodium_libs/sodium_libs.dart' show SecureKey, StringX;
Future doShowDialog(BuildContext context, Widget child) => showDialog(

View File

@@ -7,7 +7,7 @@ import 'package:repertory/constants.dart' as constants;
import 'package:repertory/helpers.dart'
show Validator, displayErrorMessage, doShowDialog;
import 'package:repertory/widgets/app_dropdown.dart';
import 'package:settings_ui/settings_ui.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
void createBooleanSetting(
BuildContext context,

View File

@@ -128,7 +128,6 @@ class AppScaffold extends StatelessWidget {
overflow: TextOverflow.ellipsis,
style: textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w700,
letterSpacing: 0.2,
color: scheme.onSurface,
),
),

View File

@@ -1,6 +1,8 @@
// mount_settings.dart
import 'package:flutter/material.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart'
show SettingsTile, SettingsList, DevicePlatform;
import 'package:provider/provider.dart';
import 'package:repertory/constants.dart' as constants;
import 'package:repertory/helpers.dart'
@@ -14,7 +16,7 @@ import 'package:repertory/models/auth.dart';
import 'package:repertory/models/mount.dart';
import 'package:repertory/models/mount_list.dart';
import 'package:repertory/settings.dart';
import 'package:settings_ui/settings_ui.dart';
import 'package:repertory/widgets/settings/settings_section.dart';
class MountSettingsWidget extends StatefulWidget {
final bool isAdd;
@@ -38,8 +40,9 @@ class MountSettingsWidget extends StatefulWidget {
class _MountSettingsWidgetState extends State<MountSettingsWidget> {
@override
Widget build(BuildContext context) {
final scheme = Theme.of(context).colorScheme;
final theme = createSettingsTheme(scheme);
final theme = Theme.of(context);
final scheme = theme.colorScheme;
final settingsTheme = createSettingsTheme(scheme);
List<SettingsTile> commonSettings = [];
List<SettingsTile> encryptConfigSettings = [];
@@ -384,58 +387,52 @@ class _MountSettingsWidgetState extends State<MountSettingsWidget> {
}
});
const sectionMargin = EdgeInsetsDirectional.symmetric(
vertical: constants.padding / 2,
final titleStyle = theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w700,
color: scheme.onSurface,
);
return SettingsList(
shrinkWrap: false,
platform: DevicePlatform.device,
lightTheme: theme,
darkTheme: theme,
platform: DevicePlatform.web,
lightTheme: settingsTheme,
darkTheme: settingsTheme,
sections: [
if (encryptConfigSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Encrypt Config'),
title: Text('Encrypt Config', style: titleStyle),
tiles: encryptConfigSettings,
),
if (hostConfigSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Host Config'),
title: Text('Host Config', style: titleStyle),
tiles: hostConfigSettings,
),
if (remoteConfigSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Remote Config'),
title: Text('Remote Config', style: titleStyle),
tiles: remoteConfigSettings,
),
if (s3ConfigSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('S3 Config'),
title: Text('S3 Config', style: titleStyle),
tiles: s3ConfigSettings,
),
if (siaConfigSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Sia Config'),
title: Text('Sia Config', style: titleStyle),
tiles: siaConfigSettings,
),
if (remoteMountSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Remote Mount'),
title: Text('Remote Mount', style: titleStyle),
tiles: (widget.settings['RemoteMount']['Enable'] as bool)
? remoteMountSettings
: [remoteMountSettings[0]],
),
if (commonSettings.isNotEmpty)
SettingsSection(
margin: sectionMargin,
title: const Text('Settings'),
title: Text('Settings', style: titleStyle),
tiles: commonSettings,
),
],

View File

@@ -31,7 +31,6 @@ class _MountWidgetState extends State<MountWidget>
final titleStyle = textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.w700,
letterSpacing: 0.15,
color: scheme.onSurface,
);
final subStyle = textTheme.bodyMedium?.copyWith(color: scheme.onSurface);

View File

@@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:flutter_settings_ui/src/sections/abstract_settings_section.dart';
import 'package:flutter_settings_ui/src/sections/platforms/android_settings_section.dart';
import 'package:flutter_settings_ui/src/sections/platforms/ios_settings_section.dart';
import 'package:repertory/widgets/settings/web_settings_section.dart';
import 'package:flutter_settings_ui/src/tiles/abstract_settings_tile.dart';
import 'package:flutter_settings_ui/src/utils/platform_utils.dart';
import 'package:flutter_settings_ui/src/utils/settings_theme.dart';
class SettingsSection extends AbstractSettingsSection {
const SettingsSection({
required this.tiles,
this.margin,
this.title,
super.key,
});
final List<AbstractSettingsTile> tiles;
final EdgeInsetsDirectional? margin;
final Widget? title;
@override
Widget build(BuildContext context) {
final theme = SettingsTheme.of(context);
switch (theme.platform) {
case DevicePlatform.android:
case DevicePlatform.fuchsia:
case DevicePlatform.linux:
return AndroidSettingsSection(
title: title,
tiles: tiles,
margin: margin,
);
case DevicePlatform.iOS:
case DevicePlatform.macOS:
case DevicePlatform.windows:
return IOSSettingsSection(title: title, tiles: tiles, margin: margin);
case DevicePlatform.web:
return WebSettingsSection(title: title, tiles: tiles, margin: margin);
case DevicePlatform.device:
throw Exception(
"You can't use the DevicePlatform.device in this context. "
'Incorrect platform: SettingsSection.build',
);
}
}
}

View File

@@ -0,0 +1,76 @@
import 'package:flutter/material.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart';
// Container(
// height: 65 * scaleFactor,
// padding: EdgeInsetsDirectional.only(
// bottom: 5 * scaleFactor,
// start: 6,
// top: 40 * scaleFactor,
// ),
// child: title!,
// ),
class WebSettingsSection extends StatelessWidget {
const WebSettingsSection({
required this.tiles,
required this.margin,
required this.title,
super.key,
});
final List<AbstractSettingsTile> tiles;
final EdgeInsetsDirectional? margin;
final Widget? title;
@override
Widget build(BuildContext context) {
return buildSectionBody(context);
}
Widget buildSectionBody(BuildContext context) {
final theme = SettingsTheme.of(context);
final scaleFactor = MediaQuery.textScalerOf(context).scale(1);
return Padding(
padding: margin ?? EdgeInsets.zero,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (title != null)
Padding(
padding: EdgeInsetsDirectional.only(
bottom: 5 * scaleFactor,
start: 6,
top: 20 * scaleFactor,
),
child: title!,
),
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
elevation: 4,
color: theme.themeData.settingsSectionBackground,
child: buildTileList(),
),
],
),
);
}
Widget buildTileList() {
return ListView.separated(
shrinkWrap: true,
itemCount: tiles.length,
padding: EdgeInsets.zero,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (BuildContext context, int index) {
return tiles[index];
},
separatorBuilder: (BuildContext context, int index) {
return const Divider(height: 0, thickness: 1);
},
);
}
}

View File

@@ -3,6 +3,8 @@
import 'dart:convert' show jsonEncode;
import 'package:flutter/material.dart';
import 'package:flutter_settings_ui/flutter_settings_ui.dart'
show DevicePlatform, SettingsList, SettingsTile;
import 'package:http/http.dart' as http;
import 'package:provider/provider.dart';
import 'package:repertory/constants.dart' as constants;
@@ -19,7 +21,7 @@ import 'package:repertory/helpers.dart'
import 'package:repertory/models/auth.dart';
import 'package:repertory/settings.dart';
import 'package:repertory/utils/safe_set_state_mixin.dart';
import 'package:settings_ui/settings_ui.dart';
import 'package:repertory/widgets/settings/settings_section.dart';
class UISettingsWidget extends StatefulWidget {
final bool showAdvanced;
@@ -40,8 +42,9 @@ class _UISettingsWidgetState extends State<UISettingsWidget>
with SafeSetState<UISettingsWidget> {
@override
Widget build(BuildContext context) {
final scheme = Theme.of(context).colorScheme;
final theme = createSettingsTheme(scheme);
final theme = Theme.of(context);
final scheme = theme.colorScheme;
final settingsTheme = createSettingsTheme(scheme);
List<SettingsTile> commonSettings = [];
@@ -104,13 +107,21 @@ class _UISettingsWidgetState extends State<UISettingsWidget>
}
});
final titleStyle = theme.textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.w700,
color: scheme.onSurface,
);
return SettingsList(
shrinkWrap: false,
platform: DevicePlatform.device,
lightTheme: theme,
darkTheme: theme,
platform: DevicePlatform.web,
lightTheme: settingsTheme,
darkTheme: settingsTheme,
sections: [
SettingsSection(title: const Text('Settings'), tiles: commonSettings),
SettingsSection(
title: Text('Settings', style: titleStyle),
tiles: commonSettings,
),
],
);
}

View File

@@ -37,7 +37,7 @@ dependencies:
collection: ^1.19.1
http: ^1.3.0
provider: ^6.1.2
settings_ui: ^2.0.2
flutter_settings_ui: ^3.0.0
sodium_libs: ^3.4.6+1
convert: ^3.1.2