Create management portal in Flutter #39
This commit is contained in:
parent
f2db24b239
commit
9409622fef
@ -76,26 +76,62 @@ class MyHomePage extends StatefulWidget {
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
bool _allowAdd = true;
|
||||
String? _apiAuth;
|
||||
String? _apiPassword;
|
||||
String? _apiPort;
|
||||
String? _bucket;
|
||||
String? _encryptionToken;
|
||||
String? _hostNameOrIp;
|
||||
String _mountType = 'Encrypt';
|
||||
String _mountName = '';
|
||||
String _mountName = "";
|
||||
String? _path;
|
||||
|
||||
void _resetData() {
|
||||
_apiAuth = null;
|
||||
_apiPassword = null;
|
||||
_apiPort = null;
|
||||
_bucket = null;
|
||||
_encryptionToken = null;
|
||||
_hostNameOrIp = null;
|
||||
_mountName = '';
|
||||
_mountName = "";
|
||||
_mountType = 'Encrypt';
|
||||
_path = null;
|
||||
}
|
||||
|
||||
void _updateData(String name, String? value) {
|
||||
switch (name) {
|
||||
case 'ApiPassword':
|
||||
_apiPassword = value ?? '';
|
||||
return;
|
||||
|
||||
case 'ApiPort':
|
||||
_apiPort = value ?? '';
|
||||
return;
|
||||
|
||||
case 'Bucket':
|
||||
_bucket = value ?? '';
|
||||
return;
|
||||
|
||||
case 'EncryptionToken':
|
||||
_encryptionToken = value ?? '';
|
||||
return;
|
||||
|
||||
case 'HostNameOrIp':
|
||||
_hostNameOrIp = value ?? '';
|
||||
return;
|
||||
|
||||
case 'Name':
|
||||
_mountName = value ?? '';
|
||||
return;
|
||||
|
||||
case 'Provider':
|
||||
_mountType = value ?? 'Encrypt';
|
||||
return;
|
||||
|
||||
case 'Path':
|
||||
_path = value ?? '';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(context) {
|
||||
return Scaffold(
|
||||
@ -118,20 +154,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
builder: (_, MountList mountList, __) {
|
||||
return AddMountWidget(
|
||||
mountType: _mountType,
|
||||
onApiAuthChanged: (apiAuth) => _apiAuth = apiAuth,
|
||||
onApiPortChanged: (apiPort) => _apiPort = apiPort,
|
||||
onBucketChanged: (bucket) => _bucket = bucket,
|
||||
onEncryptionTokenChanged:
|
||||
(encryptionToken) =>
|
||||
_encryptionToken = encryptionToken,
|
||||
onHostNameOrIpChanged:
|
||||
(hostNameOrIp) =>
|
||||
_hostNameOrIp = hostNameOrIp,
|
||||
onNameChanged:
|
||||
(mountName) => _mountName = mountName ?? '',
|
||||
onPathChanged: (path) => _path = path,
|
||||
onTypeChanged:
|
||||
(mountType) => _mountType = mountType ?? 'S3',
|
||||
onDataChanged: _updateData,
|
||||
);
|
||||
},
|
||||
),
|
||||
@ -152,7 +175,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
||||
.add(
|
||||
_mountType,
|
||||
_mountName,
|
||||
apiAuth: _apiAuth,
|
||||
apiPassword: _apiPassword,
|
||||
apiPort: _apiPort,
|
||||
bucket: _bucket,
|
||||
encryptionToken: _encryptionToken,
|
||||
|
@ -51,7 +51,7 @@ class MountList with ChangeNotifier {
|
||||
Future<void> add(
|
||||
String type,
|
||||
String name, {
|
||||
String? apiAuth,
|
||||
String? apiPassword,
|
||||
String? apiPort,
|
||||
String? bucket,
|
||||
String? encryptionToken,
|
||||
@ -62,7 +62,7 @@ class MountList with ChangeNotifier {
|
||||
Uri.parse(
|
||||
Uri.encodeFull(
|
||||
'${getBaseUri()}/api/v1/add_mount?name=$name&type=$type&bucket=$bucket'
|
||||
'&path=$path&apiAuth=$apiAuth&apiPort=$apiPort&hostNameOrIp=$hostNameOrIp'
|
||||
'&path=$path&apiPassword=$apiPassword&apiPort=$apiPort&hostNameOrIp=$hostNameOrIp'
|
||||
'&encryptionToken=$encryptionToken',
|
||||
),
|
||||
),
|
||||
|
@ -2,26 +2,12 @@ import 'package:flutter/material.dart';
|
||||
|
||||
class AddMountWidget extends StatefulWidget {
|
||||
final String mountType;
|
||||
final void Function(String? newApiAuth) onApiAuthChanged;
|
||||
final void Function(String? newApiPort) onApiPortChanged;
|
||||
final void Function(String? newBucket) onBucketChanged;
|
||||
final void Function(String? newEncryptionToken) onEncryptionTokenChanged;
|
||||
final void Function(String? newHostNameOrIp) onHostNameOrIpChanged;
|
||||
final void Function(String? newName) onNameChanged;
|
||||
final void Function(String? newPath) onPathChanged;
|
||||
final void Function(String? newType) onTypeChanged;
|
||||
final void Function(String name, String? value) onDataChanged;
|
||||
|
||||
const AddMountWidget({
|
||||
super.key,
|
||||
required this.mountType,
|
||||
required this.onApiAuthChanged,
|
||||
required this.onApiPortChanged,
|
||||
required this.onBucketChanged,
|
||||
required this.onEncryptionTokenChanged,
|
||||
required this.onHostNameOrIpChanged,
|
||||
required this.onNameChanged,
|
||||
required this.onPathChanged,
|
||||
required this.onTypeChanged,
|
||||
required this.onDataChanged,
|
||||
});
|
||||
|
||||
@override
|
||||
@ -40,11 +26,15 @@ class _AddMountWidgetState extends State<AddMountWidget> {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
List<Widget> _createTextField(String name, onChanged, {String? value}) {
|
||||
List<Widget> _createTextField(
|
||||
String title,
|
||||
String dataName, {
|
||||
String? value,
|
||||
}) {
|
||||
return [
|
||||
const SizedBox(height: _padding),
|
||||
Text(
|
||||
name,
|
||||
title,
|
||||
textAlign: TextAlign.left,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
@ -53,7 +43,7 @@ class _AddMountWidgetState extends State<AddMountWidget> {
|
||||
),
|
||||
TextField(
|
||||
decoration: InputDecoration(),
|
||||
onChanged: onChanged,
|
||||
onChanged: (value) => widget.onDataChanged(dataName, value),
|
||||
controller: TextEditingController(text: value),
|
||||
),
|
||||
];
|
||||
@ -62,6 +52,7 @@ class _AddMountWidgetState extends State<AddMountWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final mountTypeLower = _mountType?.toLowerCase();
|
||||
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
@ -86,7 +77,7 @@ class _AddMountWidgetState extends State<AddMountWidget> {
|
||||
setState(() {
|
||||
_mountType = value;
|
||||
});
|
||||
widget.onTypeChanged(value);
|
||||
widget.onDataChanged('Provider', value);
|
||||
},
|
||||
items:
|
||||
_items.map<DropdownMenuItem<String>>((item) {
|
||||
@ -99,34 +90,30 @@ class _AddMountWidgetState extends State<AddMountWidget> {
|
||||
],
|
||||
),
|
||||
if (mountTypeLower != 'remote')
|
||||
..._createTextField('Configuration Name', widget.onNameChanged),
|
||||
if (mountTypeLower == 'encrypt')
|
||||
..._createTextField('Path', widget.onPathChanged),
|
||||
..._createTextField('Configuration Name', 'Name'),
|
||||
if (mountTypeLower == 'encrypt') ..._createTextField('Path', 'Path'),
|
||||
if (mountTypeLower == 'sia')
|
||||
..._createTextField('ApiAuth', widget.onApiAuthChanged),
|
||||
..._createTextField('ApiPassword', 'ApiPassword'),
|
||||
if (mountTypeLower == 's3' || mountTypeLower == 'sia')
|
||||
..._createTextField(
|
||||
'Bucket',
|
||||
widget.onBucketChanged,
|
||||
'Bucket',
|
||||
value: mountTypeLower == 'sia' ? 'default' : null,
|
||||
),
|
||||
if (mountTypeLower == 'remote' || mountTypeLower == 'sia')
|
||||
..._createTextField(
|
||||
'HostNameOrIp',
|
||||
widget.onHostNameOrIpChanged,
|
||||
'HostNameOrIp',
|
||||
value: 'localhost',
|
||||
),
|
||||
if (mountTypeLower == 'remote' || mountTypeLower == 'sia')
|
||||
..._createTextField(
|
||||
'ApiPort',
|
||||
widget.onApiPortChanged,
|
||||
'ApiPort',
|
||||
value: mountTypeLower == 'sia' ? '9980' : null,
|
||||
),
|
||||
if (mountTypeLower == 'remote')
|
||||
..._createTextField(
|
||||
'EncryptionToken',
|
||||
widget.onEncryptionTokenChanged,
|
||||
),
|
||||
..._createTextField('EncryptionToken', 'EncryptionToken'),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user