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