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