1 import 'package:flutter/material.dart';
2 import 'package:proxmox_login_manager/proxmox_general_settings_form.dart';
3 import 'package:proxmox_login_manager/proxmox_login_form.dart';
4 import 'package:proxmox_login_manager/proxmox_login_model.dart';
5 import 'package:proxmox_dart_api_client/proxmox_dart_api_client.dart'
8 typedef OnLoginCallback = Function(proxclient.ProxmoxApiClient client);
10 class ProxmoxLoginSelector extends StatefulWidget {
11 final OnLoginCallback onLogin;
13 const ProxmoxLoginSelector({Key key, this.onLogin}) : super(key: key);
16 _ProxmoxLoginSelectorState createState() => _ProxmoxLoginSelectorState();
19 class _ProxmoxLoginSelectorState extends State<ProxmoxLoginSelector> {
20 Future<ProxmoxLoginStorage> loginStorage;
24 loginStorage = ProxmoxLoginStorage.fromLocalStorage();
28 Widget build(BuildContext context) {
33 crossAxisAlignment: CrossAxisAlignment.start,
42 'Virtual Environment',
51 icon: Icon(Icons.settings),
53 Navigator.of(context).push(MaterialPageRoute(
54 builder: (context) => ProxmoxGeneralSettingsForm(),
59 body: FutureBuilder<ProxmoxLoginStorage>(
61 builder: (context, snapshot) {
62 if (snapshot.hasData && (snapshot.data.logins?.isEmpty ?? true)) {
64 child: Text('Add an account'),
69 children: snapshot.data?.logins
70 ?.map((l) => ListTile(
71 title: Text(l.origin.host),
72 subtitle: Text(l.fullUsername),
73 trailing: Icon(Icons.navigate_next),
74 leading: PopupMenuButton(
75 itemBuilder: (context) => [
79 leading: Icon(Icons.delete),
80 title: Text('Delete'),
84 (b) => b.logins.remove(l))
87 Navigator.of(context).pop();
92 onTap: () => _login(user: l),
98 floatingActionButton: FloatingActionButton.extended(
99 onPressed: () => _login(isCreate: true),
101 icon: Icon(Icons.account_circle),
107 Future<void> _login({ProxmoxLoginModel user, bool isCreate = false}) async {
108 final client = await Navigator.of(context).push(MaterialPageRoute(
109 builder: (context) => ProxmoxLoginPage(
113 refreshFromStorage();
114 if (client != null) {
115 widget.onLogin(client);
119 void refreshFromStorage() {
121 loginStorage = ProxmoxLoginStorage.fromLocalStorage();