feat: Add wallet creation and access
This commit is contained in:
parent
9c0d1085ae
commit
f0e6dcfbbe
139
lib/home.dart
139
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<IndexPage> {
|
||||
late String wallet;
|
||||
List<String> 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: <Widget>[
|
||||
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<void> 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<void> 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: <Widget>[
|
||||
TextField(
|
||||
decoration: InputDecoration(labelText: 'Name'),
|
||||
onChanged: (value) {
|
||||
name = value;
|
||||
},
|
||||
),
|
||||
TextField(
|
||||
decoration: InputDecoration(labelText: 'XPUB'),
|
||||
onChanged: (value) {
|
||||
xpub = value;
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
actions: <Widget>[
|
||||
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<IndexPage> {
|
||||
});
|
||||
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: <Widget>[
|
||||
...walletNames.map((name) {
|
||||
return TextButton(
|
||||
onPressed: () => setWallet(name),
|
||||
child: Text(name),
|
||||
);
|
||||
}).toList(),
|
||||
SizedBox(height: 20),
|
||||
ElevatedButton(
|
||||
onPressed: showNewWalletDialog,
|
||||
child: Text('New Wallet'),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user