From f0e6dcfbbe5ef901533bd8cb82768ad77fd0ea4f Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Mon, 3 Jun 2024 14:16:29 +1000 Subject: [PATCH] feat: Add wallet creation and access --- lib/home.dart | 139 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 112 insertions(+), 27 deletions(-) diff --git a/lib/home.dart b/lib/home.dart index 2541a7f..d37de88 100644 --- a/lib/home.dart +++ b/lib/home.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; class IndexPage extends StatefulWidget { IndexPage( @@ -18,40 +20,88 @@ class IndexPage extends StatefulWidget { class _IndexPageState extends State { late String wallet; + List walletNames = []; @override void initState() { super.initState(); wallet = widget.wallet; + fetchWalletNames(); } - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(wallet), - ), - // Get wallet list from api and display here - body: Center( - child: LayoutBuilder( - builder: (BuildContext context, BoxConstraints constraints) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - TextButton( - onPressed: () => setWallet('wallet1'), - child: Text('Wallet 1')), - TextButton( - onPressed: () => setWallet('wallet2'), - child: Text('Wallet 2')), - TextButton( - onPressed: () => setWallet('wallet3'), - child: Text('Wallet 3')), - ], - ); - }, - ), - ), + Future fetchWalletNames() async { + final response = await http.get( + Uri.parse('https://api.firewallet.au/account?uuid=${widget.uuid}')); + if (response.statusCode == 200) { + final data = jsonDecode(response.body); + final wallets = data['wallets'] as List; + setState(() { + walletNames = + wallets.map((wallet) => wallet['name'] as String).toList(); + }); + } else { + // Handle error + print('Failed to load wallet names'); + } + } + + Future addNewWallet(String name, String xpub) async { + final response = await http.post( + Uri.parse( + 'https://api.firewallet.au/wallet?uuid=${widget.uuid}&name=$name&xpub=$xpub'), + ); + + if (response.statusCode == 200) { + // Refresh the wallet list after adding a new wallet + fetchWalletNames(); + } else { + // Handle error + print('Failed to add new wallet'); + } + } + + void showNewWalletDialog() { + String name = ''; + String xpub = ''; + showDialog( + context: context, + builder: (context) { + return AlertDialog( + title: Text('Add New Wallet'), + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + TextField( + decoration: InputDecoration(labelText: 'Name'), + onChanged: (value) { + name = value; + }, + ), + TextField( + decoration: InputDecoration(labelText: 'XPUB'), + onChanged: (value) { + xpub = value; + }, + ), + ], + ), + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + addNewWallet(name, xpub); + }, + child: Text('Add'), + ), + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text('Cancel'), + ), + ], + ); + }, ); } @@ -61,4 +111,39 @@ class _IndexPageState extends State { }); widget.setWallet(s); } + + int getWalletBalance() { + return 100; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('$wallet - ${getWalletBalance()} HNS'), + ), + body: Center( + child: LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ...walletNames.map((name) { + return TextButton( + onPressed: () => setWallet(name), + child: Text(name), + ); + }).toList(), + SizedBox(height: 20), + ElevatedButton( + onPressed: showNewWalletDialog, + child: Text('New Wallet'), + ), + ], + ); + }, + ), + ), + ); + } }