254 lines
8.4 KiB
Dart
254 lines
8.4 KiB
Dart
import 'dart:async';
|
|
import 'dart:typed_data';
|
|
import 'dart:ui';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
// import 'package:image_gallery_saver/image_gallery_saver.dart';
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
import 'package:qrscan/qrscan.dart' as scanner;
|
|
import 'package:intl/intl.dart';
|
|
// import 'package:flutter_html_view';
|
|
import 'api.dart';
|
|
import "package:dio/dio.dart";
|
|
|
|
void main() {
|
|
runApp(MyApp());
|
|
}
|
|
|
|
class MyApp extends StatefulWidget {
|
|
@override
|
|
_MyAppState createState() => _MyAppState();
|
|
}
|
|
|
|
class _MyAppState extends State<MyApp> {
|
|
Uint8List bytes = Uint8List(0);
|
|
TextEditingController _outputPubkey;
|
|
TextEditingController _outputBalance;
|
|
TextEditingController _outputHistory;
|
|
|
|
@override
|
|
initState() {
|
|
super.initState();
|
|
this._outputPubkey = new TextEditingController();
|
|
this._outputBalance = new TextEditingController();
|
|
this._outputHistory = new TextEditingController();
|
|
// checkNode().then((result) {
|
|
// setState(() {
|
|
// _result = result;
|
|
// });
|
|
// });
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return MaterialApp(
|
|
home: Scaffold(
|
|
backgroundColor: Colors.grey[300],
|
|
body: Builder(
|
|
builder: (BuildContext context) {
|
|
return ListView(
|
|
children: <Widget>[
|
|
Container(
|
|
color: Colors.white,
|
|
child: Column(
|
|
children: <Widget>[
|
|
SizedBox(height: 20),
|
|
TextField(
|
|
enabled: false,
|
|
controller: this._outputPubkey,
|
|
maxLines: 1,
|
|
textAlign: TextAlign.center,
|
|
decoration: InputDecoration(
|
|
hintText: 'Clé publique scanné',
|
|
hintStyle: TextStyle(fontSize: 15),
|
|
contentPadding: EdgeInsets.symmetric(
|
|
horizontal: 7, vertical: 15),
|
|
),
|
|
style: TextStyle(
|
|
fontSize: 15.0,
|
|
color: Colors.black,
|
|
fontWeight: FontWeight.bold)),
|
|
TextField(
|
|
enabled: false,
|
|
controller: this._outputBalance,
|
|
maxLines: 1,
|
|
textAlign: TextAlign.center,
|
|
decoration: InputDecoration(
|
|
hintText: 'Solde du compte scanné',
|
|
hintStyle: TextStyle(fontSize: 15),
|
|
contentPadding: EdgeInsets.symmetric(
|
|
horizontal: 7, vertical: 15),
|
|
),
|
|
style:
|
|
TextStyle(fontSize: 30.0, color: Colors.black)),
|
|
TextField(
|
|
enabled: false,
|
|
controller: this._outputHistory,
|
|
maxLines: null,
|
|
keyboardType: TextInputType.multiline,
|
|
decoration: InputDecoration(
|
|
prefixIcon: Icon(Icons.wrap_text),
|
|
hintText: 'Historique du compte scanné',
|
|
hintStyle: TextStyle(fontSize: 15),
|
|
contentPadding: EdgeInsets.symmetric(
|
|
horizontal: 7, vertical: 15),
|
|
),
|
|
style: TextStyle(
|
|
fontSize: 13.0,
|
|
height: 1.5,
|
|
color: Colors.black)),
|
|
SizedBox(height: 20),
|
|
this._buttonGroup(),
|
|
SizedBox(height: 70),
|
|
// Expanded(
|
|
// child: ListView.builder(
|
|
// padding: const EdgeInsets.all(8),
|
|
// itemCount: names.length,
|
|
// itemBuilder: (BuildContext context, int index) {
|
|
// return Container(
|
|
// height: 50,
|
|
// margin: EdgeInsets.all(2),
|
|
// child: Center(
|
|
// child: Text(
|
|
// '${names[index]} (${msgCount[index]})',
|
|
// style: TextStyle(fontSize: 18),
|
|
// )),
|
|
// );
|
|
// }))
|
|
],
|
|
),
|
|
),
|
|
],
|
|
);
|
|
},
|
|
)
|
|
// floatingActionButton: FloatingActionButton(
|
|
// onPressed: () => _scanBytes(),
|
|
// tooltip: 'Prennez une photo',
|
|
// child: const Icon(Icons.camera_alt),
|
|
// ),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buttonGroup() {
|
|
return Row(
|
|
children: <Widget>[
|
|
Expanded(
|
|
flex: 1,
|
|
child: SizedBox(
|
|
height: 120,
|
|
child: InkWell(
|
|
onTap: _scan,
|
|
child: Card(
|
|
child: Column(
|
|
children: <Widget>[
|
|
Expanded(
|
|
flex: 2,
|
|
child: Image.asset('images/scanner.png'),
|
|
),
|
|
Divider(height: 20),
|
|
Expanded(flex: 1, child: Text("Scanner")),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
Future checkNode() async {
|
|
final response = await Dio().post(graphqlEndpoint);
|
|
return response;
|
|
}
|
|
|
|
Future _scan() async {
|
|
await Permission.camera.request();
|
|
String barcode = await scanner.scan();
|
|
if (barcode == null) {
|
|
print('nothing return.');
|
|
} else {
|
|
this._outputPubkey.text = "";
|
|
this._outputBalance.text = "";
|
|
this._outputHistory.text = "";
|
|
// final udValue = await getUD();
|
|
this._outputPubkey.text = barcode;
|
|
final myBalance = await getBalance(barcode.toString());
|
|
this._outputBalance.text = myBalance.toString() + " Ğ1";
|
|
|
|
final myHistory = await getHistory(barcode.toString());
|
|
if (myHistory == false) {
|
|
return false;
|
|
}
|
|
|
|
String historyBC = "";
|
|
var j = 0;
|
|
for (var i in myHistory[0]) {
|
|
var dateBrut = i[0];
|
|
dateBrut = DateTime.fromMillisecondsSinceEpoch(dateBrut * 1000);
|
|
final DateFormat formatter = DateFormat('dd-MM-yy - H:M');
|
|
final String date = formatter.format(dateBrut);
|
|
final issuer = i[1];
|
|
final amount = i[2];
|
|
// final amountUD = i[3];
|
|
final comment = i[4];
|
|
historyBC += date.toString() +
|
|
" \n " +
|
|
issuer.toString() +
|
|
" \n " +
|
|
amount.toString() +
|
|
" Ğ1\n " +
|
|
comment.toString() +
|
|
"\n---\n";
|
|
j++;
|
|
if (j >= 10) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
String historyMP = "";
|
|
j = 0;
|
|
for (var i in myHistory[1]) {
|
|
if (i == null) {
|
|
break;
|
|
}
|
|
var dateBrut = "Now";
|
|
final issuer = i[1];
|
|
final amount = i[2];
|
|
// final amountUD = i[3];
|
|
final comment = i[4];
|
|
historyMP += "EN COURS DE RECEPTION\n" +
|
|
dateBrut.toString() +
|
|
" \n " +
|
|
issuer.toString() +
|
|
" \n " +
|
|
amount.toString() +
|
|
" Ğ1\n " +
|
|
comment.toString() +
|
|
"\n---\n";
|
|
}
|
|
|
|
var history;
|
|
// print(historyMP.toString());
|
|
if (historyMP == "") {
|
|
history = historyBC;
|
|
} else {
|
|
history = historyMP + '\n' + historyBC;
|
|
}
|
|
this._outputHistory.text = history;
|
|
}
|
|
}
|
|
|
|
// Future _generateBarCode(String inputCode) async {
|
|
// if (inputCode != null && inputCode.isNotEmpty) {
|
|
// // print("Résultat du scan: " + inputCode);
|
|
// Uint8List result = await scanner.generateBarCode(inputCode);
|
|
// this.setState(() => this.bytes = result);
|
|
// } else {
|
|
// print("Veuillez renseigner une clé publique");
|
|
// }
|
|
// }
|
|
}
|