Compare commits
5 Commits
c5317f984d
...
1295d44665
Author | SHA1 | Date |
---|---|---|
poka | 1295d44665 | |
poka | 847619bef0 | |
poka | 5472a03bf3 | |
poka | 3df8b44d67 | |
poka | 81d1b7dd30 |
|
@ -1,5 +1,5 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.gecko">
|
||||
package="gecko.axiomteam.fr">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.gecko">
|
||||
package="gecko.axiomteam.fr">
|
||||
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
|
||||
calls FlutterMain.startInitialization(this); in its onCreate method.
|
||||
In most cases you can leave this as-is, but you if you want to provide
|
||||
|
@ -19,6 +19,8 @@
|
|||
<activity
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:name=".MainActivity"
|
||||
android:resource="@style/NormalTheme"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:launchMode="singleTop"
|
||||
android:theme="@style/LaunchTheme"
|
||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||
|
@ -29,16 +31,12 @@
|
|||
the Android process has started. This theme is visible to the user
|
||||
while the Flutter UI initializes. After that, this theme continues
|
||||
to determine the Window background behind the Flutter UI. -->
|
||||
<meta-data
|
||||
<!-- <meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
/> -->
|
||||
|
||||
<!-- Theme to apply as soon as Flutter begins rendering frames -->
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
|
|
After Width: | Height: | Size: 50 KiB |
|
@ -1,4 +1,4 @@
|
|||
package com.example.gecko
|
||||
package gecko.axiomteam.fr
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.example.gecko">
|
||||
package="gecko.axiomteam.fr">
|
||||
<!-- Flutter needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
|
|
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 112 KiB |
After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 211 KiB |
|
@ -299,7 +299,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.gecko;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gecko.axiomteam.fr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -431,7 +431,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.gecko;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gecko.axiomteam.fr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
|
@ -458,7 +458,7 @@
|
|||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.gecko;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gecko.axiomteam.fr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
|
|
@ -29,6 +29,8 @@ String cesiumPod = "https://g1.data.presles.fr";
|
|||
// Responsive ratios
|
||||
late bool isTall;
|
||||
late double ratio;
|
||||
late double screenWidth;
|
||||
late double screenHeight;
|
||||
|
||||
// Logger
|
||||
var log = Logger();
|
||||
|
@ -37,7 +39,7 @@ var log = Logger();
|
|||
Color orangeC = const Color(0xffd07316);
|
||||
Color yellowC = const Color(0xffFFD68E);
|
||||
Color floattingYellow = const Color(0xffEFEFBF);
|
||||
Color backgroundColor = const Color(0xFFF5F5F5);
|
||||
Color backgroundColor = const Color(0xfff9f9f1);
|
||||
|
||||
// Substrate settings
|
||||
const int ss58 = 42;
|
||||
|
|
|
@ -155,25 +155,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<durt.NewWallet?> generateWallet(String generatedMnemonic,
|
||||
{required bool isImport}) async {
|
||||
try {
|
||||
actualWallet = await durt.Dewif().generateDewif(
|
||||
generatedMnemonic, durt.randomSecretCode(pinLength),
|
||||
lang: appLang);
|
||||
} catch (e) {
|
||||
log.e(e);
|
||||
}
|
||||
|
||||
if (!isImport) {
|
||||
mnemonicController.text = generatedMnemonic;
|
||||
pin.text = actualWallet!.password;
|
||||
}
|
||||
// notifyListeners();
|
||||
|
||||
return actualWallet;
|
||||
}
|
||||
|
||||
String changePinCode({required bool reload}) {
|
||||
pin.text = durt.randomSecretCode(pinLength);
|
||||
if (reload) {
|
||||
|
@ -229,56 +210,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
log.d(_walletPubkey);
|
||||
}
|
||||
|
||||
// Future<int?> importCesiumWallet() async {
|
||||
// // String _walletPubkey = await DubpRust.getLegacyPublicKey(
|
||||
// // salt: _cesiumID, password: _cesiumPWD);
|
||||
// // String shortPubkey = truncate(_walletPubkey, 9,
|
||||
// // omission: "...", position: TruncatePosition.end);
|
||||
// // await storeWallet(
|
||||
// // actualWallet, 'Portefeuille Cesium - $shortPubkey', context);
|
||||
// // NewWallet myCesiumWallet = await DubpRust.genWalletFromDeprecatedSaltPassword(salt: _cesiumID, password: _cesiumPWD);
|
||||
|
||||
// cesiumID.text = '';
|
||||
// cesiumPWD.text = '';
|
||||
// cesiumPubkey.text = '';
|
||||
// canImport = false;
|
||||
// isCesiumIDVisible = false;
|
||||
// isCesiumPWDVisible = false;
|
||||
|
||||
// int chestNumber = 0;
|
||||
// chestBox.toMap().forEach((key, value) {
|
||||
// if (value.isCesium!) {
|
||||
// chestNumber++;
|
||||
// }
|
||||
// });
|
||||
|
||||
// String chestName;
|
||||
// if (chestNumber == 0) {
|
||||
// chestName = 'Coffre à Césium';
|
||||
// } else {
|
||||
// chestName = 'Coffre à Césium ${chestNumber + 1}';
|
||||
// }
|
||||
|
||||
// log.d(pin.text);
|
||||
// durt.NewWallet cesiumDewif =
|
||||
// await durt.Dewif().generateCesiumDewif(cesiumWallet.seed, pin.text);
|
||||
|
||||
// ChestData cesiumChest = ChestData(
|
||||
// dewif: cesiumDewif.dewif,
|
||||
// name: chestName,
|
||||
// imageName: 'cesium.png',
|
||||
// defaultWallet: 0,
|
||||
// isCesium: true);
|
||||
|
||||
// await chestBox.add(cesiumChest).then((value) => null);
|
||||
// int? chestKey = await chestBox.toMap().keys.last;
|
||||
// // chestBox.toMap().
|
||||
// await configBox.put('currentChest', chestKey);
|
||||
|
||||
// pin.text = '';
|
||||
// return chestKey;
|
||||
// }
|
||||
|
||||
void cesiumIDisVisible() {
|
||||
isCesiumIDVisible = !isCesiumIDVisible;
|
||||
notifyListeners();
|
||||
|
@ -371,25 +302,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Future<bool> isSentenceValid() async {
|
||||
String inputMnemonic =
|
||||
'${cellController0.text} ${cellController1.text} ${cellController2.text} ${cellController3.text} ${cellController4.text} ${cellController5.text} ${cellController6.text} ${cellController7.text} ${cellController8.text} ${cellController9.text} ${cellController10.text} ${cellController11.text}';
|
||||
|
||||
// Needed for bad encoding of UTF-8
|
||||
inputMnemonic = inputMnemonic.replaceAll('é', 'é');
|
||||
inputMnemonic = inputMnemonic.replaceAll('è', 'è');
|
||||
|
||||
durt.NewWallet? generatedWallet =
|
||||
await generateWallet(inputMnemonic, isImport: true);
|
||||
|
||||
if (generatedWallet == null) {
|
||||
return false;
|
||||
} else {
|
||||
generatedMnemonic = inputMnemonic;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Future pasteMnemonic(BuildContext context) async {
|
||||
final sentence = await Clipboard.getData('text/plain');
|
||||
int nbr = 0;
|
||||
|
|
|
@ -26,7 +26,7 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
// configBox.delete('endpoint');
|
||||
if (!configBox.containsKey('endpoint') || configBox.get('endpoint') == '') {
|
||||
log.d('No endpoint, configure...');
|
||||
configBox.put('endpoint', 'ws://192.168.1.72:9944');
|
||||
configBox.put('endpoint', 'ws://127.0.0.1:9944');
|
||||
}
|
||||
|
||||
if (chestBox.isEmpty) {
|
||||
|
|
|
@ -315,6 +315,14 @@ class SubstrateSdk with ChangeNotifier {
|
|||
|
||||
return await importAccount(fromMnemonic: true, derivePath: '//$number');
|
||||
}
|
||||
|
||||
Future<bool> isMnemonicValid(String mnemonic) async {
|
||||
// Needed for bad encoding of UTF-8
|
||||
mnemonic = mnemonic.replaceAll('é', 'é');
|
||||
mnemonic = mnemonic.replaceAll('è', 'è');
|
||||
|
||||
return await sdk.api.keyring.checkMnemonicValid(mnemonic);
|
||||
}
|
||||
}
|
||||
|
||||
void snack(BuildContext context, String message, {int duration = 2}) {
|
||||
|
@ -339,8 +347,10 @@ void snackNode(BuildContext context, bool isConnected) {
|
|||
_message =
|
||||
"Vous êtes connecté au noeud\n${configBox.get('endpoint').split('//')[1]}";
|
||||
}
|
||||
final snackBar =
|
||||
SnackBar(content: Text(_message), duration: const Duration(seconds: 2));
|
||||
final snackBar = SnackBar(
|
||||
padding: const EdgeInsets.all(20),
|
||||
content: Text(_message, style: const TextStyle(fontSize: 16)),
|
||||
duration: const Duration(seconds: 2));
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
|
||||
|
|
|
@ -4,10 +4,11 @@ import 'package:fast_base58/fast_base58.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:truncate/truncate.dart';
|
||||
|
||||
class WalletOptionsProvider with ChangeNotifier {
|
||||
|
@ -25,33 +26,16 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
Future<NewWallet>? get badWallet => null;
|
||||
|
||||
int getPinLenght(_walletNbr) {
|
||||
// TODOo: Get real Dewif lenght
|
||||
// String _localDewif;
|
||||
// if (_walletNbr is int || _walletNbr == null) {
|
||||
// _localDewif = chestBox.get(configBox.get('currentChest')).dewif;
|
||||
// } else {
|
||||
// _localDewif = _walletNbr;
|
||||
// }
|
||||
|
||||
// final int _pinLenght = DubpRust.getDewifSecretCodeLen(
|
||||
// dewif: _localDewif, secretCodeType: SecretCodeType.letters);
|
||||
|
||||
return pinLength;
|
||||
}
|
||||
|
||||
void _renameWallet(List<int?> _walletID, _newName,
|
||||
void _renameWallet(List<int?> _walletID, String _newName,
|
||||
{required bool isCesium}) async {
|
||||
if (isCesium) {
|
||||
ChestData _chestTarget = chestBox.get(_walletID[0])!;
|
||||
_chestTarget.name = _newName;
|
||||
await chestBox.put(_chestTarget.key, _chestTarget);
|
||||
} else {
|
||||
MyWalletsProvider myWalletClass = MyWalletsProvider();
|
||||
MyWalletsProvider myWalletClass = MyWalletsProvider();
|
||||
|
||||
WalletData _walletTarget = myWalletClass.getWalletData(_walletID)!;
|
||||
_walletTarget.name = _newName;
|
||||
await walletBox.put(_walletTarget.key, _walletTarget);
|
||||
}
|
||||
WalletData _walletTarget = myWalletClass.getWalletData(_walletID)!;
|
||||
_walletTarget.name = _newName;
|
||||
await walletBox.put(_walletTarget.key, _walletTarget);
|
||||
|
||||
_newWalletName.text = '';
|
||||
}
|
||||
|
@ -124,14 +108,6 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
);
|
||||
}
|
||||
|
||||
snackCopyKey(context) {
|
||||
const snackBar = SnackBar(
|
||||
content:
|
||||
Text("Cette clé publique a été copié dans votre presse-papier."),
|
||||
duration: Duration(seconds: 2));
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
|
||||
String getShortPubkey(String pubkey) {
|
||||
List<int> pubkeyByte = Base58Decode(pubkey);
|
||||
Digest pubkeyS256 = sha256.convert(sha256.convert(pubkeyByte).bytes);
|
||||
|
@ -161,10 +137,14 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
|
||||
if (pickedFile != null) {
|
||||
_image = File(pickedFile.path);
|
||||
|
||||
////TODO: Store image on disk, store path in walletBox.imagePath
|
||||
|
||||
log.i(pickedFile.path);
|
||||
return _image;
|
||||
} else {
|
||||
log.w('No image selected.');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,3 +166,30 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
return _address;
|
||||
}
|
||||
}
|
||||
|
||||
Widget balance(BuildContext context, String address, double size) {
|
||||
String balanceCache = '';
|
||||
|
||||
return Column(children: <Widget>[
|
||||
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
|
||||
return FutureBuilder(
|
||||
future: _sdk.getBalance(address),
|
||||
builder: (BuildContext context, AsyncSnapshot<num?> _balance) {
|
||||
if (_balance.connectionState != ConnectionState.done ||
|
||||
_balance.hasError) {
|
||||
return Text(balanceCache,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? size : size * 0.9,
|
||||
));
|
||||
}
|
||||
balanceCache = "${_balance.data.toString()} $currencyName";
|
||||
return Text(
|
||||
balanceCache,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? size : 18,
|
||||
),
|
||||
);
|
||||
});
|
||||
}),
|
||||
]);
|
||||
}
|
||||
|
|
|
@ -239,25 +239,6 @@ class WalletsProfilesProvider with ChangeNotifier {
|
|||
return num.parse(result);
|
||||
}
|
||||
|
||||
snackCopyKey(context) {
|
||||
const snackBar = SnackBar(
|
||||
padding: EdgeInsets.all(20),
|
||||
content:
|
||||
Text("Cette clé publique a été copié dans votre presse-papier."),
|
||||
duration: Duration(seconds: 2));
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
|
||||
void switchProfileView() {
|
||||
isHistoryScreen = !isHistoryScreen;
|
||||
if (isHistoryScreen) {
|
||||
historySwitchButtun = "Payer";
|
||||
} else {
|
||||
historySwitchButtun = "Voir l'historique";
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
String generateIdenticon(String _pubkey) {
|
||||
return Jdenticon.toSvg(_pubkey);
|
||||
}
|
||||
|
@ -285,3 +266,12 @@ class WalletsProfilesProvider with ChangeNotifier {
|
|||
return balance;
|
||||
}
|
||||
}
|
||||
|
||||
snackCopyKey(context) {
|
||||
const snackBar = SnackBar(
|
||||
padding: EdgeInsets.all(20),
|
||||
content: Text("Cette clé publique a été copié dans votre presse-papier.",
|
||||
style: TextStyle(fontSize: 16)),
|
||||
duration: Duration(seconds: 2));
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
|
|
|
@ -403,7 +403,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(text: pubkey));
|
||||
_historyProvider.snackCopyKey(context);
|
||||
snackCopyKey(context);
|
||||
},
|
||||
child: Text(
|
||||
_historyProvider.getShortPubkey(pubkey!),
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:gecko/models/wallet_data.dart';
|
|||
import 'package:gecko/screens/myWallets/restore_chest.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/onBoarding/1.dart';
|
||||
import 'package:gecko/screens/onBoarding/onboarding.dart';
|
||||
import 'package:gecko/screens/search.dart';
|
||||
import 'package:gecko/screens/settings.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -30,7 +31,8 @@ class HomeScreen extends StatelessWidget {
|
|||
|
||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||
|
||||
|
||||
screenWidth = MediaQuery.of(context).size.width;
|
||||
screenHeight = MediaQuery.of(context).size.height;
|
||||
|
||||
isTall = false;
|
||||
ratio = 1;
|
||||
|
@ -71,7 +73,7 @@ class HomeScreen extends StatelessWidget {
|
|||
),
|
||||
ListTile(
|
||||
key: const Key('substrateSandbox'),
|
||||
title: const Text('SUBSTRATE SANDBOX'),
|
||||
title: const Text('Substrate debug'),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.push(
|
||||
|
@ -485,7 +487,7 @@ Widget welcomeHome(context) {
|
|||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return OnboardingStepOne();
|
||||
return const OnBoardingPage(); //OnBoardingPage(); //OnboardingStepOne();
|
||||
},
|
||||
),
|
||||
);
|
||||
|
|
|
@ -1,410 +0,0 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/providers/chest_provider.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/screens/history.dart';
|
||||
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';
|
||||
|
||||
bool _isNewNameValid = false;
|
||||
|
||||
class CesiumWalletOptions extends StatelessWidget {
|
||||
const CesiumWalletOptions(
|
||||
{Key? key, Key? keyMyWallets, required this.cesiumWallet})
|
||||
: super(key: key);
|
||||
|
||||
final ChestData cesiumWallet;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context, listen: false);
|
||||
ChestProvider _chestProvider =
|
||||
Provider.of<ChestProvider>(context, listen: false);
|
||||
WalletsProfilesProvider _historyProvider =
|
||||
Provider.of<WalletsProfilesProvider>(context, listen: false);
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context, listen: false);
|
||||
|
||||
final String shortPubkey =
|
||||
_walletOptions.getShortPubkey(_walletOptions.address.text);
|
||||
|
||||
if (_isNewNameValid == false) {
|
||||
_walletOptions.nameController.text = cesiumWallet.name!;
|
||||
} else {
|
||||
cesiumWallet.name = _walletOptions.nameController.text;
|
||||
}
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
_walletOptions.isEditing = false;
|
||||
_walletOptions.isBalanceBlur = true;
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
elevation: 0,
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
_walletOptions.isEditing = false;
|
||||
_walletOptions.isBalanceBlur = true;
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
}),
|
||||
title: SizedBox(
|
||||
height: 22,
|
||||
child: Consumer<WalletOptionsProvider>(
|
||||
builder: (context, walletProvider, _) {
|
||||
return Text(_walletOptions.nameController.text);
|
||||
}),
|
||||
),
|
||||
),
|
||||
body: Builder(
|
||||
builder: (ctx) => SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
Consumer<WalletOptionsProvider>(
|
||||
builder: (context, walletProvider, _) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
yellowC,
|
||||
const Color(0xfffafafa),
|
||||
],
|
||||
)),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: <Widget>[
|
||||
const Spacer(flex: 1),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar =
|
||||
await (_walletOptions.changeAvatar());
|
||||
cesiumWallet.imageFile = newAvatar;
|
||||
_walletOptions.reloadBuild();
|
||||
},
|
||||
child: cesiumWallet.imageFile == null
|
||||
? Image.asset(
|
||||
'assets/chests/${cesiumWallet.imageName}',
|
||||
width: 110,
|
||||
)
|
||||
: Image.file(cesiumWallet.imageFile!, width: 110),
|
||||
),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar =
|
||||
await (_walletOptions.changeAvatar());
|
||||
cesiumWallet.imageFile = newAvatar;
|
||||
_walletOptions.reloadBuild();
|
||||
},
|
||||
child: Column(children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/walletOptions/camera.png',
|
||||
height: 40,
|
||||
),
|
||||
const SizedBox(height: 80)
|
||||
])),
|
||||
const Spacer(flex: 1),
|
||||
Column(children: <Widget>[
|
||||
SizedBox(
|
||||
width: 260,
|
||||
child: TextField(
|
||||
key: const Key('walletName'),
|
||||
autofocus: false,
|
||||
focusNode: _walletOptions.walletNameFocus,
|
||||
enabled: _walletOptions.isEditing,
|
||||
controller: _walletOptions.nameController,
|
||||
minLines: 1,
|
||||
maxLines: 3,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: const InputDecoration(
|
||||
border: InputBorder.none,
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
disabledBorder: InputBorder.none,
|
||||
contentPadding: EdgeInsets.all(15.0),
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 27 : 23,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w400,
|
||||
)),
|
||||
),
|
||||
SizedBox(height: isTall ? 5 : 0),
|
||||
Query(
|
||||
options: QueryOptions(
|
||||
document: gql(getBalance),
|
||||
variables: {
|
||||
'pubkey': _walletOptions.address.text,
|
||||
},
|
||||
// pollInterval: Duration(seconds: 1),
|
||||
),
|
||||
builder: (QueryResult result,
|
||||
{VoidCallback? refetch, FetchMore? fetchMore}) {
|
||||
if (result.hasException) {
|
||||
return Text(result.exception.toString());
|
||||
}
|
||||
|
||||
if (result.isLoading) {
|
||||
return const Text('Loading');
|
||||
}
|
||||
|
||||
// List repositories = result.data['viewer']['repositories']['nodes'];
|
||||
String wBalanceUD;
|
||||
if (result.data!['balance'] == null) {
|
||||
wBalanceUD = '0.0';
|
||||
} else {
|
||||
int wBalanceG1 =
|
||||
result.data!['balance']['amount'];
|
||||
int currentUD =
|
||||
result.data!['currentUd']['amount'];
|
||||
double wBalanceUDBrut =
|
||||
wBalanceG1 / currentUD; // .toString();
|
||||
wBalanceUD = double.parse(
|
||||
(wBalanceUDBrut).toStringAsFixed(2))
|
||||
.toString();
|
||||
}
|
||||
return Row(children: <Widget>[
|
||||
ImageFiltered(
|
||||
imageFilter: ImageFilter.blur(
|
||||
sigmaX: _walletOptions.isBalanceBlur
|
||||
? 6
|
||||
: 0.001,
|
||||
sigmaY: _walletOptions.isBalanceBlur
|
||||
? 5
|
||||
: 0.001),
|
||||
child: Text(wBalanceUD,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 20 : 18,
|
||||
color: Colors.black)),
|
||||
),
|
||||
Text(' DU',
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 20 : 18,
|
||||
color: Colors.black))
|
||||
]);
|
||||
|
||||
// Text(
|
||||
// '$wBalanceUD DU',
|
||||
// style: TextStyle(
|
||||
// fontSize: 20, color: Colors.black),
|
||||
// );
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
InkWell(
|
||||
key: const Key('displayBalance'),
|
||||
onTap: () {
|
||||
_walletOptions.bluringBalance();
|
||||
},
|
||||
child: Image.asset(
|
||||
_walletOptions.isBalanceBlur
|
||||
? 'assets/walletOptions/icon_oeuil.png'
|
||||
: 'assets/walletOptions/icon_oeuil_close.png',
|
||||
height: 35,
|
||||
),
|
||||
),
|
||||
]),
|
||||
Column(children: <Widget>[
|
||||
InkWell(
|
||||
key: const Key('renameWallet'),
|
||||
onTap: () async {
|
||||
_isNewNameValid = _walletOptions.editWalletName(
|
||||
[cesiumWallet.key, 0],
|
||||
isCesium: cesiumWallet.isCesium);
|
||||
await Future.delayed(
|
||||
const Duration(milliseconds: 30));
|
||||
_walletOptions.walletNameFocus.requestFocus();
|
||||
},
|
||||
child: ClipRRect(
|
||||
child: Image.asset(
|
||||
_walletOptions.isEditing
|
||||
? 'assets/walletOptions/android-checkmark.png'
|
||||
: 'assets/walletOptions/edit.png',
|
||||
width: 20,
|
||||
height: 20),
|
||||
)),
|
||||
const SizedBox(
|
||||
height: 60,
|
||||
)
|
||||
]),
|
||||
const Spacer(flex: 3),
|
||||
]),
|
||||
);
|
||||
}),
|
||||
SizedBox(height: 4 * ratio),
|
||||
QrImageWidget(
|
||||
data: _walletOptions.address.text,
|
||||
version: QrVersions.auto,
|
||||
size: isTall ? 300 : 270,
|
||||
),
|
||||
SizedBox(height: 15 * ratio),
|
||||
GestureDetector(
|
||||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: _walletOptions.address.text));
|
||||
_walletOptions.snackCopyKey(ctx);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/key.png',
|
||||
height: 45,
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
Text("${shortPubkey.split(':')[0]}:",
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontFamily: 'Monospace',
|
||||
color: Colors.black)),
|
||||
Text(shortPubkey.split(':')[1],
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontFamily: 'Monospace')),
|
||||
const SizedBox(width: 15),
|
||||
SizedBox(
|
||||
height: 40,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
elevation: 1,
|
||||
primary: orangeC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
Clipboard.setData(ClipboardData(
|
||||
text: _walletOptions.address.text));
|
||||
_walletOptions.snackCopyKey(ctx);
|
||||
},
|
||||
child: Row(children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/walletOptions/copy-white.png',
|
||||
height: 25,
|
||||
),
|
||||
const SizedBox(width: 7),
|
||||
Text('Copier',
|
||||
style: TextStyle(
|
||||
fontSize: 15, color: Colors.grey[50]))
|
||||
]))),
|
||||
]))),
|
||||
SizedBox(height: 10 * ratio),
|
||||
InkWell(
|
||||
key: const Key('displayHistory'),
|
||||
onTap: () {
|
||||
_historyProvider.nPage = 1;
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return HistoryScreen(
|
||||
pubkey: _walletOptions.address.text);
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/clock.png',
|
||||
height: 45,
|
||||
),
|
||||
const SizedBox(width: 22),
|
||||
const Text('Historique des transactions',
|
||||
style:
|
||||
TextStyle(fontSize: 20, color: Colors.black)),
|
||||
]))),
|
||||
SizedBox(height: 7 * ratio),
|
||||
InkWell(
|
||||
key: const Key('changePin'),
|
||||
onTap: () async {
|
||||
// await _chestProvider.changePin(context, cesiumWallet);
|
||||
String? newPin = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return ChangePinScreen(
|
||||
walletName: cesiumWallet.name,
|
||||
walletProvider: _myWalletProvider,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
if (newPin != null) _myWalletProvider.pinCode = newPin;
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 31),
|
||||
Image.asset(
|
||||
'assets/chests/secret_code.png',
|
||||
height: 24,
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
const Text('Changer mon code secret',
|
||||
style: TextStyle(fontSize: 20, color: Colors.black)),
|
||||
]),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 7 * ratio),
|
||||
InkWell(
|
||||
key: const Key('deleteWallet'),
|
||||
onTap: () async {
|
||||
await _chestProvider.deleteChest(context, cesiumWallet);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 33),
|
||||
Image.asset(
|
||||
'assets/walletOptions/trash.png',
|
||||
height: 45,
|
||||
),
|
||||
const SizedBox(width: 21),
|
||||
const Text(
|
||||
'Supprimer ce coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
color: Color(0xffD80000),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -55,7 +55,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
}),
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Enregistrer ce trousseau'),
|
||||
child: Text('Enregistrer ce coffre'),
|
||||
)),
|
||||
body: Center(
|
||||
child: Column(children: <Widget>[
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
import 'package:durt/durt.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
|
@ -48,7 +47,7 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
}),
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Générer un trousseau'),
|
||||
child: Text('Générer un coffre'),
|
||||
)),
|
||||
floatingActionButton: SizedBox(
|
||||
height: 80.0,
|
||||
|
@ -127,11 +126,6 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
? () async {
|
||||
_generateWalletProvider.nbrWord =
|
||||
_generateWalletProvider.getRandomInt();
|
||||
_generateWalletProvider.actualWallet = await Dewif()
|
||||
.generateDewif(
|
||||
_generateWalletProvider.generatedMnemonic!,
|
||||
_generateWalletProvider.pin.text,
|
||||
lang: appLang);
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
|
@ -144,7 +138,7 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
: null,
|
||||
child: const Text('Enregistrer ce trousseau',
|
||||
child: const Text('Enregistrer ce coffre',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
const SizedBox(height: 20),
|
||||
GestureDetector(
|
||||
|
@ -219,7 +213,7 @@ class PrintWallet extends StatelessWidget {
|
|||
Navigator.pop(context);
|
||||
}),
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const Text('Imprimer ce trousseau')),
|
||||
title: const Text('Imprimer ce coffre')),
|
||||
body: PdfPreview(
|
||||
build: (format) => _generateWalletProvider.printWallet(sentence),
|
||||
),
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/providers/generate_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/11.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -15,14 +16,19 @@ class RestoreChest extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
GenerateWalletsProvider generateWalletProvider =
|
||||
GenerateWalletsProvider genW =
|
||||
Provider.of<GenerateWalletsProvider>(context, listen: false);
|
||||
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
|
||||
generateWalletProvider.actualWallet = null;
|
||||
genW.actualWallet = null;
|
||||
if (genW.isSentenceComplete(context)) {
|
||||
genW.generatedMnemonic =
|
||||
'${genW.cellController0.text} ${genW.cellController1.text} ${genW.cellController2.text} ${genW.cellController3.text} ${genW.cellController4.text} ${genW.cellController5.text} ${genW.cellController6.text} ${genW.cellController7.text} ${genW.cellController8.text} ${genW.cellController9.text} ${genW.cellController10.text} ${genW.cellController11.text}';
|
||||
}
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
generateWalletProvider.resetImportView();
|
||||
genW.resetImportView();
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
|
@ -31,7 +37,7 @@ class RestoreChest extends StatelessWidget {
|
|||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
generateWalletProvider.resetImportView();
|
||||
genW.resetImportView();
|
||||
Navigator.of(context).pop();
|
||||
}),
|
||||
title: const SizedBox(
|
||||
|
@ -48,32 +54,32 @@ class RestoreChest extends StatelessWidget {
|
|||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: <Widget>[
|
||||
arrayCell(context, generateWalletProvider.cellController0),
|
||||
arrayCell(context, generateWalletProvider.cellController1),
|
||||
arrayCell(context, generateWalletProvider.cellController2),
|
||||
arrayCell(context, generateWalletProvider.cellController3),
|
||||
arrayCell(context, genW.cellController0),
|
||||
arrayCell(context, genW.cellController1),
|
||||
arrayCell(context, genW.cellController2),
|
||||
arrayCell(context, genW.cellController3),
|
||||
]),
|
||||
const SizedBox(height: 15),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: <Widget>[
|
||||
arrayCell(context, generateWalletProvider.cellController4),
|
||||
arrayCell(context, generateWalletProvider.cellController5),
|
||||
arrayCell(context, generateWalletProvider.cellController6),
|
||||
arrayCell(context, generateWalletProvider.cellController7),
|
||||
arrayCell(context, genW.cellController4),
|
||||
arrayCell(context, genW.cellController5),
|
||||
arrayCell(context, genW.cellController6),
|
||||
arrayCell(context, genW.cellController7),
|
||||
]),
|
||||
const SizedBox(height: 15),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||
children: <Widget>[
|
||||
arrayCell(context, generateWalletProvider.cellController8),
|
||||
arrayCell(context, generateWalletProvider.cellController9),
|
||||
arrayCell(context, generateWalletProvider.cellController10),
|
||||
arrayCell(context, generateWalletProvider.cellController11),
|
||||
arrayCell(context, genW.cellController8),
|
||||
arrayCell(context, genW.cellController9),
|
||||
arrayCell(context, genW.cellController10),
|
||||
arrayCell(context, genW.cellController11),
|
||||
]),
|
||||
]),
|
||||
// const Spacer(),
|
||||
if (generateWalletProvider.isSentenceComplete(context))
|
||||
if (genW.isSentenceComplete(context))
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.center,
|
||||
|
@ -87,8 +93,8 @@ class RestoreChest extends StatelessWidget {
|
|||
onPrimary: Colors.white, // foreground
|
||||
),
|
||||
onPressed: () async {
|
||||
if (await generateWalletProvider.isSentenceValid()) {
|
||||
generateWalletProvider.resetImportView();
|
||||
if (await _sub.isMnemonicValid(genW.generatedMnemonic!)) {
|
||||
genW.resetImportView();
|
||||
await Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
|
@ -121,7 +127,7 @@ class RestoreChest extends StatelessWidget {
|
|||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
generateWalletProvider.pasteMnemonic(context);
|
||||
genW.pasteMnemonic(context);
|
||||
},
|
||||
child: const Text(
|
||||
'Coller depuis le\npresse-papier',
|
||||
|
@ -193,7 +199,7 @@ class RestoreChest extends StatelessWidget {
|
|||
return AlertDialog(
|
||||
title: const Text('Phrase incorrecte'),
|
||||
content: const Text(
|
||||
'Votre phrase de restauration semble incorrecte, veuillez la corriger.'),
|
||||
'Votre phrase de restauration semble incorrecte, les mots ne sont pas dans le bon ordre.\nVeuillez la corriger.'),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: const Text("OK"),
|
||||
|
|
|
@ -8,7 +8,6 @@ import 'package:gecko/providers/my_wallets.dart';
|
|||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/cesium_wallet_options.dart';
|
||||
import 'package:gecko/screens/myWallets/choose_chest.dart';
|
||||
import 'package:gecko/screens/myWallets/choose_wallet.dart';
|
||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||
|
@ -214,20 +213,12 @@ class UnlockingWallet extends StatelessWidget {
|
|||
} else {
|
||||
pinColor = Colors.green[400];
|
||||
if (action == "mywallets") {
|
||||
currentChest.isCesium!
|
||||
? Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return CesiumWalletOptions(
|
||||
cesiumWallet: currentChest);
|
||||
}),
|
||||
).then((value) => _myWalletProvider.mnemonic = '')
|
||||
: Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return const WalletsHome();
|
||||
}),
|
||||
);
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return const WalletsHome();
|
||||
}),
|
||||
);
|
||||
} else if (action == "pay") {
|
||||
Navigator.push(
|
||||
context,
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/screens/history.dart';
|
||||
|
@ -92,13 +89,13 @@ class WalletOptions extends StatelessWidget {
|
|||
Column(children: <Widget>[
|
||||
walletName(walletProvider, _walletOptions),
|
||||
SizedBox(height: isTall ? 5 : 0),
|
||||
balance(context, walletProvider),
|
||||
balance(context, walletProvider.address.text, 20),
|
||||
]),
|
||||
const Spacer(flex: 3),
|
||||
]),
|
||||
);
|
||||
}),
|
||||
SizedBox(height: 4 * ratio),
|
||||
SizedBox(height: 10 * ratio),
|
||||
QrImageWidget(
|
||||
data: _walletOptions.address.text,
|
||||
version: QrVersions.auto,
|
||||
|
@ -132,8 +129,10 @@ class WalletOptions extends StatelessWidget {
|
|||
children: <Widget>[
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar = await (walletProvider.changeAvatar());
|
||||
wallet.imageFile = newAvatar;
|
||||
wallet.imageFile = await (walletProvider.changeAvatar());
|
||||
if (wallet.imageFile != null) {
|
||||
walletBox.put(wallet.key, wallet);
|
||||
}
|
||||
walletProvider.reloadBuild();
|
||||
},
|
||||
child: wallet.imageFile == null
|
||||
|
@ -151,8 +150,7 @@ class WalletOptions extends StatelessWidget {
|
|||
top: 0,
|
||||
child: InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar = await (walletProvider.changeAvatar());
|
||||
wallet.imageFile = newAvatar;
|
||||
wallet.imageFile = await (walletProvider.changeAvatar());
|
||||
walletProvider.reloadBuild();
|
||||
},
|
||||
child: Image.asset(
|
||||
|
@ -223,52 +221,6 @@ class WalletOptions extends StatelessWidget {
|
|||
);
|
||||
}
|
||||
|
||||
Widget balance(BuildContext context, WalletOptionsProvider walletProvider) {
|
||||
String balanceCache = '';
|
||||
|
||||
return Column(children: <Widget>[
|
||||
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
|
||||
return FutureBuilder(
|
||||
future: _sdk.getBalance(walletProvider.address.text),
|
||||
builder: (BuildContext context, AsyncSnapshot<num?> _balance) {
|
||||
if (_balance.connectionState != ConnectionState.done ||
|
||||
_balance.hasError) {
|
||||
return Text(balanceCache,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 20 : 18,
|
||||
));
|
||||
}
|
||||
balanceCache = "${_balance.data.toString()} $currencyName";
|
||||
return ImageFiltered(
|
||||
imageFilter: ImageFilter.blur(
|
||||
sigmaX: walletProvider.isBalanceBlur ? 6 : 0,
|
||||
sigmaY: walletProvider.isBalanceBlur ? 5 : 0),
|
||||
child: Text(
|
||||
balanceCache,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 20 : 18,
|
||||
),
|
||||
),
|
||||
);
|
||||
});
|
||||
}),
|
||||
|
||||
const SizedBox(height: 15),
|
||||
// InkWell(
|
||||
// key: const Key('displayBalance'),
|
||||
// onTap: () {
|
||||
// walletProvider.bluringBalance();
|
||||
// },
|
||||
// child: Image.asset(
|
||||
// walletProvider.isBalanceBlur
|
||||
// ? 'assets/walletOptions/icon_oeuil.png'
|
||||
// : 'assets/walletOptions/icon_oeuil_close.png',
|
||||
// height: 35,
|
||||
// ),
|
||||
// ),
|
||||
]);
|
||||
}
|
||||
|
||||
Widget pubkeyWidget(WalletOptionsProvider walletProvider, BuildContext ctx) {
|
||||
final String shortPubkey =
|
||||
walletProvider.getShortPubkey(walletProvider.address.text);
|
||||
|
@ -276,7 +228,7 @@ class WalletOptions extends StatelessWidget {
|
|||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(text: walletProvider.address.text));
|
||||
walletProvider.snackCopyKey(ctx);
|
||||
snackCopyKey(ctx);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
|
@ -313,7 +265,7 @@ class WalletOptions extends StatelessWidget {
|
|||
onPressed: () {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: walletProvider.address.text));
|
||||
walletProvider.snackCopyKey(ctx);
|
||||
snackCopyKey(ctx);
|
||||
},
|
||||
child: Row(children: <Widget>[
|
||||
Image.asset(
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/1.dart';
|
||||
import 'package:gecko/screens/onBoarding/onboarding.dart';
|
||||
|
||||
class NoKeyChainScreen extends StatelessWidget {
|
||||
const NoKeyChainScreen({Key? key}) : super(key: key);
|
||||
|
@ -39,7 +39,7 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
page: OnboardingStepOne(), isFast: true));
|
||||
page: OnBoardingPage(), isFast: true));
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
|
|
@ -27,11 +27,11 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Nouveau portefeuilles', progress),
|
||||
common.bubbleSpeak(
|
||||
"Il semblerait que vous n’ayez pas encore de trousseau.\n\nUn trousseau vous permet de gérer un ou plusieurs portefeuilles.",
|
||||
"Il semblerait que vous n’ayez pas encore de coffre.\n\nUn coffre vous permet de gérer un ou plusieurs portefeuilles.",
|
||||
textKey: const Key('step1')),
|
||||
const SizedBox(height: 90),
|
||||
Image.asset(
|
||||
'assets/onBoarding/keys-and-wallets-horizontal.png',
|
||||
'assets/onBoarding/fabrication-de-portefeuille.png',
|
||||
height: 200,
|
||||
),
|
||||
Expanded(
|
||||
|
@ -53,7 +53,7 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
FaderTransition(
|
||||
page: OnboardingStepTwo(), isFast: true));
|
||||
},
|
||||
child: const Text('Créer mon trousseau',
|
||||
child: const Text('Créer mon coffre',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
const SizedBox(height: 80),
|
||||
|
|
|
@ -25,7 +25,7 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"Si un jour vous changez de téléphone, votre code secret sera différent, mais il vous suffira de me redonner votre phrase de restauration pour recréer votre trousseau.",
|
||||
"Si un jour vous changez de téléphone, votre code secret sera différent, mais il vous suffira de me redonner votre phrase de restauration pour recréer votre coffre.",
|
||||
textKey: const Key('step10'),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
|
|
|
@ -25,7 +25,7 @@ class OnboardingStepFiveteen extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"Top !\n\nVotre trousseau de clef et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !",
|
||||
"Top !\n\nVotre coffre de clef et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !",
|
||||
textKey: const Key('step13'),
|
||||
),
|
||||
SizedBox(height: isTall ? 20 : 10),
|
||||
|
|
|
@ -28,7 +28,7 @@ class OnboardingStepTwo extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Nouveau portefeuilles', progress),
|
||||
common.bubbleSpeak(
|
||||
"Un trousseau est créé à partir d’une phrase de restauration.",
|
||||
"Un coffre est créé à partir d’une phrase de restauration.",
|
||||
textKey: const Key('step2'),
|
||||
),
|
||||
const SizedBox(height: 70),
|
||||
|
|
|
@ -25,7 +25,7 @@ class OnboardingStepFor extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"Si un jour vous changez de téléphone, il vous suffira de me redonner votre phrase de restauration pour recréer votre trousseau.",
|
||||
"Si un jour vous changez de téléphone, il vous suffira de me redonner votre phrase de restauration pour recréer votre coffre.",
|
||||
textKey: const Key('step3'),
|
||||
),
|
||||
SizedBox(height: isTall ? 15 : 0),
|
||||
|
|
|
@ -25,7 +25,7 @@ class OnboardingStepFive extends StatelessWidget {
|
|||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"Par contre, attention :\n\nDans une blockchain, il n’y a pas de procédure de récupération de trousseau.\n\nSi vous perdez votre phrase de restauration, je ne pourrai pas vous la communiquer, et vous ne pourrez donc plus jamais accéder à votre compte.",
|
||||
"Par contre, attention :\n\nDans une blockchain, il n’y a pas de procédure de récupération de coffre.\n\nSi vous perdez votre phrase de restauration, je ne pourrai pas vous la communiquer, et vous ne pourrez donc plus jamais accéder à votre compte.",
|
||||
textKey: const Key('step4'),
|
||||
),
|
||||
SizedBox(height: isTall ? 30 : 10),
|
||||
|
|
|
@ -21,7 +21,7 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context);
|
||||
Provider.of<GenerateWalletsProvider>(context, listen: false);
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
CommonElements common = CommonElements();
|
||||
|
@ -58,24 +58,26 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: SizedBox(
|
||||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: const Key('generateMnemonic'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
_generateWalletProvider.reloadBuild();
|
||||
},
|
||||
child: const Text("Choisir une autre phrase",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
child: Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: SizedBox(
|
||||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: const Key('generateMnemonic'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
_generateWalletProvider.reloadBuild();
|
||||
},
|
||||
child: const Text("Choisir une autre phrase",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 25),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
|
@ -135,12 +137,12 @@ Widget sentanceArray(BuildContext context) {
|
|||
// ];
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 3),
|
||||
child: Container(
|
||||
constraints: const BoxConstraints(maxWidth: 450),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: Colors.black),
|
||||
color: Colors.grey[300],
|
||||
color: const Color(0xffeeeedd),
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(10),
|
||||
)),
|
||||
|
@ -186,17 +188,16 @@ Widget sentanceArray(BuildContext context) {
|
|||
|
||||
Widget arrayCell(dataWord) {
|
||||
return SizedBox(
|
||||
width: 102,
|
||||
width: 100,
|
||||
child: Column(children: <Widget>[
|
||||
Text(
|
||||
dataWord.split(':')[0],
|
||||
style: const TextStyle(fontSize: 14),
|
||||
style: const TextStyle(fontSize: 15, color: Color(0xff6b6b52)),
|
||||
),
|
||||
const SizedBox(height: 2),
|
||||
Text(
|
||||
dataWord.split(':')[1],
|
||||
key: Key('word${dataWord.split(':')[0]}'),
|
||||
style: const TextStyle(fontSize: 19, color: Colors.black),
|
||||
style: const TextStyle(fontSize: 20, color: Colors.black),
|
||||
),
|
||||
]),
|
||||
);
|
||||
|
@ -221,7 +222,7 @@ class PrintWallet extends StatelessWidget {
|
|||
Navigator.pop(context);
|
||||
}),
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const Text('Imprimer ce trousseau')),
|
||||
title: const Text('Imprimer ce coffre')),
|
||||
body: PdfPreview(
|
||||
build: (format) => _generateWalletProvider.printWallet(sentence),
|
||||
),
|
||||
|
|
|
@ -33,7 +33,7 @@ class OnboardingStepEleven extends StatelessWidget {
|
|||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
const TextSpan(
|
||||
text:
|
||||
" \n\nVotre code secret chiffre votre trousseau de clefs, ce qui le rend inutilisable par d’autres, par exemple si vous perdez votre téléphone ou si on vous le vole."),
|
||||
" \n\nVotre code secret chiffre votre coffre de clefs, ce qui le rend inutilisable par d’autres, par exemple si vous perdez votre téléphone ou si on vous le vole."),
|
||||
],
|
||||
textKey: const Key('step9'),
|
||||
),
|
||||
|
|
|
@ -0,0 +1,307 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/providers/generate_wallets.dart';
|
||||
import 'package:introduction_screen/introduction_screen.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '7.dart';
|
||||
|
||||
class OnBoardingPage extends StatefulWidget {
|
||||
const OnBoardingPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_OnBoardingPageState createState() => _OnBoardingPageState();
|
||||
}
|
||||
|
||||
class _OnBoardingPageState extends State<OnBoardingPage> {
|
||||
final introKey = GlobalKey<IntroductionScreenState>();
|
||||
bool isFreeze = false;
|
||||
|
||||
void _onIntroEnd(context) {
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(builder: (_) => HomePage()),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildImage(String assetName, [double width = 350]) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(0),
|
||||
width: 440,
|
||||
decoration: BoxDecoration(
|
||||
gradient: const LinearGradient(
|
||||
begin: Alignment.topLeft,
|
||||
end: Alignment.bottomRight,
|
||||
colors: [
|
||||
Color(0xffd2d4cf),
|
||||
Color(0xffeaeae7),
|
||||
],
|
||||
),
|
||||
border: Border.all(color: Colors.grey[900]!)),
|
||||
child: Image.asset('assets/onBoarding/$assetName', width: width));
|
||||
}
|
||||
|
||||
Widget _buildText(String text, [double size = 20]) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.all(12),
|
||||
width: 440,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white, border: Border.all(color: Colors.grey[900]!)),
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(fontSize: size),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _nextButton() {
|
||||
return SizedBox(
|
||||
width: 410,
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 4,
|
||||
primary: orangeC, // background
|
||||
onPrimary: Colors.white, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
introKey.currentState?.next();
|
||||
},
|
||||
child: const Text(
|
||||
'Continuer',
|
||||
style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context, listen: false);
|
||||
const bodyStyle = TextStyle(fontSize: 19.0);
|
||||
var pageDecoration = PageDecoration(
|
||||
titleTextStyle:
|
||||
const TextStyle(fontSize: 28.0, fontWeight: FontWeight.w700),
|
||||
bodyTextStyle: bodyStyle,
|
||||
bodyPadding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
|
||||
pageColor: backgroundColor,
|
||||
imagePadding: EdgeInsets.zero,
|
||||
);
|
||||
|
||||
log.d(introKey.currentState?.controller.page);
|
||||
|
||||
return IntroductionScreen(
|
||||
controlsPosition: const Position(left: 0, right: 0, bottom: 0),
|
||||
freeze: false,
|
||||
isProgressTap: false,
|
||||
isTopSafeArea: false,
|
||||
isBottomSafeArea: true,
|
||||
key: introKey,
|
||||
globalBackgroundColor: backgroundColor,
|
||||
globalFooter:
|
||||
SizedBox(width: double.infinity, height: 60, child: _nextButton()),
|
||||
pages: [
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Gecko fabrique votre portefeuille à partir d’une phrase de restauration. Elle un peu le comme un plan qui permet de construire votre portefeuille.'),
|
||||
_buildImage('fabrication-de-portefeuille.png'),
|
||||
// const SizedBox(height: 40),
|
||||
// _nextButton()
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Conservez cette phrase précieusement, car sans elle Gecko ne pourra pas reconstruire vos portefeuilles le jour où vous changez de téléphone.'),
|
||||
_buildImage(
|
||||
'fabrication-de-portefeuille-impossible-sans-phrase.png')
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Dans une blockchain, pas de procédure de récupération par mail. Seule votre phrase de restauration peut vous permettre de récupérer vos Ğ1 à tout moment.'),
|
||||
_buildImage('mot-de-passe-oublie.png')
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Il est temps de vous munir d’un d’un papier et d’un crayon afin de pouvoir noter votre phrase de restauration.'),
|
||||
_buildImage('gecko-oublie-aussi.png')
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Gecko a généré votre phrase de restauration ! Tâchez de la garder bien secrète, car elle permet à quiconque la connaît d’accéder à tous vos portefeuilles.'),
|
||||
const SizedBox(height: 40),
|
||||
sentanceArray(context),
|
||||
const SizedBox(height: 20),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return PrintWallet(
|
||||
_generateWalletProvider.generatedMnemonic);
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: Image.asset(
|
||||
'assets/printer.png',
|
||||
height: 35,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 40),
|
||||
// const Spacer(),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: const Key('generateMnemonic'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
_generateWalletProvider.reloadBuild();
|
||||
// setState(() {});
|
||||
},
|
||||
child: const Text("Choisir une autre phrase",
|
||||
style: TextStyle(
|
||||
fontSize: 21, fontWeight: FontWeight.w600))),
|
||||
),
|
||||
// const Spacer(),
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
PageViewModel(
|
||||
title: '',
|
||||
body: '',
|
||||
footer: Column(
|
||||
children: [
|
||||
_buildText(
|
||||
'Gecko fabrique votre portefeuille à partir d’une phrase de restauration. Elle un peu le comme un plan qui permet de construire votre portefeuille.'),
|
||||
_buildImage('fabrication-de-portefeuille.png'),
|
||||
const SizedBox(height: 25),
|
||||
],
|
||||
),
|
||||
decoration: pageDecoration,
|
||||
),
|
||||
// PageViewModel(
|
||||
// title: "Another title page",
|
||||
// body: "Another beautiful body text for this example onboarding",
|
||||
// image: _buildImage('keys-and-wallets-horizontal-plus-phrase.png'),
|
||||
// footer: ElevatedButton(
|
||||
// onPressed: () {
|
||||
// introKey.currentState?.animateScroll(0);
|
||||
// },
|
||||
// child: const Text(
|
||||
// 'FooButton',
|
||||
// style: TextStyle(color: Colors.white),
|
||||
// ),
|
||||
// style: ElevatedButton.styleFrom(
|
||||
// primary: Colors.lightBlue,
|
||||
// shape: RoundedRectangleBorder(
|
||||
// borderRadius: BorderRadius.circular(8.0),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// decoration: pageDecoration,
|
||||
// ),
|
||||
// PageViewModel(
|
||||
// title: "Title of last page - reversed",
|
||||
// bodyWidget: Row(
|
||||
// mainAxisAlignment: MainAxisAlignment.center,
|
||||
// children: const [
|
||||
// Text("Click on ", style: bodyStyle),
|
||||
// Icon(Icons.edit),
|
||||
// Text(" to edit a post", style: bodyStyle),
|
||||
// ],
|
||||
// ),
|
||||
// decoration: pageDecoration.copyWith(
|
||||
// bodyFlex: 2,
|
||||
// imageFlex: 4,
|
||||
// bodyAlignment: Alignment.bottomCenter,
|
||||
// imageAlignment: Alignment.topCenter,
|
||||
// ),
|
||||
// image: _buildImage('keys-and-wallets-horizontal-plus-phrase.png'),
|
||||
// reverse: true,
|
||||
// ),
|
||||
],
|
||||
onDone: () => _onIntroEnd(context),
|
||||
onChange: (i) => setState(() {}),
|
||||
//onSkip: () => _onIntroEnd(context), // You can override onSkip callback
|
||||
showSkipButton: false,
|
||||
skipOrBackFlex: 0,
|
||||
nextFlex: 0,
|
||||
showBackButton: false,
|
||||
skip: const Text('Skip', style: TextStyle(fontWeight: FontWeight.w600)),
|
||||
showNextButton: false,
|
||||
// next: Icon(
|
||||
// Icons.arrow_forward_ios,
|
||||
// color: orangeC,
|
||||
// size: 40,
|
||||
// ),
|
||||
done: const Text('Done', style: TextStyle(fontWeight: FontWeight.w600)),
|
||||
curve: Curves.fastLinearToSlowEaseIn,
|
||||
controlsMargin: const EdgeInsets.all(0),
|
||||
controlsPadding: kIsWeb
|
||||
? const EdgeInsets.all(12.0)
|
||||
: const EdgeInsets.fromLTRB(0, 0.0, 0.0, 50),
|
||||
dotsDecorator: DotsDecorator(
|
||||
size: const Size(10.0, 10.0),
|
||||
color: Colors.grey[400]!,
|
||||
activeColor: orangeC,
|
||||
activeSize: const Size(22.0, 10.0),
|
||||
activeShape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(25.0)),
|
||||
),
|
||||
),
|
||||
dotsContainerDecorator: const ShapeDecoration(
|
||||
color: Colors.transparent,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(8.0)),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class HomePage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Home')),
|
||||
body: const Center(child: Text("This is the screen after Introduction")),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/providers/cesium_plus.dart';
|
||||
import 'package:gecko/models/g1_wallets_list.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/providers/search.dart';
|
||||
import 'package:gecko/screens/wallet_view.dart';
|
||||
|
@ -133,6 +134,11 @@ class SearchResultScreen extends StatelessWidget {
|
|||
fontWeight: FontWeight.w500),
|
||||
textAlign: TextAlign.center),
|
||||
]),
|
||||
trailing: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
balance(context, g1Wallet.pubkey!, 16)
|
||||
]),
|
||||
subtitle: Row(children: <Widget>[
|
||||
Text(g1Wallet.id?.username ?? '',
|
||||
style: const TextStyle(
|
||||
|
|
|
@ -30,7 +30,6 @@ class SettingsScreen extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
|
||||
const double buttonHigh = 50;
|
||||
const double buttonWidth = 240;
|
||||
|
@ -96,7 +95,7 @@ class SettingsScreen extends StatelessWidget {
|
|||
}),
|
||||
),
|
||||
child: const Text(
|
||||
"Générer un trousseau",
|
||||
"Générer un coffre",
|
||||
style: TextStyle(fontSize: fontSize),
|
||||
),
|
||||
),
|
||||
|
|
|
@ -38,11 +38,10 @@ class SubstrateSandBox extends StatelessWidget {
|
|||
child: Text(
|
||||
'Noeud connecté ?: ${_sub.nodeConnected} (${configBox.get('endpoint')})')),
|
||||
if (_sub.nodeConnected)
|
||||
Text(
|
||||
'Noeud "${_sub.sdk.api.connectedNode!.name}", bloc N°${_sub.blocNumber}'),
|
||||
Text('Noeud "$currencyName", bloc N°${_sub.blocNumber}'),
|
||||
const SizedBox(height: 20),
|
||||
Row(children: [
|
||||
const Text('Liste des trousseaux:'),
|
||||
const Text('Liste des coffres:'),
|
||||
const Spacer(),
|
||||
InkWell(
|
||||
child: Image.asset(
|
||||
|
@ -100,7 +99,7 @@ class SubstrateSandBox extends StatelessWidget {
|
|||
]);
|
||||
}),
|
||||
const SizedBox(height: 20),
|
||||
const Text('Mot de passe du trousseau:'),
|
||||
const Text('Mot de passe du coffre:'),
|
||||
TextField(
|
||||
controller: _sub.keystorePassword,
|
||||
obscureText: true,
|
||||
|
@ -127,7 +126,7 @@ class SubstrateSandBox extends StatelessWidget {
|
|||
context,
|
||||
res != ''
|
||||
? 'Portefeuille importé'
|
||||
: 'Le format de trousseau est invalide');
|
||||
: 'Le format de coffre est invalide');
|
||||
}
|
||||
: null,
|
||||
child: const Text(
|
||||
|
|
|
@ -2,15 +2,12 @@ import 'package:flutter/services.dart';
|
|||
import 'package:gecko/globals.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/providers/cesium_plus.dart';
|
||||
import 'package:gecko/providers/wallet_options.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/wallets_profiles.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/screens/avatar_fullscreen.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/history.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class WalletViewScreen extends StatelessWidget {
|
||||
|
@ -53,7 +50,8 @@ class WalletViewScreen extends StatelessWidget {
|
|||
height: buttonSize,
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
color: Colors
|
||||
.grey[300], //const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
key: const Key('viewHistory'),
|
||||
splashColor: orangeC, // inkwell color
|
||||
|
@ -64,19 +62,20 @@ class WalletViewScreen extends StatelessWidget {
|
|||
'assets/walletOptions/clock.png'),
|
||||
height: 90)),
|
||||
onTap: () {
|
||||
_historyProvider.nPage = 1;
|
||||
Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
page: HistoryScreen(
|
||||
pubkey: pubkey,
|
||||
username: username ??
|
||||
g1WalletsBox.get(pubkey)?.username,
|
||||
avatar: avatar ??
|
||||
g1WalletsBox.get(pubkey)?.avatar,
|
||||
),
|
||||
isFast: false),
|
||||
);
|
||||
////TODO: wait for subsquid indexer
|
||||
// _historyProvider.nPage = 1;
|
||||
// Navigator.push(
|
||||
// context,
|
||||
// FaderTransition(
|
||||
// page: HistoryScreen(
|
||||
// pubkey: pubkey,
|
||||
// username: username ??
|
||||
// g1WalletsBox.get(pubkey)?.username,
|
||||
// avatar: avatar ??
|
||||
// g1WalletsBox.get(pubkey)?.avatar,
|
||||
// ),
|
||||
// isFast: false),
|
||||
// );
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
@ -105,7 +104,7 @@ class WalletViewScreen extends StatelessWidget {
|
|||
height: 90)),
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(text: pubkey));
|
||||
_historyProvider.snackCopyKey(context);
|
||||
snackCopyKey(context);
|
||||
}),
|
||||
),
|
||||
),
|
||||
|
@ -286,21 +285,21 @@ class WalletViewScreen extends StatelessWidget {
|
|||
primary: orangeC, // background
|
||||
onPrimary: Colors.white, // foreground
|
||||
),
|
||||
onPressed:
|
||||
_walletViewProvider.payAmount.text != ''
|
||||
? () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet,
|
||||
action: "pay");
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
: null,
|
||||
onPressed: _walletViewProvider.payAmount.text !=
|
||||
''
|
||||
? () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet,
|
||||
action: "pay");
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
: null,
|
||||
child: const Text(
|
||||
'Effectuer le virement',
|
||||
style: TextStyle(
|
||||
|
@ -352,7 +351,7 @@ class WalletViewScreen extends StatelessWidget {
|
|||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(text: pubkey));
|
||||
_historyProvider.snackCopyKey(context);
|
||||
snackCopyKey(context);
|
||||
},
|
||||
child: Text(
|
||||
_historyProvider.getShortPubkey(pubkey!),
|
||||
|
@ -363,40 +362,45 @@ class WalletViewScreen extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
]),
|
||||
const SizedBox(height: 10),
|
||||
if (username == null &&
|
||||
g1WalletsBox.get(pubkey)?.username == null)
|
||||
Query(
|
||||
options: QueryOptions(
|
||||
document: gql(getId),
|
||||
variables: {
|
||||
'pubkey': pubkey,
|
||||
},
|
||||
),
|
||||
builder: (QueryResult result,
|
||||
{VoidCallback? refetch, FetchMore? fetchMore}) {
|
||||
if (result.isLoading || result.hasException) {
|
||||
return const Text('...');
|
||||
} else if (result.data!['idty'] == null ||
|
||||
result.data!['idty']['username'] == null) {
|
||||
g1WalletsBox.get(pubkey)?.username = '';
|
||||
return const Text('');
|
||||
} else {
|
||||
g1WalletsBox.get(pubkey)?.username =
|
||||
result.data!['idty']['username'] ?? '';
|
||||
return SizedBox(
|
||||
width: 230,
|
||||
child: Text(
|
||||
result.data!['idty']['username'] ?? '',
|
||||
style: const TextStyle(
|
||||
fontSize: 27,
|
||||
color: Color(0xff814C00),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 25),
|
||||
Consumer<WalletOptionsProvider>(
|
||||
builder: (context, walletProvider, _) {
|
||||
return balance(context, pubkey!, 20);
|
||||
}),
|
||||
////
|
||||
// if (username == null &&
|
||||
// g1WalletsBox.get(pubkey)?.username == null)
|
||||
// Query(
|
||||
// options: QueryOptions(
|
||||
// document: gql(getId),
|
||||
// variables: {
|
||||
// 'pubkey': pubkey,
|
||||
// },
|
||||
// ),
|
||||
// builder: (QueryResult result,
|
||||
// {VoidCallback? refetch, FetchMore? fetchMore}) {
|
||||
// if (result.isLoading || result.hasException) {
|
||||
// return const Text('...');
|
||||
// } else if (result.data!['idty'] == null ||
|
||||
// result.data!['idty']['username'] == null) {
|
||||
// g1WalletsBox.get(pubkey)?.username = '';
|
||||
// return const Text('');
|
||||
// } else {
|
||||
// g1WalletsBox.get(pubkey)?.username =
|
||||
// result.data!['idty']['username'] ?? '';
|
||||
// return SizedBox(
|
||||
// width: 230,
|
||||
// child: Text(
|
||||
// result.data!['idty']['username'] ?? '',
|
||||
// style: const TextStyle(
|
||||
// fontSize: 27,
|
||||
// color: Color(0xff814C00),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
if (username == null &&
|
||||
g1WalletsBox.get(pubkey)?.username != null)
|
||||
SizedBox(
|
||||
|
@ -421,19 +425,20 @@ class WalletViewScreen extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
const SizedBox(height: 25),
|
||||
FutureBuilder(
|
||||
future: _cesiumPlusProvider.getName(pubkey),
|
||||
initialData: '...',
|
||||
builder: (context, snapshot) {
|
||||
return SizedBox(
|
||||
width: 230,
|
||||
child: Text(
|
||||
snapshot.data.toString(),
|
||||
style: const TextStyle(
|
||||
fontSize: 18, color: Colors.black),
|
||||
),
|
||||
);
|
||||
}),
|
||||
//// To get Cs+ name
|
||||
// FutureBuilder(
|
||||
// future: _cesiumPlusProvider.getName(pubkey),
|
||||
// initialData: '...',
|
||||
// builder: (context, snapshot) {
|
||||
// return SizedBox(
|
||||
// width: 230,
|
||||
// child: Text(
|
||||
// snapshot.data.toString(),
|
||||
// style: const TextStyle(
|
||||
// fontSize: 18, color: Colors.black),
|
||||
// ),
|
||||
// );
|
||||
// }),
|
||||
const SizedBox(height: 30),
|
||||
]),
|
||||
const Spacer(),
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
PRODUCT_NAME = gecko
|
||||
|
||||
// The application's bundle identifier
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.gecko
|
||||
PRODUCT_BUNDLE_IDENTIFIER = gecko.axiomteam.fr
|
||||
|
||||
// The copyright displayed in application information
|
||||
PRODUCT_COPYRIGHT = Copyright © 2021 com.example. All rights reserved.
|
||||
PRODUCT_COPYRIGHT = Copyright © 2021 gecko.axiomteam.fr. All rights reserved.
|
||||
|
|
42
pubspec.lock
|
@ -8,13 +8,6 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "40.0.0"
|
||||
aes_ecb_pkcs5_flutter:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: aes_ecb_pkcs5_flutter
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.2"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -302,6 +295,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.6"
|
||||
dots_indicator:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dots_indicator
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
durt:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -349,6 +349,13 @@ packages:
|
|||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_aes_ecb_pkcs5:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_aes_ecb_pkcs5
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.2"
|
||||
flutter_driver:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
|
@ -559,7 +566,7 @@ packages:
|
|||
name: http_parser
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
version: "4.0.1"
|
||||
http_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -615,7 +622,7 @@ packages:
|
|||
name: image_picker_ios
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.8.5+4"
|
||||
version: "0.8.5+5"
|
||||
image_picker_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -642,6 +649,13 @@ packages:
|
|||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.17.0"
|
||||
introduction_screen:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: introduction_screen
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
io:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -914,7 +928,7 @@ packages:
|
|||
name: pdf
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.8.0"
|
||||
version: "3.8.1"
|
||||
permission_handler:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
@ -976,7 +990,7 @@ packages:
|
|||
description:
|
||||
path: "."
|
||||
ref: fixAndroidActivityVersion
|
||||
resolved-ref: db17df1a7e421066dd88a16ed46c5cc945b77f82
|
||||
resolved-ref: e33351cde5ea9b55d191772fe3b36f9dbb8277e6
|
||||
url: "https://github.com/poka-IT/sdk.git"
|
||||
source: git
|
||||
version: "0.4.5"
|
||||
|
@ -992,7 +1006,7 @@ packages:
|
|||
description:
|
||||
path: printing
|
||||
ref: HEAD
|
||||
resolved-ref: "726aab13746a4f515601febfb0824ba71dbe4f80"
|
||||
resolved-ref: "95bbc1f33b7cb45f7a4b98088b96bc541fefc495"
|
||||
url: "https://github.com/DavBfr/dart_pdf.git"
|
||||
source: git
|
||||
version: "5.9.1"
|
||||
|
@ -1069,7 +1083,7 @@ packages:
|
|||
name: responsive_framework
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.8"
|
||||
version: "0.1.9"
|
||||
rxdart:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -1368,7 +1382,7 @@ packages:
|
|||
name: webkit_inspection_protocol
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.1"
|
||||
version: "1.1.0"
|
||||
webview_flutter:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
23
pubspec.yaml
|
@ -5,7 +5,7 @@ description: Pay with G1.
|
|||
# pub.dev using `pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
version: 0.0.5+2
|
||||
version: 0.0.5+3
|
||||
|
||||
environment:
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
|
@ -79,6 +79,18 @@ dependencies:
|
|||
git:
|
||||
url: https://github.com/poka-IT/sdk.git
|
||||
ref: fixAndroidActivityVersion
|
||||
introduction_screen: ^3.0.2
|
||||
|
||||
dev_dependencies:
|
||||
# flutter_launcher_icons: ^0.9.2
|
||||
# flutter_launcher_icons_maker: ^^0.10.2
|
||||
icons_launcher: ^1.1.8
|
||||
build_runner: ^2.1.2
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
hive_generator: ^1.1.1
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
|
||||
flutter_icons:
|
||||
android: true
|
||||
|
@ -86,14 +98,7 @@ flutter_icons:
|
|||
image_path: "assets/icon/gecko_flat.png"
|
||||
remove_alpha_ios: true
|
||||
|
||||
dev_dependencies:
|
||||
icons_launcher: ^1.1.3
|
||||
build_runner: ^2.1.2
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
hive_generator: ^1.1.1
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
uses-material-design: true
|
||||
|
||||
# The following section is specific to Flutter.
|
||||
flutter:
|
||||
|
|
|
@ -19,7 +19,7 @@ cargo make
|
|||
|
||||
# Build APK
|
||||
echo "Build APK..."
|
||||
flutter clean
|
||||
#flutter clean
|
||||
flutter build apk --release --build-name $VERSION --build-number $BUILD
|
||||
|
||||
# Create artifacts folder
|
||||
|
|
|
@ -22,7 +22,9 @@ else
|
|||
# flutter build apk --release --build-name $VERSION --build-number $BUILD
|
||||
fi
|
||||
|
||||
if [[ -d $HOME/Téléchargements ]]; then
|
||||
if [[ -d $HOME/Nextcloud/Gecko-APK ]]; then
|
||||
DL="$HOME/Nextcloud/Gecko-APK"
|
||||
elif [[ -d $HOME/Téléchargements ]]; then
|
||||
DL="$HOME/Téléchargements"
|
||||
elif [[ -d $HOME/Downloads ]]; then
|
||||
DL="$HOME/Downloads"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
|
||||
flutter pub run flutter_launcher_icons:main
|
||||
flutter pub run icons_launcher:main
|
||||
|
||||
exit 0
|
||||
|
|
|
@ -216,7 +216,7 @@ void main() {
|
|||
test('OnBoarding - Generate secret code and confirm it', (
|
||||
{timeout = Timeout.none}) async {
|
||||
expect(await getText('step9'),
|
||||
"Super !\n\nJe vais maintenant créer votre code secret. \n\nVotre code secret chiffre votre trousseau de clefs, ce qui le rend inutilisable par d’autres, par exemple si vous perdez votre téléphone ou si on vous le vole.");
|
||||
"Super !\n\nJe vais maintenant créer votre code secret. \n\nVotre code secret chiffre votre coffre de clefs, ce qui le rend inutilisable par d’autres, par exemple si vous perdez votre téléphone ou si on vous le vole.");
|
||||
await sleep(800);
|
||||
await tapOn('goStep10');
|
||||
await sleep(50);
|
||||
|
@ -248,7 +248,7 @@ void main() {
|
|||
await driver!.enterText(pinCode!);
|
||||
|
||||
expect(await getText('step13'),
|
||||
"Top !\n\nVotre trousseau de clef et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !");
|
||||
"Top !\n\nVotre coffre et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !");
|
||||
});
|
||||
|
||||
test('My wallets - Rename first derivation', (
|
||||
|
|
|
@ -89,11 +89,11 @@ BEGIN
|
|||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "com.example" "\0"
|
||||
VALUE "CompanyName", "gecko.axiomteam.fr" "\0"
|
||||
VALUE "FileDescription", "A new Flutter project." "\0"
|
||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||
VALUE "InternalName", "gecko" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2021 com.example. All rights reserved." "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2021 gecko.axiomteam.fr. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "gecko.exe" "\0"
|
||||
VALUE "ProductName", "gecko" "\0"
|
||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||
|
|