Newer
Older
import 'package:gecko/globals.dart';
import 'package:gecko/models/cesiumPlus.dart';
import 'package:flutter/foundation.dart';

poka
committed
import 'package:provider/provider.dart';
class HistoryScreen extends StatelessWidget with ChangeNotifier {
final TextEditingController _outputPubkey = TextEditingController();
ScrollController scrollController = ScrollController();
final _formKey = GlobalKey<FormState>();
FocusNode _pubkeyFocus = FocusNode();
final double avatarsSize = 80;

poka
committed
FetchMore fetchMore;
FetchMoreOptions opts;

poka
committed
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);

poka
committed
print('Build pubkey : ' + _historyProvider.pubkey);
// _historyProvider.snackNode(context);
WidgetsBinding.instance.addPostFrameCallback((_) {
_historyProvider.snackNode(context);
});

poka
committed
return Scaffold(
floatingActionButton: Container(
height: 80.0,
width: 80.0,
child: FittedBox(
child: FloatingActionButton(
heroTag: "buttonScan",
onPressed: () async {
await _historyProvider.scan(context);
},
child: Container(
height: 40.0,
width: 40.0,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 3),
child: Image.asset('assets/qrcode-scan.png'))),
backgroundColor: Color(
0xffEFEFBF), //Color(0xffFFD68E), //Color.fromARGB(500, 204, 255, 255),
),
SizedBox(height: 0),

poka
committed
if (_historyProvider.pubkey != '')
historyQuery(context, _historyProvider),
Widget historyQuery(context, HistoryProvider _historyProvider) {

poka
committed
// HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
CesiumPlusProvider _cesiumPlusProvider =
Provider.of<CesiumPlusProvider>(context);

poka
committed
print("I'M HERE 1");
return Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Query(
options: QueryOptions(
document: gql(getHistory),
variables: <String, dynamic>{

poka
committed
'pubkey': _historyProvider.pubkey,
'number': nRepositories,
'cursor': null
},
),
builder: (QueryResult result, {fetchMore, refetch}) {
print("I'M HERE 2 ! $_isFirstExec");
// print(result.source.isEager);
if (result.isLoading && result.data == null) {

poka
committed
print("I'M HERE 3 !");
return const Center(
child: CircularProgressIndicator(),
);
}
if (result.hasException) {
print('Error GVA: ' + result.exception.toString());
return Column(children: <Widget>[
SizedBox(height: 50),
Text(
"Aucun noeud GVA valide n'a pu être trouvé.\nVeuillez réessayer ultérieurement.",
style: TextStyle(fontSize: 17.0),
)
]);
}
if (result.data == null && result.exception.toString() == null) {
return const Text('Aucune donnée à afficher.');
}
final num balance = _historyProvider
.removeDecimalZero(result.data['balance']['amount'] / 100);
opts = _historyProvider.checkQueryResult(
result, opts, _outputPubkey.text);

poka
committed
return NotificationListener(
child: Expanded(
child: ListView(
controller: scrollController,
children: <Widget>[
SizedBox(height: 20),

poka
committed
if (_historyProvider.pubkey != '')
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
padding:
const EdgeInsets.fromLTRB(12, 0, 5, 0),
child: FutureBuilder(
future: _cesiumPlusProvider
.getAvatar(_historyProvider.pubkey),
initialData: [
File(appPath.path +
'/default_avatar.png')
],
builder: (BuildContext context,
AsyncSnapshot<List> _avatar) {
cesiumData = _avatar.data;
// _cesiumPlusProvider.isComplete = true;
if (_avatar.connectionState !=
ConnectionState.done) {
return Image.file(
File(appPath.path +
'/default_avatar.png'),
height: avatarsSize);
}
if (_avatar.hasError) {
return Image.file(
File(appPath.path +
'/default_avatar.png'),
height: avatarsSize);
}
if (_avatar.hasData) {
return SingleChildScrollView(
padding: EdgeInsets.all(0.0),
child: Image.file(_avatar.data[0],
height: avatarsSize));
return Image.file(
File(appPath.path +
'/default_avatar.png'),
height: avatarsSize);
GestureDetector(
onTap: () {
Clipboard.setData(ClipboardData(
text: _historyProvider.pubkey));
_historyProvider.snackCopyKey(context);
},
child: Text(
_historyProvider
.getShortPubkey(_historyProvider.pubkey),
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.w800,
fontFamily: 'Monospace')),
),
30, 0, 5, 0), // .only(right: 15),
child: Text('TODO')),
SizedBox(width: 0)
if (_isFirstExec)
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
// padding: const EdgeInsets.,
child: FutureBuilder(
future: _cesiumPlusProvider
.getName(_historyProvider.pubkey),
initialData: '...',
return Text(
snapshot.data != ''
? snapshot.data
: '-',
style: TextStyle(fontSize: 20));
SizedBox(height: 18),
Container(
padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
child: Text(balance.toString() + ' Ğ1',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18.0))),
ElevatedButton(
style: ElevatedButton.styleFrom(
elevation: 1,
primary: Colors.grey[50], // background
onPrimary: Colors.black, // foreground
),
onPressed: () {
_historyProvider.switchProfileView();
},
child: Text(_historyProvider.historySwitchButtun,
style: TextStyle(
fontSize: 15, color: Color(0xffD28928)))),
// const Divider(
// color: Colors.grey,
// height: 5,
// thickness: 0.5,
// indent: 0,
// endIndent: 0,
// ),
_historyProvider.isHistoryScreen
? historyView(context, result)
: payView(context),

poka
committed
],
)),
onNotification: (t) {
if (t is ScrollEndNotification &&
scrollController.position.pixels >=

poka
committed
fetchMore(opts);
}
return true;
});
},
),
],
));
}
Widget payView(context) {
TextEditingController payComment = new TextEditingController();
return Stack(
overflow: Overflow.visible,
children: <Widget>[
Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SizedBox(height: 20),
Text('Commentaire:'),
Padding(
child: TextField(
controller: payComment,
maxLines: 2,
decoration: InputDecoration(),
style: TextStyle(
fontSize: 14.0,
color: Colors.black,
fontWeight: FontWeight.bold))),
SizedBox(height: 20),
Text('Montant (Ğ1):'),
Padding(
padding: EdgeInsets.all(8.0),
child: TextFormField(
textAlign: TextAlign.center,
maxLines: 1,
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.allow(RegExp(r'(^\d*\.?\d*)'))
],
),
Padding(
padding: const EdgeInsets.only(top: 15),
child: OutlineButton(
borderSide: BorderSide(width: 2, color: Color(0xffD28928)),
onPressed: () {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
}
},
child: Padding(
padding: const EdgeInsets.all(12),
child: Text("PAYER",
style: TextStyle(
fontSize: 25, color: Colors.grey[850]))),
))
),
],
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
Widget historyView(context, result) {
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
return _historyProvider.transBC == null
? Text('Aucune transaction à afficher.')
: Column(children: <Widget>[
for (var repository in _historyProvider.transBC)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: ListTile(
contentPadding: const EdgeInsets.all(5.0),
leading: Text(repository[1].toString(),
style: TextStyle(
fontSize: 12,
color: Colors.grey[800],
fontWeight: FontWeight.w700),
textAlign: TextAlign.center),
title: Text(repository[3],
style: TextStyle(
fontSize: 15.0, fontFamily: 'Monospace'),
textAlign: TextAlign.center),
subtitle: Text(repository[6] != '' ? repository[6] : '-',
style: TextStyle(fontSize: 12.0),
textAlign: TextAlign.center),
trailing: Text("${repository[4]} Ğ1",
style: TextStyle(fontSize: 14.0),
textAlign: TextAlign.justify),
dense: true,
isThreeLine: false,
onTap: () {
// this._outputPubkey.text = repository[2];
_historyProvider.isPubkey(context, repository[2]);
})),
if (result.isLoading)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(),
],
),
// if (_historyProvider.isTheEnd) // What I did before ...
if (!_historyProvider.pageInfo['hasPreviousPage'])
Column(children: <Widget>[
SizedBox(height: 15),
Text("Début de l'historique.",
textAlign: TextAlign.center,
style: TextStyle(fontSize: 20)),
SizedBox(height: 15)
])
]);
}