Skip to content
Snippets Groups Projects
Commit cf335bf3 authored by vjrj's avatar vjrj
Browse files

More work with payments and qrs

parent 7cd4fab1
No related branches found
No related tags found
No related merge requests found
...@@ -20,12 +20,10 @@ class PaymentCubit extends HydratedCubit<PaymentState> { ...@@ -20,12 +20,10 @@ class PaymentCubit extends HydratedCubit<PaymentState> {
emit(newState); emit(newState);
} }
void selectUser(String publicKey, String? nick, Uint8List? avatar) { void selectUser(String publicKey, String? nick, Uint8List? avatar,
[double? amount]) {
final PaymentState newState = PaymentState( final PaymentState newState = PaymentState(
publicKey: publicKey, publicKey: publicKey, nick: nick, avatar: avatar, amount: amount);
nick: nick,
avatar: avatar,
);
emit(newState); emit(newState);
} }
......
...@@ -55,6 +55,11 @@ class PaymentState extends Equatable { ...@@ -55,6 +55,11 @@ class PaymentState extends Equatable {
amount: 0, amount: 0,
); );
@override
String toString() {
return '$publicKey ${amount ?? ""}';
}
@override @override
List<Object?> get props => List<Object?> get props =>
<dynamic>[publicKey, nick, avatar, description, amount, isSent]; <dynamic>[publicKey, nick, avatar, description, amount, isSent];
......
...@@ -56,7 +56,7 @@ Not found sample: ...@@ -56,7 +56,7 @@ Not found sample:
*/ */
Future<List<Contact>> searchWot(String searchTerm) async { Future<List<Contact>> searchWot(String searchTerm) async {
final Response response = await requestDuniterWithRetry( final Response response = await requestDuniterWithRetry(
'/wot/lookup/${searchTerm}', '/wot/lookup/$searchTerm',
retryWith404: false); retryWith404: false);
// Will be better to analyze the 404 response (to detect faulty node) // Will be better to analyze the 404 response (to detect faulty node)
final List<Contact> contacts = <Contact>[]; final List<Contact> contacts = <Contact>[];
......
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../../data/models/payment_cubit.dart';
import '../../data/models/payment_state.dart';
import 'g1_textfield.dart'; import 'g1_textfield.dart';
class PayForm extends StatefulWidget { class PayForm extends StatefulWidget {
...@@ -17,36 +20,40 @@ class _PayFormState extends State<PayForm> { ...@@ -17,36 +20,40 @@ class _PayFormState extends State<PayForm> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Form( return BlocBuilder<PaymentCubit, PaymentState>(
key: _formKey, builder: (BuildContext context, PaymentState state) {
child: Column( _amountController.text = state.amount != null ? '${state.amount}' : '';
crossAxisAlignment: CrossAxisAlignment.stretch, return Form(
children: <Widget>[ key: _formKey,
G1PayAmountField(controller: _amountController), child: Column(
const SizedBox(height: 10.0), crossAxisAlignment: CrossAxisAlignment.stretch,
TextField( children: <Widget>[
controller: _descController, G1PayAmountField(controller: _amountController),
decoration: InputDecoration( const SizedBox(height: 10.0),
labelText: tr('g1_form_pay_desc'), TextField(
hintText: tr('g1_form_pay_hint'), controller: _descController,
border: const OutlineInputBorder(), decoration: InputDecoration(
labelText: tr('g1_form_pay_desc'),
hintText: tr('g1_form_pay_hint'),
border: const OutlineInputBorder(),
),
maxLines: null,
), ),
maxLines: null, const SizedBox(height: 10.0),
), ElevatedButton(
const SizedBox(height: 10.0), onPressed:
ElevatedButton( null /* () {
onPressed:
null /* () {
if (_formKey.currentState != null && if (_formKey.currentState != null &&
_formKey.currentState!.validate()) { _formKey.currentState!.validate()) {
// Enviar formulario // Enviar formulario
} }
}, */ }, */
, ,
child: Text(tr('g1_form_pay_send')), child: Text(tr('g1_form_pay_send')),
), ),
], ],
), ),
); );
});
} }
} }
...@@ -12,7 +12,6 @@ import '../../../cubit/bottom_nav_cubit.dart'; ...@@ -12,7 +12,6 @@ import '../../../cubit/bottom_nav_cubit.dart';
import '../../../data/models/contact.dart'; import '../../../data/models/contact.dart';
import '../../../data/models/contact_cubit.dart'; import '../../../data/models/contact_cubit.dart';
import '../../../data/models/contact_state.dart'; import '../../../data/models/contact_state.dart';
import '../../../data/models/node_list_cubit.dart';
import '../../../data/models/payment_cubit.dart'; import '../../../data/models/payment_cubit.dart';
import '../../../data/models/payment_state.dart'; import '../../../data/models/payment_state.dart';
import '../../../g1/api.dart'; import '../../../g1/api.dart';
...@@ -36,7 +35,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -36,7 +35,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
List<Contact> _results = <Contact>[]; List<Contact> _results = <Contact>[];
bool _isLoading = false; bool _isLoading = false;
Future<void> _search(NodeListCubit cubit) async { Future<void> _search() async {
setState(() { setState(() {
_isLoading = true; _isLoading = true;
}); });
...@@ -64,7 +63,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -64,7 +63,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
}); });
} }
if (_results.isEmpty && validateKey(_searchTerm)) { if (_results.isEmpty && validateKey(_searchTerm)) {
// looks like a plain pub key logger('$_searchTerm looks like a plain pub key');
setState(() { setState(() {
_isLoading = true; _isLoading = true;
final Contact contact = Contact(pubkey: _searchTerm); final Contact contact = Contact(pubkey: _searchTerm);
...@@ -76,7 +75,6 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -76,7 +75,6 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final NodeListCubit nodeListCubit = context.read<NodeListCubit>();
final PaymentCubit paymentCubit = context.read<PaymentCubit>(); final PaymentCubit paymentCubit = context.read<PaymentCubit>();
final BottomNavCubit nav = context.read<BottomNavCubit>(); final BottomNavCubit nav = context.read<BottomNavCubit>();
return Scaffold( return Scaffold(
...@@ -100,19 +98,27 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -100,19 +98,27 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
if (scannedKey is String && if (scannedKey is String &&
scannedKey != null && scannedKey != null &&
scannedKey != '-1') { scannedKey != '-1') {
PaymentState? pay = parseScannedUri(scannedKey); final PaymentState? pay = parseScannedUri(scannedKey);
await _search(nodeListCubit); if (pay != null) {
logger('Scanned $pay');
_searchTerm = pay.publicKey;
await _search();
}
logger('QR result length ${_results.length}');
if (_results.length == 1 && pay != null) { if (_results.length == 1 && pay != null) {
final Contact contact = _results[0]; final Contact contact = _results[0];
pay = pay.copyWith( paymentCubit.selectUser(
nick: contact.name, avatar: contact.avatar); contact.pubkey,
} contact.nick ?? contact.name,
if (pay!.amount != null) { contact.avatar,
pay.amount);
} else if (pay!.amount != null) {
paymentCubit.selectKeyAmount(pay.publicKey, pay.amount!); paymentCubit.selectKeyAmount(pay.publicKey, pay.amount!);
} else { } else {
paymentCubit.selectKey(pay.publicKey); paymentCubit.selectKey(pay.publicKey);
} }
nav.updateIndex(0);
Navigator.pop(context);
} }
}), }),
IconButton( IconButton(
...@@ -135,7 +141,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -135,7 +141,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
suffixIcon: IconButton( suffixIcon: IconButton(
icon: const Icon(Icons.search), icon: const Icon(Icons.search),
onPressed: () { onPressed: () {
_search(nodeListCubit); _search();
}, },
), ),
), ),
...@@ -145,7 +151,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -145,7 +151,7 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
}); });
}, },
onSubmitted: (_) { onSubmitted: (_) {
_search(nodeListCubit); _search();
}, },
), ),
if (_isLoading) if (_isLoading)
...@@ -230,8 +236,6 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> { ...@@ -230,8 +236,6 @@ class _PayContactSearchPageState extends State<PayContactSearchPage> {
}); });
}), }),
); );
return widget;
} }
Contact _contactFromResult(Map<String, dynamic> record) { Contact _contactFromResult(Map<String, dynamic> record) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment