Skip to content
Snippets Groups Projects
history.dart 13.7 KiB
Newer Older
poka's avatar
poka committed
import 'dart:io';

poka's avatar
poka committed
import 'package:flutter/services.dart';
poka's avatar
poka committed
import 'package:gecko/globals.dart';
import 'package:gecko/models/cesiumPlus.dart';
poka's avatar
poka committed
import 'package:gecko/models/queries.dart';
poka's avatar
poka committed
import 'package:gecko/models/history.dart';
poka's avatar
poka committed
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
poka's avatar
poka committed
import 'dart:ui';
poka's avatar
poka committed
import 'package:graphql_flutter/graphql_flutter.dart';
poka's avatar
poka committed
// ignore: must_be_immutable
poka's avatar
poka committed
class HistoryScreen extends StatelessWidget with ChangeNotifier {
poka's avatar
poka committed
  final TextEditingController _outputPubkey = TextEditingController();
  ScrollController scrollController = ScrollController();
  final nRepositories = 20;
poka's avatar
poka committed
  // HistoryProvider _historyProvider;
poka's avatar
poka committed
  final _formKey = GlobalKey<FormState>();
  FocusNode _pubkeyFocus = FocusNode();
poka's avatar
poka committed
  List cesiumData;
poka's avatar
poka committed
  @override
  Widget build(BuildContext context) {
    HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
poka's avatar
poka committed
    this._outputPubkey.text = _historyProvider.pubkey;
    print('Build pubkey : ' + _historyProvider.pubkey);
    // _historyProvider.snackNode(context);
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _historyProvider.snackNode(context);
    });
    return Scaffold(
        floatingActionButton: Container(
          height: 80.0,
          width: 80.0,
          child: FittedBox(
            child: FloatingActionButton(
              heroTag: "buttonScan",
              onPressed: () async {
              },
              child: Container(
                  height: 40.0,
                  width: 40.0,
                  child: Image.asset('images/scanner.png')),
              backgroundColor: Color(
                  0xffEFEFBF), //Color(0xffFFD68E), //Color.fromARGB(500, 204, 255, 255),
            ),
        ),
        body: Column(children: <Widget>[
poka's avatar
poka committed
          SizedBox(height: 20),
          TextField(
poka's avatar
poka committed
              autofocus: false,
              focusNode: _pubkeyFocus,
              // Entrée de la pubkey
              onChanged: (text) {
                print("Clé tappxé: $text");
              },
              controller: this._outputPubkey,
              maxLines: 1,
              textAlign: TextAlign.center,
              decoration: InputDecoration(
                hintText: 'Tappez/Collez une clé publique, ou scannez',
                hintStyle: TextStyle(fontSize: 14),
                contentPadding:
                    EdgeInsets.symmetric(horizontal: 7, vertical: 15),
                border: InputBorder.none,
                focusedBorder: InputBorder.none,
                enabledBorder: InputBorder.none,
                errorBorder: InputBorder.none,
                disabledBorder: InputBorder.none,
              ),
              style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold)),
poka's avatar
poka committed
          if (_historyProvider.pubkey != '') historyQuery(context),
poka's avatar
poka committed
  historyQuery(context) {
poka's avatar
poka committed
    _pubkeyFocus.unfocus();
poka's avatar
poka committed
    HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
poka's avatar
poka committed
    CesiumPlusProvider _cesiumPlusProvider =
        Provider.of<CesiumPlusProvider>(context);
    return Expanded(
        child: Column(
      mainAxisAlignment: MainAxisAlignment.start,
      mainAxisSize: MainAxisSize.max,
      children: <Widget>[
        Query(
          options: QueryOptions(
            document: gql(getHistory),
            variables: <String, dynamic>{
              'number': nRepositories,
              'cursor': null
            },
          ),
          builder: (QueryResult result, {refetch, fetchMore}) {
            if (result.isLoading && result.data == null) {
              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.');
poka's avatar
poka committed
            final num balance = _historyProvider
                .removeDecimalZero(result.data['balance']['amount'] / 100);
            opts = _historyProvider.checkQueryResult(
                result, opts, _outputPubkey.text);
poka's avatar
poka committed

            // Build history list
poka's avatar
poka committed
            // _cesiumPlusProvider.cesiumName.text = "NAMEE";
            return NotificationListener(
                child: Expanded(
                    child: ListView(
                  controller: scrollController,
                  children: <Widget>[
poka's avatar
poka committed
                    SizedBox(height: 15),
poka's avatar
poka committed
                      Row(
                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
poka's avatar
poka committed
                          mainAxisSize: MainAxisSize.min,
                          crossAxisAlignment: CrossAxisAlignment.center,
poka's avatar
poka committed
                          children: [
poka's avatar
poka committed
                            Container(
                                padding: const EdgeInsets.only(left: 30),
                                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: 65);
                                      }
                                      if (_avatar.hasError) {
                                        return Image.file(
                                            File(appPath.path +
                                                '/default_avatar.png'),
                                            height: 65);
                                      }
                                      if (_avatar.hasData) {
                                        return SingleChildScrollView(
                                            padding: EdgeInsets.all(0.0),
                                            child: Image.file(_avatar.data[0],
                                                height: 65));
                                      }
                                      return Image.file(
                                          File(appPath.path +
                                              '/default_avatar.png'),
                                          height: 65);
                                    })),
poka's avatar
poka committed
                            Text(balance.toString() + ' Ğ1',
                                textAlign: TextAlign.center,
                                style: TextStyle(fontSize: 30.0)),
                            Container(
poka's avatar
poka committed
                                padding: const EdgeInsets.fromLTRB(
                                    30, 0, 15, 0), // .only(right: 15),
poka's avatar
poka committed
                                child: IconButton(
                                    icon: Icon(Icons.payments),
                                    onPressed: () {
                                      showDialog(
                                          context: context,
                                          builder: (BuildContext context) {
                                            return paymentPopup(context);
                                          });
                                    },
                                    iconSize: 30,
                                    color: Color(0xFFB16E16)))
poka's avatar
poka committed
                          ]),
poka's avatar
poka committed
                    SizedBox(height: 10),
                    Row(
                        mainAxisAlignment: MainAxisAlignment.spaceAround,
                        crossAxisAlignment: CrossAxisAlignment.center,
                        children: [
                          Container(
                              // padding: const EdgeInsets.,
                              child: FutureBuilder(
                                  future: _cesiumPlusProvider
                                      .getName(_historyProvider.pubkey),
                                  initialData: '',
                                  builder: (context, snapshot) {
                                    return Text(snapshot.data);
                                  }))
                        ]),
                    SizedBox(height: 20),
poka's avatar
poka committed
                    const Divider(
                      color: Colors.grey,
                      height: 5,
                      thickness: 0.5,
                      indent: 0,
                      endIndent: 0,
                    ),
                    _historyProvider.transBC == null
poka's avatar
poka committed
                        ? Text('Aucune transaction à afficher.')
                        : loopTransactions(context, result),
                  ],
                )),
                onNotification: (t) {
                  if (t is ScrollEndNotification &&
                      scrollController.position.pixels >=
poka's avatar
poka committed
                          scrollController.position.maxScrollExtent * 0.7) {
poka's avatar
poka committed

poka's avatar
poka committed
  Widget loopTransactions(context, result) {
    HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);

    return Column(children: <Widget>[
      for (var repository in _historyProvider.transBC)
poka's avatar
poka committed
        Padding(
            padding: const EdgeInsets.symmetric(horizontal: 8.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[5],
                    style: TextStyle(fontSize: 14.0),
                    textAlign: TextAlign.center),
                subtitle: Text(
                    truncate(repository[2], 20,
                        omission: "...", position: TruncatePosition.end),
                    style: TextStyle(fontSize: 11.0),
                    textAlign: TextAlign.center),
                trailing: Text("${repository[3]} Ğ1",
                    style: TextStyle(fontSize: 14.0),
                    textAlign: TextAlign.justify),
                dense: true,
                isThreeLine: false,
                onTap: () {
                  // this._outputPubkey.text = repository[2];
                  _historyProvider.isPubkey(repository[2]);
                })),
      if (result.isLoading)
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CircularProgressIndicator(),
          ],
        ),
      if (_historyProvider.isTheEnd)
poka's avatar
poka committed
        Column(children: <Widget>[
          SizedBox(height: 15),
          Text("Début de l'historique.",
              textAlign: TextAlign.center, style: TextStyle(fontSize: 20)),
          SizedBox(height: 15)
        ])
    ]);
  }

  Widget paymentPopup(context) {
    return AlertDialog(
      content: Stack(
        overflow: Overflow.visible,
        children: <Widget>[
          Form(
            key: _formKey,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Text('À:'),
                Padding(
                  padding: EdgeInsets.all(8.0),
                  child: Text(this._outputPubkey.text,
                      textAlign: TextAlign.center,
                      style:
                          TextStyle(fontSize: 15, fontWeight: FontWeight.w500)),
                ),
                SizedBox(height: 20),
                Text('Montant (Ğ1):'),
                Padding(
                  padding: EdgeInsets.all(8.0),
                  child: TextFormField(
                    textAlign: TextAlign.center,
                    autofocus: true,
                    keyboardType: TextInputType.number,
                    inputFormatters: <TextInputFormatter>[
                      FilteringTextInputFormatter.allow(RegExp(r'(^\d*\.?\d*)'))
                    ],
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: RaisedButton(
                    child: Text("Payer"),
                    color: Color(0xffFFD68E),
                    onPressed: () {
                      if (_formKey.currentState.validate()) {
                        _formKey.currentState.save();
                      }
                    },
                  ),
                )
              ],
            ),
          ),
        ],
      ),
    );
poka's avatar
poka committed
  }