Create management portal in Flutter #39

This commit is contained in:
Scott E. Graves 2025-03-06 11:32:25 -06:00
parent 72a2567c83
commit eb8f66ebe9
2 changed files with 111 additions and 63 deletions

View File

@ -26,4 +26,36 @@ String initialCaps(String txt) {
return txt[0].toUpperCase() + txt.substring(1).toLowerCase(); return txt[0].toUpperCase() + txt.substring(1).toLowerCase();
} }
Map<String, dynamic> createDefaultSettings() => {'EventLevel': 'info'}; Map<String, dynamic> createDefaultSettings(String mountType) {
switch (mountType) {
case 'Encrypt':
return {
'EncryptConfig': {'EncryptionToken': '', 'Path': ''},
};
case 'Remote':
return {'EventLevel': 'info'};
case 'S3':
return {
'S3Config': {
'AccessKey': '',
'Bucket': '',
'Region': 'any',
'SecretKey': '',
'URL': '',
'UsePathStyle': false,
'UseRegionInURL': false,
},
};
case 'Sia':
return {
'HostConfig': {
'ApiPassword': '',
'ApiPort': '9980',
'HostNameOrIp': 'localhost',
},
'SiaConfig': {'Bucket': 'default'},
};
}
return {};
}

View File

@ -19,7 +19,13 @@ class _AddMountScreenState extends State<AddMountScreen> {
Mount? _mount; Mount? _mount;
final _mountNameController = TextEditingController(); final _mountNameController = TextEditingController();
String _mountType = ""; String _mountType = "";
var _settings = createDefaultSettings(); final Map<String, Map<String, dynamic>> _settings = {
"": {},
"Encrypt": createDefaultSettings("Encrypt"),
"Remote": createDefaultSettings("Remote"),
"S3": createDefaultSettings("S3"),
"Sia": createDefaultSettings("Sia"),
};
bool _showAdvanced = false; bool _showAdvanced = false;
@override @override
@ -45,10 +51,11 @@ class _AddMountScreenState extends State<AddMountScreen> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.max,
children: [ children: [
Card( Card(
margin: EdgeInsets.all(_padding), child: Padding(
padding: const EdgeInsets.all(_padding),
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@ -64,7 +71,9 @@ class _AddMountScreenState extends State<AddMountScreen> {
}); });
}, },
items: items:
providerTypeList.map<DropdownMenuItem<String>>((item) { providerTypeList.map<DropdownMenuItem<String>>((
item,
) {
return DropdownMenuItem<String>( return DropdownMenuItem<String>(
value: item, value: item,
child: Text(item), child: Text(item),
@ -74,10 +83,12 @@ class _AddMountScreenState extends State<AddMountScreen> {
], ],
), ),
), ),
),
if (_mountType.isNotEmpty) const SizedBox(height: _padding), if (_mountType.isNotEmpty) const SizedBox(height: _padding),
if (_mountType.isNotEmpty) if (_mountType.isNotEmpty)
Card( Card(
margin: EdgeInsets.all(_padding), child: Padding(
padding: const EdgeInsets.all(_padding),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@ -97,7 +108,7 @@ class _AddMountScreenState extends State<AddMountScreen> {
: Mount( : Mount(
MountConfig( MountConfig(
name: _mountNameController.text, name: _mountNameController.text,
settings: _settings, settings: _settings[_mountType],
type: _mountType, type: _mountType,
), ),
isAdd: true, isAdd: true,
@ -108,16 +119,21 @@ class _AddMountScreenState extends State<AddMountScreen> {
], ],
), ),
), ),
),
if (_mount != null) if (_mount != null)
Card( Expanded(
margin: EdgeInsets.all(_padding), child: Card(
child: Padding(
padding: const EdgeInsets.all(_padding),
child: MountSettingsWidget( child: MountSettingsWidget(
isAdd: true, isAdd: true,
mount: _mount!, mount: _mount!,
onChanged: (settings) => _settings = settings, onChanged: (settings) => _settings[_mountType] = settings,
showAdvanced: _showAdvanced, showAdvanced: _showAdvanced,
), ),
), ),
),
),
], ],
), ),
), ),