From e4b8cebe24d5525e69d408a6a263c73e3eb8c494 Mon Sep 17 00:00:00 2001 From: ahmedhanafy725 Date: Sat, 2 Mar 2024 20:49:52 +0200 Subject: [PATCH] Add farm widet --- app/lib/widgets/farm_item.dart | 140 +++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 app/lib/widgets/farm_item.dart diff --git a/app/lib/widgets/farm_item.dart b/app/lib/widgets/farm_item.dart new file mode 100644 index 00000000..8d35b953 --- /dev/null +++ b/app/lib/widgets/farm_item.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:threebotlogin/models/farm.dart'; +import 'package:threebotlogin/widgets/farm_node_item.dart'; + +class FarmItemWidget extends StatefulWidget { + const FarmItemWidget({super.key, required this.farm}); + final Farm farm; + + @override + State createState() => _FarmItemWidgetState(); +} + +class _FarmItemWidgetState extends State { + final walletAddressController = TextEditingController(); + final tfchainWalletSecretController = TextEditingController(); + final walletNameController = TextEditingController(); + final twinIdController = TextEditingController(); + final farmIdController = TextEditingController(); + + @override + void dispose() { + walletAddressController.dispose(); + tfchainWalletSecretController.dispose(); + walletNameController.dispose(); + twinIdController.dispose(); + farmIdController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + walletAddressController.text = widget.farm.walletAddress; + tfchainWalletSecretController.text = widget.farm.tfchainWalletSecret; + walletNameController.text = widget.farm.walletName; + farmIdController.text = widget.farm.farmId; + twinIdController.text = widget.farm.twinId; + + return ExpansionTile( + title: Text( + widget.farm.name, + style: Theme.of(context).textTheme.titleMedium!.copyWith( + color: Theme.of(context).colorScheme.onBackground, + ), + ), + childrenPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + children: [ + ListTile( + title: TextField( + readOnly: true, + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Theme.of(context).colorScheme.onBackground), + controller: walletAddressController, + decoration: const InputDecoration( + labelText: 'Stellar Payout Address', + )), + subtitle: const Text('This address will be used for payout.'), + trailing: IconButton( + onPressed: () async { + Clipboard.setData( + ClipboardData(text: walletAddressController.text)); + ScaffoldMessenger.of(context).clearSnackBars(); + ScaffoldMessenger.of(context) + .showSnackBar(const SnackBar(content: Text('Copied!'))); + }, + icon: const Icon(Icons.copy)), + ), + ListTile( + title: TextField( + readOnly: true, + obscureText: true, + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Theme.of(context).colorScheme.onBackground), + controller: tfchainWalletSecretController, + decoration: const InputDecoration( + labelText: 'TFChain Secret', + )), + subtitle: const Text( + 'You can login into ThreeFold Dashboard using this secret for more farm management.'), + trailing: IconButton( + onPressed: () { + Clipboard.setData( + ClipboardData(text: tfchainWalletSecretController.text)); + ScaffoldMessenger.of(context).clearSnackBars(); + ScaffoldMessenger.of(context) + .showSnackBar(const SnackBar(content: Text('Copied!'))); + }, + icon: const Icon(Icons.copy)), + ), + ListTile( + title: TextField( + readOnly: true, + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Theme.of(context).colorScheme.onBackground), + controller: walletNameController, + decoration: const InputDecoration( + labelText: 'Wallet Name', + )), + ), + ListTile( + title: TextField( + readOnly: true, + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Theme.of(context).colorScheme.onBackground), + controller: twinIdController, + decoration: const InputDecoration( + labelText: 'Twin ID', + )), + ), + ListTile( + title: TextField( + readOnly: true, + style: Theme.of(context) + .textTheme + .bodyMedium! + .copyWith(color: Theme.of(context).colorScheme.onBackground), + controller: farmIdController, + decoration: const InputDecoration( + labelText: 'Farm ID', + )), + ), + ExpansionTile( + title: const Text('Nodes'), + childrenPadding: const EdgeInsets.only(left: 20), + children: [ + for (final node in widget.farm.nodes) FarmNodeItemWidget(node: node) + ], + ) + ], + ); + } +}