From 717b461eafaf5ef655f481f34655ff4b564cd116 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Tue, 4 Mar 2025 12:57:59 -0600 Subject: [PATCH] Create management portal in Flutter #39 --- web/repertory/lib/main.dart | 36 ++++++++++++++++++- .../lib/widgets/add_mount_widget.dart | 34 ++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 web/repertory/lib/widgets/add_mount_widget.dart diff --git a/web/repertory/lib/main.dart b/web/repertory/lib/main.dart index 9377f74b..7cff786e 100644 --- a/web/repertory/lib/main.dart +++ b/web/repertory/lib/main.dart @@ -4,6 +4,7 @@ import 'package:repertory/constants.dart' as constants; import 'package:repertory/helpers.dart'; import 'package:repertory/models/mount.dart'; import 'package:repertory/models/mount_list.dart'; +import 'package:repertory/widgets/add_mount_widget.dart'; import 'package:repertory/widgets/mount_list_widget.dart'; import 'package:repertory/widgets/mount_settings.dart'; @@ -85,7 +86,40 @@ class _MyHomePageState extends State { child: MountListWidget(), ), floatingActionButton: FloatingActionButton( - onPressed: () {}, + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Add Mount'), + content: Consumer( + builder: (context, mountList, widget) { + return AddMountWidget( + allowEncrypt: + !mountList.items.contains( + (item) => item.type == "encrypt", + ), + ); + }, + ), + actions: [ + TextButton( + child: const Text('Cancel'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: const Text('Add'), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + ], + ); + }, + ); + }, tooltip: 'Add', child: const Icon(Icons.add), ), diff --git a/web/repertory/lib/widgets/add_mount_widget.dart b/web/repertory/lib/widgets/add_mount_widget.dart new file mode 100644 index 00000000..a02111eb --- /dev/null +++ b/web/repertory/lib/widgets/add_mount_widget.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +class AddMountWidget extends StatefulWidget { + final bool allowEncrypt; + const AddMountWidget({super.key, required this.allowEncrypt}); + + @override + State createState() => _AddMountWidgetState(); +} + +class _AddMountWidgetState extends State { + @override + Widget build(BuildContext context) { + var items = ["S3", "Sia"]; + if (widget.allowEncrypt) { + items.insert(0, "Encrypt"); + } + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + DropdownButton( + value: "S3", + onChanged: (newValue) {}, + items: + items.map>((item) { + return DropdownMenuItem(value: item, child: Text(item)); + }).toList(), + ), + TextField(decoration: InputDecoration(labelText: 'Name')), + ], + ); + } +}