Fix most of bugs, still some
This commit is contained in:
parent
2c67307399
commit
323d1ebee7
|
@ -43,18 +43,24 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:responsive_framework/responsive_framework.dart';
|
import 'package:responsive_framework/responsive_framework.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
import 'package:window_size/window_size.dart';
|
||||||
|
|
||||||
const bool enableSentry = true;
|
const bool enableSentry = true;
|
||||||
|
|
||||||
Future<void> main() async {
|
Future<void> main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
|
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
|
||||||
|
setWindowTitle('Ğecko');
|
||||||
|
setWindowMinSize(const Size(600, 800));
|
||||||
|
setWindowMaxSize(const Size(800, 1000));
|
||||||
|
}
|
||||||
|
|
||||||
HomeProvider _homeProvider = HomeProvider();
|
HomeProvider _homeProvider = HomeProvider();
|
||||||
|
await _homeProvider.initHive();
|
||||||
appVersion = await _homeProvider.getAppVersion();
|
appVersion = await _homeProvider.getAppVersion();
|
||||||
prefs = await SharedPreferences.getInstance();
|
prefs = await SharedPreferences.getInstance();
|
||||||
|
|
||||||
// Configure Hive and open boxes
|
// Configure Hive and open boxes
|
||||||
await Hive.initFlutter();
|
|
||||||
Hive.registerAdapter(WalletDataAdapter());
|
Hive.registerAdapter(WalletDataAdapter());
|
||||||
Hive.registerAdapter(ChestDataAdapter());
|
Hive.registerAdapter(ChestDataAdapter());
|
||||||
Hive.registerAdapter(G1WalletsListAdapter());
|
Hive.registerAdapter(G1WalletsListAdapter());
|
||||||
|
|
|
@ -103,7 +103,7 @@ class CesiumPlusProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Image> getAvatar(String _pubkey, double size) async {
|
Future<Image> getAvatar(String _pubkey, double size) async {
|
||||||
if (g1WalletsBox.get(_pubkey).avatar != null) {
|
if (g1WalletsBox.get(_pubkey)?.avatar != null) {
|
||||||
return g1WalletsBox.get(_pubkey).avatar;
|
return g1WalletsBox.get(_pubkey).avatar;
|
||||||
}
|
}
|
||||||
var dio = Dio();
|
var dio = Dio();
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import 'package:durt/durt.dart';
|
import 'package:durt/durt.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'dart:async';
|
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
|
||||||
class ChangePinProvider with ChangeNotifier {
|
class ChangePinProvider with ChangeNotifier {
|
||||||
|
@ -8,23 +7,23 @@ class ChangePinProvider with ChangeNotifier {
|
||||||
TextEditingController newPin = TextEditingController();
|
TextEditingController newPin = TextEditingController();
|
||||||
String pinToGive;
|
String pinToGive;
|
||||||
|
|
||||||
Future<NewWallet> get badWallet => null;
|
NewWallet get badWallet => null;
|
||||||
|
|
||||||
Future<NewWallet> changePin(String _oldPin) async {
|
NewWallet changePin(String _oldPin, {String newCustomPin}) {
|
||||||
try {
|
try {
|
||||||
final _dewif = chestBox.get(configBox.get('currentChest')).dewif;
|
final _dewif = chestBox.get(configBox.get('currentChest')).dewif;
|
||||||
|
|
||||||
NewWallet newWalletFile = Dewif().changePassword(
|
NewWallet newWalletFile = Dewif().changePassword(
|
||||||
dewif: _dewif,
|
dewif: _dewif,
|
||||||
oldPassword: _oldPin.toUpperCase(),
|
oldPassword: _oldPin.toUpperCase(),
|
||||||
);
|
newPassword: newCustomPin);
|
||||||
|
|
||||||
newPin.text = pinToGive = newWalletFile.password;
|
newPin.text = pinToGive = newWalletFile.password;
|
||||||
ischangedPin = true;
|
ischangedPin = true;
|
||||||
notifyListeners();
|
// notifyListeners();
|
||||||
return newWalletFile;
|
return newWalletFile;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.e('Impossible de changer le code PIN.');
|
log.e('Impossible de changer le code PIN: $e');
|
||||||
return badWallet;
|
return badWallet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
bool isCesiumIDVisible = false;
|
bool isCesiumIDVisible = false;
|
||||||
bool isCesiumPWDVisible = false;
|
bool isCesiumPWDVisible = false;
|
||||||
bool canImport = false;
|
bool canImport = false;
|
||||||
|
CesiumWallet cesiumWallet;
|
||||||
|
|
||||||
// Import Chest
|
// Import Chest
|
||||||
TextEditingController cellController0 = TextEditingController();
|
TextEditingController cellController0 = TextEditingController();
|
||||||
|
@ -171,7 +172,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
String changePinCode({bool reload}) {
|
String changePinCode({bool reload}) {
|
||||||
|
|
||||||
pin.text = randomSecretCode(5);
|
pin.text = randomSecretCode(5);
|
||||||
if (reload) {
|
if (reload) {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@ -219,17 +219,14 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
|
|
||||||
Future<void> generateCesiumWalletPubkey(
|
Future<void> generateCesiumWalletPubkey(
|
||||||
String _cesiumID, String _cesiumPWD) async {
|
String _cesiumID, String _cesiumPWD) async {
|
||||||
var cesiumWallet = CesiumWallet(_cesiumID, _cesiumPWD);
|
cesiumWallet = CesiumWallet(_cesiumID, _cesiumPWD);
|
||||||
actualWallet =
|
|
||||||
Dewif().generateCesiumDewif(cesiumWallet.seed, randomSecretCode(5));
|
|
||||||
String _walletPubkey = cesiumWallet.pubkey;
|
String _walletPubkey = cesiumWallet.pubkey;
|
||||||
|
|
||||||
cesiumPubkey.text = _walletPubkey;
|
cesiumPubkey.text = _walletPubkey;
|
||||||
pin.text = actualWallet.password;
|
|
||||||
log.d(_walletPubkey);
|
log.d(_walletPubkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future importCesiumWallet() async {
|
Future<int> importCesiumWallet() async {
|
||||||
// String _walletPubkey = await DubpRust.getLegacyPublicKey(
|
// String _walletPubkey = await DubpRust.getLegacyPublicKey(
|
||||||
// salt: _cesiumID, password: _cesiumPWD);
|
// salt: _cesiumID, password: _cesiumPWD);
|
||||||
// String shortPubkey = truncate(_walletPubkey, 9,
|
// String shortPubkey = truncate(_walletPubkey, 9,
|
||||||
|
@ -242,7 +239,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
cesiumPWD.text = '';
|
cesiumPWD.text = '';
|
||||||
cesiumPubkey.text = '';
|
cesiumPubkey.text = '';
|
||||||
canImport = false;
|
canImport = false;
|
||||||
pin.text = '';
|
|
||||||
isCesiumIDVisible = false;
|
isCesiumIDVisible = false;
|
||||||
isCesiumPWDVisible = false;
|
isCesiumPWDVisible = false;
|
||||||
|
|
||||||
|
@ -260,8 +256,12 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
chestName = 'Coffre à Césium ${chestNumber + 1}';
|
chestName = 'Coffre à Césium ${chestNumber + 1}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.d(pin.text);
|
||||||
|
NewWallet cesiumDewif =
|
||||||
|
Dewif().generateCesiumDewif(cesiumWallet.seed, pin.text);
|
||||||
|
|
||||||
ChestData cesiumChest = ChestData(
|
ChestData cesiumChest = ChestData(
|
||||||
dewif: actualWallet.dewif,
|
dewif: cesiumDewif.dewif,
|
||||||
name: chestName,
|
name: chestName,
|
||||||
imageName: 'cesium.png',
|
imageName: 'cesium.png',
|
||||||
defaultWallet: 0,
|
defaultWallet: 0,
|
||||||
|
@ -272,7 +272,8 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
// chestBox.toMap().
|
// chestBox.toMap().
|
||||||
await configBox.put('currentChest', chestKey);
|
await configBox.put('currentChest', chestKey);
|
||||||
|
|
||||||
notifyListeners();
|
pin.text = '';
|
||||||
|
return chestKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cesiumIDisVisible() {
|
void cesiumIDisVisible() {
|
||||||
|
|
|
@ -9,8 +9,10 @@ import 'dart:async';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/screens/old_history_pay.dart';
|
import 'package:gecko/screens/old_history_pay.dart';
|
||||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||||
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info/package_info.dart';
|
||||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||||
|
import 'package:path_provider/path_provider.dart' as pp;
|
||||||
|
|
||||||
class HomeProvider with ChangeNotifier {
|
class HomeProvider with ChangeNotifier {
|
||||||
int _currentIndex = 0;
|
int _currentIndex = 0;
|
||||||
|
@ -32,6 +34,25 @@ class HomeProvider with ChangeNotifier {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> initHive() async {
|
||||||
|
Directory hivePath;
|
||||||
|
|
||||||
|
if (Platform.isLinux || Platform.isMacOS) {
|
||||||
|
final home = Platform.environment['HOME'];
|
||||||
|
hivePath = Directory('$home/.gecko/db');
|
||||||
|
} else if (Platform.isWindows) {
|
||||||
|
final home = Platform.environment['UserProfile'];
|
||||||
|
hivePath = Directory('$home/.gecko/db');
|
||||||
|
} else if (Platform.isAndroid || Platform.isIOS || kIsWeb) {
|
||||||
|
final home = await pp.getApplicationDocumentsDirectory();
|
||||||
|
hivePath = Directory('${home.path}/db');
|
||||||
|
}
|
||||||
|
if (!await hivePath.exists()) {
|
||||||
|
await hivePath.create(recursive: true);
|
||||||
|
}
|
||||||
|
await Hive.initFlutter(hivePath.path);
|
||||||
|
}
|
||||||
|
|
||||||
Future<String> getAppVersion() async {
|
Future<String> getAppVersion() async {
|
||||||
String version;
|
String version;
|
||||||
String buildNumber;
|
String buildNumber;
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
// import 'dart:ffi';
|
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'dart:typed_data';
|
|
||||||
import 'package:crypto/crypto.dart';
|
import 'package:crypto/crypto.dart';
|
||||||
import 'package:durt/durt.dart';
|
import 'package:durt/durt.dart';
|
||||||
import 'package:fast_base58/fast_base58.dart';
|
import 'package:fast_base58/fast_base58.dart';
|
||||||
|
@ -12,7 +10,6 @@ import 'package:gecko/models/my_wallets.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:image_picker/image_picker.dart';
|
import 'package:image_picker/image_picker.dart';
|
||||||
import 'package:truncate/truncate.dart';
|
import 'package:truncate/truncate.dart';
|
||||||
import 'package:qrscan/qrscan.dart' as scanner;
|
|
||||||
|
|
||||||
class WalletOptionsProvider with ChangeNotifier {
|
class WalletOptionsProvider with ChangeNotifier {
|
||||||
TextEditingController pubkey = TextEditingController();
|
TextEditingController pubkey = TextEditingController();
|
||||||
|
@ -30,7 +27,6 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
|
|
||||||
String _getPubkeyFromDewif(
|
String _getPubkeyFromDewif(
|
||||||
String _dewif, _pin, int _pinLenght, int derivation) {
|
String _dewif, _pin, int _pinLenght, int derivation) {
|
||||||
String _pubkey;
|
|
||||||
RegExp regExp = RegExp(
|
RegExp regExp = RegExp(
|
||||||
r'^[A-Z0-9]+$',
|
r'^[A-Z0-9]+$',
|
||||||
caseSensitive: false,
|
caseSensitive: false,
|
||||||
|
@ -44,12 +40,11 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
if (derivation != -1) {
|
if (derivation != -1) {
|
||||||
try {
|
try {
|
||||||
final _wallet = HdWallet.fromDewif(_dewif, _pin);
|
final _wallet = HdWallet.fromDewif(_dewif, _pin);
|
||||||
_pubkey = _wallet.getPubkey(derivation);
|
pubkey.text = _wallet.getPubkey(derivation);
|
||||||
log.d(_pubkey);
|
log.d(pubkey.text);
|
||||||
pubkey.text = _pubkey;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
||||||
return _pubkey;
|
return pubkey.text;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.w('Bad PIN code !\n' + e);
|
log.w('Bad PIN code !\n' + e);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@ -58,10 +53,9 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
_pubkey = CesiumWallet.fromDewif(_dewif, _pin).pubkey;
|
pubkey.text = CesiumWallet.fromDewif(_dewif, _pin).pubkey;
|
||||||
pubkey.text = _pubkey;
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return _pubkey;
|
return pubkey.text;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
log.w('Bad PIN code !\n' + e);
|
log.w('Bad PIN code !\n' + e);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
@ -83,10 +77,14 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
'false') {
|
'false') {
|
||||||
pubkey.text = _localPubkey;
|
pubkey.text = _localPubkey;
|
||||||
isWalletUnlock = true;
|
isWalletUnlock = true;
|
||||||
|
log.d(pubkey.text);
|
||||||
return _localDewif;
|
return _localDewif;
|
||||||
} else {
|
} else {
|
||||||
throw 'Bad pubkey';
|
throw 'Bad pubkey';
|
||||||
}
|
}
|
||||||
|
} on ChecksumException catch (e) {
|
||||||
|
log.e(e.cause);
|
||||||
|
return 'bad';
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// _homeProvider.playSound('non', 0.6);
|
// _homeProvider.playSound('non', 0.6);
|
||||||
log.e('ERROR READING FILE: $e');
|
log.e('ERROR READING FILE: $e');
|
||||||
|
@ -202,7 +200,6 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
String getShortPubkey(String pubkey) {
|
String getShortPubkey(String pubkey) {
|
||||||
log.d(pubkey);
|
|
||||||
List<int> pubkeyByte = Base58Decode(pubkey);
|
List<int> pubkeyByte = Base58Decode(pubkey);
|
||||||
Digest pubkeyS256 = sha256.convert(sha256.convert(pubkeyByte).bytes);
|
Digest pubkeyS256 = sha256.convert(sha256.convert(pubkeyByte).bytes);
|
||||||
String pubkeyCheksum = Base58Encode(pubkeyS256.bytes);
|
String pubkeyCheksum = Base58Encode(pubkeyS256.bytes);
|
||||||
|
@ -223,10 +220,6 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Uint8List> generateQRcode(String _pubkey) async {
|
|
||||||
return await scanner.generateBarCode(_pubkey);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future changeAvatar() async {
|
Future changeAvatar() async {
|
||||||
File _image;
|
File _image;
|
||||||
final picker = ImagePicker();
|
final picker = ImagePicker();
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:durt/durt.dart';
|
import 'package:durt/durt.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
@ -33,7 +35,9 @@ class WalletsProfilesProvider with ChangeNotifier {
|
||||||
int nPage = 1;
|
int nPage = 1;
|
||||||
|
|
||||||
Future scan(context) async {
|
Future scan(context) async {
|
||||||
await Permission.camera.request();
|
if (Platform.isAndroid || Platform.isIOS) {
|
||||||
|
await Permission.camera.request();
|
||||||
|
}
|
||||||
String barcode;
|
String barcode;
|
||||||
try {
|
try {
|
||||||
barcode = await scanner.scan();
|
barcode = await scanner.scan();
|
||||||
|
@ -205,8 +209,6 @@ class WalletsProfilesProvider with ChangeNotifier {
|
||||||
} else if (nPage == 2) {
|
} else if (nPage == 2) {
|
||||||
nRepositories = 100;
|
nRepositories = 100;
|
||||||
}
|
}
|
||||||
log.d(nPage);
|
|
||||||
log.d(nRepositories);
|
|
||||||
nPage++;
|
nPage++;
|
||||||
|
|
||||||
if (fetchMoreCursor != null) {
|
if (fetchMoreCursor != null) {
|
||||||
|
|
|
@ -72,7 +72,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
builder: (QueryResult result, {fetchMore, refetch}) {
|
builder: (QueryResult result, {fetchMore, refetch}) {
|
||||||
if (result.isLoading && result.data == null) {
|
if (result.isLoading && result?.data == null) {
|
||||||
return const Center(
|
return const Center(
|
||||||
child: CircularProgressIndicator(),
|
child: CircularProgressIndicator(),
|
||||||
);
|
);
|
||||||
|
@ -87,7 +87,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
style: TextStyle(fontSize: 18),
|
style: TextStyle(fontSize: 18),
|
||||||
)
|
)
|
||||||
]);
|
]);
|
||||||
} else if (result.data == null) {
|
} else if (result?.data == null) {
|
||||||
return Column(children: const <Widget>[
|
return Column(children: const <Widget>[
|
||||||
SizedBox(height: 50),
|
SizedBox(height: 50),
|
||||||
Text(
|
Text(
|
||||||
|
@ -97,7 +97,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result.data['balance'] == null) {
|
if (result?.data['balance'] == null) {
|
||||||
_historyProvider.balance = 0.0;
|
_historyProvider.balance = 0.0;
|
||||||
} else {
|
} else {
|
||||||
_historyProvider.balance = _historyProvider
|
_historyProvider.balance = _historyProvider
|
||||||
|
@ -124,7 +124,9 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
if (t is ScrollEndNotification &&
|
if (t is ScrollEndNotification &&
|
||||||
scrollController.position.pixels >=
|
scrollController.position.pixels >=
|
||||||
scrollController.position.maxScrollExtent * 0.7 &&
|
scrollController.position.maxScrollExtent * 0.7 &&
|
||||||
_historyProvider.pageInfo['hasPreviousPage']) {
|
_historyProvider.pageInfo['hasPreviousPage'] &&
|
||||||
|
result.isNotLoading) {
|
||||||
|
log.d('FETCHMORE !!');
|
||||||
fetchMore(opts);
|
fetchMore(opts);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -295,8 +297,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
}
|
}
|
||||||
if (_avatar.hasData) {
|
if (_avatar.hasData) {
|
||||||
g1WalletsBox.get(repository[2]).avatar =
|
g1WalletsBox.get(repository[2]).avatar =
|
||||||
_avatar.data;
|
_avatar?.data;
|
||||||
return ClipOval(child: _avatar.data);
|
return ClipOval(child: _avatar?.data);
|
||||||
} else {
|
} else {
|
||||||
g1WalletsBox.get(repository[2]).avatar =
|
g1WalletsBox.get(repository[2]).avatar =
|
||||||
_cesiumPlusProvider
|
_cesiumPlusProvider
|
||||||
|
@ -427,8 +429,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
{VoidCallback refetch, FetchMore fetchMore}) {
|
{VoidCallback refetch, FetchMore fetchMore}) {
|
||||||
if (result.isLoading || result.hasException) {
|
if (result.isLoading || result.hasException) {
|
||||||
return const Text('...');
|
return const Text('...');
|
||||||
} else if (result.data['idty'] == null ||
|
} else if (result?.data['idty'] == null ||
|
||||||
result.data['idty']['username'] == null) {
|
result?.data['idty']['username'] == null) {
|
||||||
return const Text('');
|
return const Text('');
|
||||||
} else {
|
} else {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
|
@ -466,7 +468,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
return const Text('...');
|
return const Text('...');
|
||||||
}
|
}
|
||||||
return Text(
|
return Text(
|
||||||
"${_balance.data.toString()} Ğ1",
|
"${_balance?.data.toString()} Ğ1",
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 22, fontWeight: FontWeight.w500),
|
fontSize: 22, fontWeight: FontWeight.w500),
|
||||||
|
@ -506,13 +508,13 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
return AvatarFullscreen(_avatar.data);
|
return AvatarFullscreen(_avatar?.data);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
child: ClipOval(
|
child: ClipOval(
|
||||||
child: Image(
|
child: Image(
|
||||||
image: _avatar.data.image,
|
image: _avatar?.data?.image,
|
||||||
height: _avatarSize,
|
height: _avatarSize,
|
||||||
fit: BoxFit.cover,
|
fit: BoxFit.cover,
|
||||||
),
|
),
|
||||||
|
|
|
@ -13,6 +13,7 @@ import 'package:gecko/screens/myWallets/change_pin.dart';
|
||||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
|
||||||
int _nbrLinesName = 1;
|
int _nbrLinesName = 1;
|
||||||
bool _isNewNameValid = false;
|
bool _isNewNameValid = false;
|
||||||
|
@ -262,15 +263,11 @@ class CesiumWalletOptions extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
SizedBox(height: 4 * ratio),
|
SizedBox(height: 4 * ratio),
|
||||||
FutureBuilder(
|
QrImage(
|
||||||
future:
|
data: _walletOptions.pubkey.text,
|
||||||
_walletOptions.generateQRcode(_walletOptions.pubkey.text),
|
version: QrVersions.auto,
|
||||||
builder: (context, snapshot) {
|
size: isTall ? 300 : 270,
|
||||||
return snapshot.data != null
|
),
|
||||||
? Image.memory(snapshot.data,
|
|
||||||
height: isTall ? 300 : 270)
|
|
||||||
: const Text('-', style: TextStyle(fontSize: 20));
|
|
||||||
}),
|
|
||||||
SizedBox(height: 15 * ratio),
|
SizedBox(height: 15 * ratio),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
key: const Key('copyPubkey'),
|
key: const Key('copyPubkey'),
|
||||||
|
|
|
@ -17,7 +17,6 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||||
final String walletName;
|
final String walletName;
|
||||||
final MyWalletsProvider walletProvider;
|
final MyWalletsProvider walletProvider;
|
||||||
Directory appPath;
|
Directory appPath;
|
||||||
NewWallet _newWalletFile;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -49,9 +48,8 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||||
child: SafeArea(
|
child: SafeArea(
|
||||||
child: Column(children: <Widget>[
|
child: Column(children: <Widget>[
|
||||||
StatefulWrapper(
|
StatefulWrapper(
|
||||||
onInit: () async {
|
onInit: () {
|
||||||
_newWalletFile =
|
_changePin.newPin.text = randomSecretCode(5);
|
||||||
await _changePin.changePin(walletProvider.pinCode);
|
|
||||||
},
|
},
|
||||||
child: Container(),
|
child: Container(),
|
||||||
),
|
),
|
||||||
|
@ -82,8 +80,7 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||||
icon: const Icon(Icons.replay),
|
icon: const Icon(Icons.replay),
|
||||||
color: orangeC,
|
color: orangeC,
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
_newWalletFile =
|
_changePin.newPin.text = randomSecretCode(5);
|
||||||
await _changePin.changePin(walletProvider.pinCode);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -98,13 +95,14 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||||
primary: Colors.green[400], //smoothYellow, // background
|
primary: Colors.green[400], //smoothYellow, // background
|
||||||
onPrimary: Colors.black, // foreground
|
onPrimary: Colors.black, // foreground
|
||||||
),
|
),
|
||||||
onPressed: _changePin.newPin.text != ''
|
onPressed: () {
|
||||||
? () {
|
NewWallet _newWalletFile = _changePin.changePin(
|
||||||
_changePin.newPin.text = '';
|
walletProvider.pinCode,
|
||||||
_changePin.storeNewPinChest(context, _newWalletFile);
|
newCustomPin: _changePin.newPin.text);
|
||||||
walletProvider.pinCode = _changePin.newPin.text;
|
_changePin.newPin.text = '';
|
||||||
}
|
_changePin.storeNewPinChest(context, _newWalletFile);
|
||||||
: null,
|
walletProvider.pinCode = _changePin.newPin.text;
|
||||||
|
},
|
||||||
child: const Text(
|
child: const Text(
|
||||||
'Confirmer',
|
'Confirmer',
|
||||||
style: TextStyle(fontSize: 28),
|
style: TextStyle(fontSize: 28),
|
||||||
|
|
|
@ -69,8 +69,10 @@ class ChestOptions extends StatelessWidget {
|
||||||
height: 25,
|
height: 25,
|
||||||
),
|
),
|
||||||
const SizedBox(width: 18),
|
const SizedBox(width: 18),
|
||||||
const Text('Changer mon code secret',
|
const Text(
|
||||||
style: TextStyle(fontSize: 20, color: Colors.black)),
|
'Changer mon code secret',
|
||||||
|
style: TextStyle(fontSize: 20, color: Colors.black),
|
||||||
|
),
|
||||||
])),
|
])),
|
||||||
),
|
),
|
||||||
SizedBox(height: 10 * ratio),
|
SizedBox(height: 10 * ratio),
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:durt/durt.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/generate_wallets.dart';
|
import 'package:gecko/models/generate_wallets.dart';
|
||||||
|
@ -26,6 +27,13 @@ class GenerateFastChestScreen extends StatelessWidget {
|
||||||
GenerateWalletsProvider _generateWalletProvider =
|
GenerateWalletsProvider _generateWalletProvider =
|
||||||
Provider.of<GenerateWalletsProvider>(context);
|
Provider.of<GenerateWalletsProvider>(context);
|
||||||
|
|
||||||
|
if (_generateWalletProvider.mnemonicController.text == '') {
|
||||||
|
_generateWalletProvider.generateWordList();
|
||||||
|
_generateWalletProvider.mnemonicController.text =
|
||||||
|
_generateWalletProvider.generatedMnemonic;
|
||||||
|
_generateWalletProvider.pin.text = randomSecretCode(5);
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
toolbarHeight: 60 * ratio,
|
toolbarHeight: 60 * ratio,
|
||||||
|
@ -39,7 +47,11 @@ class GenerateFastChestScreen extends StatelessWidget {
|
||||||
child: FittedBox(
|
child: FittedBox(
|
||||||
child: FloatingActionButton(
|
child: FloatingActionButton(
|
||||||
heroTag: "buttonGenerateWallet",
|
heroTag: "buttonGenerateWallet",
|
||||||
onPressed: () => _generateWalletProvider.generateWordList(),
|
onPressed: () {
|
||||||
|
_generateWalletProvider.generateWordList();
|
||||||
|
_generateWalletProvider.mnemonicController.text =
|
||||||
|
_generateWalletProvider.generatedMnemonic;
|
||||||
|
},
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
height: 40.0,
|
height: 40.0,
|
||||||
width: 40.0,
|
width: 40.0,
|
||||||
|
@ -87,8 +99,7 @@ class GenerateFastChestScreen extends StatelessWidget {
|
||||||
icon: const Icon(Icons.replay),
|
icon: const Icon(Icons.replay),
|
||||||
color: orangeC,
|
color: orangeC,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_generateWalletProvider.changePinCode(
|
_generateWalletProvider.changePinCode(reload: true);
|
||||||
reload: true);
|
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -104,6 +115,12 @@ class GenerateFastChestScreen extends StatelessWidget {
|
||||||
? () async {
|
? () async {
|
||||||
_generateWalletProvider.nbrWord =
|
_generateWalletProvider.nbrWord =
|
||||||
_generateWalletProvider.getRandomInt();
|
_generateWalletProvider.getRandomInt();
|
||||||
|
_generateWalletProvider.actualWallet = Dewif()
|
||||||
|
.generateDewif(
|
||||||
|
_generateWalletProvider
|
||||||
|
.generatedMnemonic,
|
||||||
|
_generateWalletProvider.pin.text,
|
||||||
|
lang: 'french');
|
||||||
await Navigator.push(
|
await Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(builder: (context) {
|
MaterialPageRoute(builder: (context) {
|
||||||
|
@ -115,19 +132,6 @@ class GenerateFastChestScreen extends StatelessWidget {
|
||||||
.actualWallet);
|
.actualWallet);
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
await Future.delayed(
|
|
||||||
const Duration(milliseconds: 20));
|
|
||||||
// if (_generateWalletProvider.hasBeenStored) {
|
|
||||||
// _generateWalletProvider.hasBeenStored = false;
|
|
||||||
// await Navigator.pushAndRemoveUntil(context,
|
|
||||||
// MaterialPageRoute(builder: (context) {
|
|
||||||
// return UnlockingWallet(
|
|
||||||
// wallet: _myWalletClass.getDefaultWallet(
|
|
||||||
// configBox.get('currentChest')),
|
|
||||||
// action: "mywallets",
|
|
||||||
// );
|
|
||||||
// }), ModalRoute.withName('/'));
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
child: const Text('Enregistrer ce trousseau',
|
child: const Text('Enregistrer ce trousseau',
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:durt/durt.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/generate_wallets.dart';
|
import 'package:gecko/models/generate_wallets.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/models/my_wallets.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/models/wallet_options.dart';
|
import 'package:gecko/models/wallet_options.dart';
|
||||||
|
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class ImportWalletScreen extends StatelessWidget {
|
class ImportWalletScreen extends StatelessWidget {
|
||||||
|
@ -16,173 +18,190 @@ class ImportWalletScreen extends StatelessWidget {
|
||||||
GlobalKey _toolTipSecret = GlobalKey();
|
GlobalKey _toolTipSecret = GlobalKey();
|
||||||
Timer _debounce;
|
Timer _debounce;
|
||||||
GenerateWalletsProvider _generateWalletProvider =
|
GenerateWalletsProvider _generateWalletProvider =
|
||||||
Provider.of<GenerateWalletsProvider>(context);
|
Provider.of<GenerateWalletsProvider>(context, listen: false);
|
||||||
MyWalletsProvider _myWalletProvider =
|
|
||||||
Provider.of<MyWalletsProvider>(context);
|
|
||||||
WalletOptionsProvider _walletOptions =
|
WalletOptionsProvider _walletOptions =
|
||||||
Provider.of<WalletOptionsProvider>(context);
|
Provider.of<WalletOptionsProvider>(context, listen: false);
|
||||||
|
|
||||||
|
_generateWalletProvider.pin.text = randomSecretCode(5);
|
||||||
return WillPopScope(
|
return WillPopScope(
|
||||||
onWillPop: () {
|
onWillPop: () {
|
||||||
_generateWalletProvider.resetCesiumImportView();
|
_generateWalletProvider.resetCesiumImportView();
|
||||||
return Future<bool>.value(true);
|
return Future<bool>.value(true);
|
||||||
},
|
},
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
toolbarHeight: 60 * ratio,
|
toolbarHeight: 60 * ratio,
|
||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||||
|
onPressed: () {
|
||||||
|
_generateWalletProvider.resetCesiumImportView();
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
}),
|
||||||
|
title: const SizedBox(
|
||||||
|
height: 22,
|
||||||
|
child: Text('Importer un portefeuille'),
|
||||||
|
)),
|
||||||
|
body: Builder(
|
||||||
|
builder: (ctx) => SafeArea(
|
||||||
|
child: Column(children: <Widget>[
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
Consumer<GenerateWalletsProvider>(
|
||||||
|
builder: (context, walletProvider, _) {
|
||||||
|
return TextFormField(
|
||||||
|
autofocus: true,
|
||||||
|
onChanged: (text) {
|
||||||
|
if (_debounce?.isActive ?? false) {
|
||||||
|
_debounce.cancel();
|
||||||
|
}
|
||||||
|
_debounce = Timer(const Duration(milliseconds: 200), () {
|
||||||
|
walletProvider
|
||||||
|
.generateCesiumWalletPubkey(
|
||||||
|
text, walletProvider.cesiumPWD.text)
|
||||||
|
.then((value) {
|
||||||
|
walletProvider.canImport = true;
|
||||||
|
walletProvider.reloadBuild();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
controller: walletProvider.cesiumID,
|
||||||
|
obscureText: !walletProvider
|
||||||
|
.isCesiumIDVisible, //This will obscure text dynamically
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: 'Entrez votre identifiant Cesium',
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
walletProvider.isCesiumIDVisible
|
||||||
|
? Icons.visibility
|
||||||
|
: Icons.visibility_off,
|
||||||
|
color: Colors.black,
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
walletProvider.cesiumIDisVisible();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
Consumer<GenerateWalletsProvider>(
|
||||||
|
builder: (context, walletProvider, _) {
|
||||||
|
return TextFormField(
|
||||||
|
onChanged: (text) {
|
||||||
|
if (_debounce?.isActive ?? false) {
|
||||||
|
_debounce.cancel();
|
||||||
|
}
|
||||||
|
_debounce = Timer(const Duration(milliseconds: 200), () {
|
||||||
|
walletProvider
|
||||||
|
.generateCesiumWalletPubkey(
|
||||||
|
walletProvider.cesiumID.text, text)
|
||||||
|
.then((value) {
|
||||||
|
walletProvider.canImport = true;
|
||||||
|
walletProvider.reloadBuild();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
controller: walletProvider.cesiumPWD,
|
||||||
|
obscureText: !walletProvider
|
||||||
|
.isCesiumPWDVisible, //This will obscure text dynamically
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: 'Entrez votre mot de passe Cesium',
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
walletProvider.isCesiumPWDVisible
|
||||||
|
? Icons.visibility
|
||||||
|
: Icons.visibility_off,
|
||||||
|
color: Colors.black,
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
walletProvider.cesiumPWDisVisible();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
const SizedBox(height: 15),
|
||||||
|
GestureDetector(
|
||||||
|
onTap: () {
|
||||||
|
Clipboard.setData(ClipboardData(
|
||||||
|
text: _generateWalletProvider.cesiumPubkey.text));
|
||||||
|
_walletOptions.snackCopyKey(ctx);
|
||||||
|
},
|
||||||
|
child: Consumer<GenerateWalletsProvider>(
|
||||||
|
builder: (context, walletProvider, _) {
|
||||||
|
return Text(
|
||||||
|
_generateWalletProvider.cesiumPubkey.text,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 14.0,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontFamily: 'Monospace'),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 20),
|
||||||
|
toolTips(_toolTipSecret, 'Code secret:',
|
||||||
|
"Retenez bien votre code secret, il vous sera demandé à chaque paiement, ainsi que pour configurer votre portefeuille"),
|
||||||
|
Stack(
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
children: <Widget>[
|
||||||
|
TextField(
|
||||||
|
enabled: false,
|
||||||
|
controller: _generateWalletProvider.pin,
|
||||||
|
maxLines: 1,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
decoration: const InputDecoration(),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 30.0,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.bold)),
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Icons.replay),
|
||||||
|
color: orangeC,
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
_generateWalletProvider.resetCesiumImportView();
|
_generateWalletProvider.changePinCode(reload: true);
|
||||||
Navigator.of(context).pop();
|
},
|
||||||
}),
|
),
|
||||||
title: const SizedBox(
|
],
|
||||||
height: 22,
|
),
|
||||||
child: Text('Importer un portefeuille'),
|
const SizedBox(height: 30),
|
||||||
)),
|
Consumer<GenerateWalletsProvider>(
|
||||||
body: Builder(
|
builder: (context, walletProvider, _) {
|
||||||
builder: (ctx) => SafeArea(
|
return ElevatedButton(
|
||||||
child: Column(children: <Widget>[
|
style: ElevatedButton.styleFrom(
|
||||||
const SizedBox(height: 20),
|
primary: yellowC, // background
|
||||||
TextFormField(
|
onPrimary: Colors.black, // foreground
|
||||||
onChanged: (text) {
|
),
|
||||||
if (_debounce?.isActive ?? false) {
|
onPressed: walletProvider.canImport
|
||||||
_debounce.cancel();
|
? () async {
|
||||||
}
|
final chestKey =
|
||||||
_debounce =
|
await walletProvider.importCesiumWallet();
|
||||||
Timer(const Duration(milliseconds: 200), () {
|
walletProvider.reloadBuild();
|
||||||
_generateWalletProvider
|
|
||||||
.generateCesiumWalletPubkey(text,
|
await Navigator.pushAndRemoveUntil(
|
||||||
_generateWalletProvider.cesiumPWD.text)
|
context,
|
||||||
.then((value) {
|
MaterialPageRoute(builder: (context) {
|
||||||
_generateWalletProvider.canImport = true;
|
return UnlockingWallet(
|
||||||
_generateWalletProvider.reloadBuild();
|
wallet: WalletData(chest: chestKey),
|
||||||
});
|
action: "mywallets",
|
||||||
});
|
);
|
||||||
},
|
}),
|
||||||
keyboardType: TextInputType.text,
|
ModalRoute.withName('/'),
|
||||||
controller: _generateWalletProvider.cesiumID,
|
);
|
||||||
obscureText: !_generateWalletProvider
|
}
|
||||||
.isCesiumIDVisible, //This will obscure text dynamically
|
: null,
|
||||||
decoration: InputDecoration(
|
child: const Text(
|
||||||
hintText: 'Entrez votre identifiant Cesium',
|
'Importer ce portefeuille Cesium',
|
||||||
suffixIcon: IconButton(
|
style: TextStyle(fontSize: 20),
|
||||||
icon: Icon(
|
),
|
||||||
_generateWalletProvider.isCesiumIDVisible
|
);
|
||||||
? Icons.visibility
|
}),
|
||||||
: Icons.visibility_off,
|
]),
|
||||||
color: Colors.black,
|
),
|
||||||
),
|
),
|
||||||
onPressed: () {
|
),
|
||||||
_generateWalletProvider.cesiumIDisVisible();
|
);
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 15),
|
|
||||||
TextFormField(
|
|
||||||
onChanged: (text) {
|
|
||||||
if (_debounce?.isActive ?? false) {
|
|
||||||
_debounce.cancel();
|
|
||||||
}
|
|
||||||
_debounce =
|
|
||||||
Timer(const Duration(milliseconds: 200), () {
|
|
||||||
_generateWalletProvider
|
|
||||||
.generateCesiumWalletPubkey(
|
|
||||||
_generateWalletProvider.cesiumID.text,
|
|
||||||
text)
|
|
||||||
.then((value) {
|
|
||||||
_generateWalletProvider.canImport = true;
|
|
||||||
_generateWalletProvider.reloadBuild();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
keyboardType: TextInputType.text,
|
|
||||||
controller: _generateWalletProvider.cesiumPWD,
|
|
||||||
obscureText: !_generateWalletProvider
|
|
||||||
.isCesiumPWDVisible, //This will obscure text dynamically
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText: 'Entrez votre mot de passe Cesium',
|
|
||||||
suffixIcon: IconButton(
|
|
||||||
icon: Icon(
|
|
||||||
_generateWalletProvider.isCesiumPWDVisible
|
|
||||||
? Icons.visibility
|
|
||||||
: Icons.visibility_off,
|
|
||||||
color: Colors.black,
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
_generateWalletProvider.cesiumPWDisVisible();
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 15),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
Clipboard.setData(ClipboardData(
|
|
||||||
text: _generateWalletProvider
|
|
||||||
.cesiumPubkey.text));
|
|
||||||
_walletOptions.snackCopyKey(ctx);
|
|
||||||
},
|
|
||||||
child: Text(
|
|
||||||
_generateWalletProvider.cesiumPubkey.text,
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 14.0,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
fontFamily: 'Monospace'),
|
|
||||||
)),
|
|
||||||
const SizedBox(height: 20),
|
|
||||||
toolTips(_toolTipSecret, 'Code secret:',
|
|
||||||
"Retenez bien votre code secret, il vous sera demandé à chaque paiement, ainsi que pour configurer votre portefeuille"),
|
|
||||||
Stack(
|
|
||||||
alignment: Alignment.centerRight,
|
|
||||||
children: <Widget>[
|
|
||||||
TextField(
|
|
||||||
enabled: false,
|
|
||||||
controller: _generateWalletProvider.pin,
|
|
||||||
maxLines: 1,
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
decoration: const InputDecoration(),
|
|
||||||
style: const TextStyle(
|
|
||||||
fontSize: 30.0,
|
|
||||||
color: Colors.black,
|
|
||||||
fontWeight: FontWeight.bold)),
|
|
||||||
IconButton(
|
|
||||||
icon: const Icon(Icons.replay),
|
|
||||||
color: orangeC,
|
|
||||||
onPressed: () {
|
|
||||||
_generateWalletProvider.changePinCode(
|
|
||||||
reload: true);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
const SizedBox(height: 30),
|
|
||||||
ElevatedButton(
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
primary: yellowC, // background
|
|
||||||
onPrimary: Colors.black, // foreground
|
|
||||||
),
|
|
||||||
onPressed: _generateWalletProvider.canImport
|
|
||||||
? () {
|
|
||||||
_generateWalletProvider
|
|
||||||
.importCesiumWallet()
|
|
||||||
.then((value) {
|
|
||||||
_myWalletProvider.rebuildWidget();
|
|
||||||
_generateWalletProvider
|
|
||||||
.resetCesiumImportView();
|
|
||||||
Navigator.popUntil(
|
|
||||||
context,
|
|
||||||
ModalRoute.withName('/'),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
child: const Text('Importer ce portefeuille Cesium',
|
|
||||||
style: TextStyle(fontSize: 20))),
|
|
||||||
]),
|
|
||||||
))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget toolTips(_key, _text, _message) {
|
Widget toolTips(_key, _text, _message) {
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:gecko/screens/history.dart';
|
||||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:qr_flutter/qr_flutter.dart';
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class WalletOptions extends StatelessWidget {
|
class WalletOptions extends StatelessWidget {
|
||||||
|
@ -27,10 +28,11 @@ class WalletOptions extends StatelessWidget {
|
||||||
Provider.of<WalletOptionsProvider>(context, listen: false);
|
Provider.of<WalletOptionsProvider>(context, listen: false);
|
||||||
WalletsProfilesProvider _historyProvider =
|
WalletsProfilesProvider _historyProvider =
|
||||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||||
|
|
||||||
MyWalletsProvider _myWalletProvider =
|
MyWalletsProvider _myWalletProvider =
|
||||||
Provider.of<MyWalletsProvider>(context);
|
Provider.of<MyWalletsProvider>(context);
|
||||||
|
|
||||||
|
log.d(_walletOptions.pubkey.text);
|
||||||
|
|
||||||
final int _currentChest = _myWalletProvider.getCurrentChest();
|
final int _currentChest = _myWalletProvider.getCurrentChest();
|
||||||
final String shortPubkey =
|
final String shortPubkey =
|
||||||
_walletOptions.getShortPubkey(_walletOptions.pubkey.text);
|
_walletOptions.getShortPubkey(_walletOptions.pubkey.text);
|
||||||
|
@ -278,14 +280,10 @@ class WalletOptions extends StatelessWidget {
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
SizedBox(height: 4 * ratio),
|
SizedBox(height: 4 * ratio),
|
||||||
FutureBuilder(
|
QrImage(
|
||||||
future:
|
data: _walletOptions.pubkey.text,
|
||||||
_walletOptions.generateQRcode(_walletOptions.pubkey.text),
|
version: QrVersions.auto,
|
||||||
builder: (context, snapshot) {
|
size: isTall ? 300 : 270,
|
||||||
return snapshot.data != null
|
|
||||||
? Image.memory(snapshot.data, height: isTall ? 300 : 270)
|
|
||||||
: const Text('-', style: TextStyle(fontSize: 20));
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
SizedBox(height: 15 * ratio),
|
SizedBox(height: 15 * ratio),
|
||||||
Consumer<WalletOptionsProvider>(
|
Consumer<WalletOptionsProvider>(
|
||||||
|
|
|
@ -4,7 +4,6 @@ import 'package:gecko/models/chest_data.dart';
|
||||||
import 'package:gecko/models/my_wallets.dart';
|
import 'package:gecko/models/my_wallets.dart';
|
||||||
import 'package:gecko/models/queries.dart';
|
import 'package:gecko/models/queries.dart';
|
||||||
import 'package:gecko/models/wallet_data.dart';
|
import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/models/wallet_options.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/screens/common_elements.dart';
|
import 'package:gecko/screens/common_elements.dart';
|
||||||
import 'package:gecko/screens/myWallets/chest_options.dart';
|
import 'package:gecko/screens/myWallets/chest_options.dart';
|
||||||
|
@ -128,8 +127,6 @@ class WalletsHome extends StatelessWidget {
|
||||||
Widget myWalletsTiles(BuildContext context) {
|
Widget myWalletsTiles(BuildContext context) {
|
||||||
MyWalletsProvider _myWalletProvider =
|
MyWalletsProvider _myWalletProvider =
|
||||||
Provider.of<MyWalletsProvider>(context);
|
Provider.of<MyWalletsProvider>(context);
|
||||||
WalletOptionsProvider _walletOptions =
|
|
||||||
Provider.of<WalletOptionsProvider>(context);
|
|
||||||
|
|
||||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||||
|
|
||||||
|
@ -166,17 +163,14 @@ class WalletsHome extends StatelessWidget {
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
_walletOptions.readLocalWallet(
|
|
||||||
context,
|
|
||||||
_repository,
|
|
||||||
_myWalletProvider.pinCode,
|
|
||||||
_myWalletProvider.pinLenght);
|
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
SmoothTransition(
|
SmoothTransition(
|
||||||
page: WalletOptions(
|
page: WalletOptions(
|
||||||
wallet: _repository,
|
wallet: _repository,
|
||||||
)));
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
// Navigator.push(context,
|
// Navigator.push(context,
|
||||||
// MaterialPageRoute(builder: (context) {
|
// MaterialPageRoute(builder: (context) {
|
||||||
|
|
32
pubspec.lock
32
pubspec.lock
|
@ -281,6 +281,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.6"
|
version: "0.5.6"
|
||||||
|
desktop_window:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: desktop_window
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.0"
|
||||||
dio:
|
dio:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -814,7 +821,7 @@ packages:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.1.6"
|
version: "8.3.0"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -920,6 +927,20 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
qr_code_scanner:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: qr_code_scanner
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.1"
|
||||||
|
qr_flutter:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: qr_flutter
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
qrscan:
|
qrscan:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -1233,6 +1254,15 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.10"
|
version: "2.2.10"
|
||||||
|
window_size:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
path: "plugins/window_size"
|
||||||
|
ref: HEAD
|
||||||
|
resolved-ref: "03d957e8b5c99fc83cd4a781031b154ab3de8753"
|
||||||
|
url: "git://github.com/google/flutter-desktop-embedding.git"
|
||||||
|
source: git
|
||||||
|
version: "0.1.0"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -15,6 +15,10 @@ dependencies:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_driver:
|
flutter_driver:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
window_size:
|
||||||
|
git:
|
||||||
|
url: git://github.com/google/flutter-desktop-embedding.git
|
||||||
|
path: plugins/window_size
|
||||||
assorted_layout_widgets: ^5.2.1
|
assorted_layout_widgets: ^5.2.1
|
||||||
bubble: ^1.2.1
|
bubble: ^1.2.1
|
||||||
carousel_slider: ^4.0.0
|
carousel_slider: ^4.0.0
|
||||||
|
@ -38,11 +42,13 @@ dependencies:
|
||||||
package_info: ^2.0.2
|
package_info: ^2.0.2
|
||||||
path_provider: ^2.0.3
|
path_provider: ^2.0.3
|
||||||
pdf: ^3.5.0
|
pdf: ^3.5.0
|
||||||
permission_handler: 8.1.6
|
permission_handler: ^8.3.0
|
||||||
pin_code_fields: ^7.3.0
|
pin_code_fields: ^7.3.0
|
||||||
printing: ^5.6.0
|
printing: ^5.6.0
|
||||||
provider: ^6.0.1
|
provider: ^6.0.1
|
||||||
qrscan: ^0.3.2
|
qrscan: ^0.3.2
|
||||||
|
qr_code_scanner: ^0.6.1
|
||||||
|
qr_flutter: ^4.0.0
|
||||||
responsive_builder: ^0.4.1
|
responsive_builder: ^0.4.1
|
||||||
responsive_framework: ^0.1.4
|
responsive_framework: ^0.1.4
|
||||||
sentry: ^6.0.0
|
sentry: ^6.0.0
|
||||||
|
@ -56,6 +62,7 @@ dependencies:
|
||||||
xml: ^5.3.0
|
xml: ^5.3.0
|
||||||
pull_to_refresh: ^2.0.0
|
pull_to_refresh: ^2.0.0
|
||||||
dio: ^4.0.4
|
dio: ^4.0.4
|
||||||
|
desktop_window: ^0.4.0
|
||||||
durt: ^0.1.4
|
durt: ^0.1.4
|
||||||
|
|
||||||
flutter_icons:
|
flutter_icons:
|
||||||
|
|
Loading…
Reference in New Issue