Merge branch 'multiChest'
|
@ -0,0 +1,29 @@
|
|||
# This file configures the analyzer, which statically analyzes Dart code to
|
||||
# check for errors, warnings, and lints.
|
||||
#
|
||||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
|
||||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
|
||||
# invoked from the command line by running `flutter analyze`.
|
||||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
# The lint rules applied to this project can be customized in the
|
||||
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||
# included above or to enable additional rules. A list of all available lints
|
||||
# and their documentation is published at
|
||||
# https://dart-lang.github.io/linter/lints/index.html.
|
||||
#
|
||||
# Instead of disabling a lint rule for the entire project in the
|
||||
# section below, it can also be suppressed for a single line of code
|
||||
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
|
@ -66,6 +66,9 @@ android {
|
|||
// TODO: Add your own signing config for the release build.
|
||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
||||
signingConfig signingConfigs.debug
|
||||
useProguard true
|
||||
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
-ignorewarnings
|
||||
-keep class * {
|
||||
public private *;
|
||||
}
|
||||
-dontwarn org.xmlpull.v1.XmlPullParser
|
||||
-dontwarn org.xmlpull.v1.XmlSerializer
|
||||
-keep class org.xmlpull.v1.* {*;}
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 331 B |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 84 KiB |
After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 14 KiB |
|
@ -1,6 +1,7 @@
|
|||
import 'dart:io';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
@ -8,13 +9,12 @@ import 'package:shared_preferences/shared_preferences.dart';
|
|||
// Files paths
|
||||
Directory appPath;
|
||||
|
||||
WalletData defaultWallet;
|
||||
String appVersion;
|
||||
SharedPreferences prefs;
|
||||
String endPointGVA;
|
||||
int ramSys;
|
||||
Box<WalletData> walletBox;
|
||||
Box chestBox;
|
||||
Box<ChestData> chestBox;
|
||||
Box configBox;
|
||||
|
||||
// String cesiumPod = "https://g1.data.le-sou.org";
|
||||
|
@ -28,7 +28,7 @@ double ratio;
|
|||
var log = Logger();
|
||||
|
||||
// Colors
|
||||
Color orangeC = Color(0xffD28928);
|
||||
Color yellowC = Color(0xffFFD68E);
|
||||
Color floattingYellow = Color(0xffEFEFBF);
|
||||
Color backgroundColor = Color(0xFFF5F5F5);
|
||||
Color orangeC = const Color(0xffd07316);
|
||||
Color yellowC = const Color(0xffFFD68E);
|
||||
Color floattingYellow = const Color(0xffEFEFBF);
|
||||
Color backgroundColor = const Color(0xFFF5F5F5);
|
||||
|
|
|
@ -13,21 +13,26 @@
|
|||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
// ignore_for_file: avoid_print
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/cesiumPlus.dart';
|
||||
import 'package:gecko/models/changePin.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/models/cesium_plus.dart';
|
||||
import 'package:gecko/models/change_pin.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/chest_provider.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.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/home.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/walletsHome.dart';
|
||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
@ -36,14 +41,15 @@ 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:flutter_driver/driver_extension.dart';
|
||||
|
||||
final bool enableSentry = true;
|
||||
const bool enableSentry = true;
|
||||
|
||||
Future<void> main() async {
|
||||
enableFlutterDriverExtension();
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
HomeProvider _homeProvider = HomeProvider();
|
||||
MyWalletsProvider _walletsProvider = MyWalletsProvider();
|
||||
appPath = await getApplicationDocumentsDirectory();
|
||||
await _homeProvider.createDefaultAvatar();
|
||||
appVersion = await _homeProvider.getAppVersion();
|
||||
|
@ -52,12 +58,11 @@ Future<void> main() async {
|
|||
// Configure Hive and open boxes
|
||||
await Hive.initFlutter(appPath.path);
|
||||
Hive.registerAdapter(WalletDataAdapter());
|
||||
Hive.registerAdapter(ChestDataAdapter());
|
||||
walletBox = await Hive.openBox<WalletData>("walletBox");
|
||||
chestBox = await Hive.openBox("chestBox");
|
||||
chestBox = await Hive.openBox<ChestData>("chestBox");
|
||||
configBox = await Hive.openBox("configBox");
|
||||
|
||||
_walletsProvider.getDefaultWallet();
|
||||
|
||||
// final HiveStore _store =
|
||||
// await HiveStore.open(path: '${appPath.path}/gqlCache');
|
||||
|
||||
|
@ -102,12 +107,14 @@ Future<void> main() async {
|
|||
} else {
|
||||
print('Debug mode enabled: No sentry alerte');
|
||||
|
||||
HttpOverrides.global = MyHttpOverrides();
|
||||
|
||||
runApp(Gecko(endPointGVA));
|
||||
}
|
||||
}
|
||||
|
||||
class Gecko extends StatelessWidget {
|
||||
Gecko(this.randomEndpoint);
|
||||
const Gecko(this.randomEndpoint, {Key key}) : super(key: key);
|
||||
final String randomEndpoint;
|
||||
|
||||
@override
|
||||
|
@ -132,6 +139,7 @@ class Gecko extends StatelessWidget {
|
|||
ChangeNotifierProvider(create: (_) => HomeProvider()),
|
||||
ChangeNotifierProvider(create: (_) => HistoryProvider('')),
|
||||
ChangeNotifierProvider(create: (_) => MyWalletsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ChestProvider()),
|
||||
ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => WalletOptionsProvider()),
|
||||
ChangeNotifierProvider(create: (_) => ChangePinProvider()),
|
||||
|
@ -146,28 +154,28 @@ class Gecko extends StatelessWidget {
|
|||
minWidth: 480,
|
||||
defaultScale: true,
|
||||
breakpoints: [
|
||||
ResponsiveBreakpoint.resize(480, name: MOBILE),
|
||||
ResponsiveBreakpoint.autoScale(800, name: TABLET),
|
||||
ResponsiveBreakpoint.resize(1000, name: DESKTOP),
|
||||
const ResponsiveBreakpoint.resize(480, name: MOBILE),
|
||||
const ResponsiveBreakpoint.autoScale(800, name: TABLET),
|
||||
const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
|
||||
],
|
||||
background: Container(color: backgroundColor)),
|
||||
title: 'Ğecko',
|
||||
theme: ThemeData(
|
||||
appBarTheme: AppBarTheme(
|
||||
color: const Color(0xffFFD58D),
|
||||
foregroundColor: const Color(0xFF000000),
|
||||
appBarTheme: const AppBarTheme(
|
||||
color: Color(0xffFFD58D),
|
||||
foregroundColor: Color(0xFF000000),
|
||||
),
|
||||
primaryColor: Color(0xffFFD58D),
|
||||
textTheme: TextTheme(
|
||||
primaryColor: const Color(0xffFFD58D),
|
||||
textTheme: const TextTheme(
|
||||
bodyText1: TextStyle(),
|
||||
bodyText2: TextStyle(),
|
||||
).apply(
|
||||
bodyColor: Color(0xff855F2D),
|
||||
bodyColor: const Color(0xFF000000),
|
||||
),
|
||||
colorScheme: ColorScheme.fromSwatch()
|
||||
.copyWith(secondary: Colors.grey[850]),
|
||||
),
|
||||
home: HomeScreen(),
|
||||
home: const HomeScreen(),
|
||||
initialRoute: "/",
|
||||
routes: {
|
||||
'/mywallets': (context) => WalletsHome(),
|
||||
|
@ -176,3 +184,13 @@ class Gecko extends StatelessWidget {
|
|||
));
|
||||
}
|
||||
}
|
||||
|
||||
// This http overriding is needed to fix fail certifcat checking for Duniter node on old Android version
|
||||
class MyHttpOverrides extends HttpOverrides {
|
||||
@override
|
||||
HttpClient createHttpClient(SecurityContext context) {
|
||||
return super.createHttpClient(context)
|
||||
..badCertificateCallback =
|
||||
(X509Certificate cert, String host, int port) => true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,10 +7,6 @@ import 'package:http/http.dart' as http;
|
|||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
class CesiumPlusProvider with ChangeNotifier {
|
||||
// String pubkey = '';
|
||||
// CesiumPlusProvider(this.pubkey);
|
||||
var decodedBytes;
|
||||
var avatar64;
|
||||
TextEditingController cesiumName = TextEditingController();
|
||||
int iAvatar = 0;
|
||||
bool isComplete = false;
|
|
@ -1,38 +0,0 @@
|
|||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
|
||||
class ChangePinProvider with ChangeNotifier {
|
||||
bool ischangedPin = false;
|
||||
TextEditingController newPin = new TextEditingController();
|
||||
|
||||
Future<NewWallet> get badWallet => null;
|
||||
|
||||
Future<NewWallet> changePin(_name, _oldPin) async {
|
||||
try {
|
||||
final _dewif = chestBox.get(0);
|
||||
|
||||
NewWallet newWalletFile = await DubpRust.changeDewifPin(
|
||||
dewif: _dewif,
|
||||
oldPin: _oldPin,
|
||||
);
|
||||
|
||||
newPin.text = newWalletFile.pin;
|
||||
ischangedPin = true;
|
||||
notifyListeners();
|
||||
return newWalletFile;
|
||||
} catch (e) {
|
||||
log.e('Impossible de changer le code PIN.');
|
||||
return badWallet;
|
||||
}
|
||||
}
|
||||
|
||||
Future storeWallet(context, _name, NewWallet _newWalletFile) async {
|
||||
chestBox.put(0, _newWalletFile.dewif);
|
||||
|
||||
Navigator.pop(context);
|
||||
return _name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
|
||||
class ChangePinProvider with ChangeNotifier {
|
||||
bool ischangedPin = false;
|
||||
TextEditingController newPin = TextEditingController();
|
||||
String pinToGive;
|
||||
|
||||
Future<NewWallet> get badWallet => null;
|
||||
|
||||
Future<NewWallet> changePin(String _oldPin) async {
|
||||
try {
|
||||
final _dewif = chestBox.get(configBox.get('currentChest')).dewif;
|
||||
|
||||
NewWallet newWalletFile = await DubpRust.changeDewifPin(
|
||||
dewif: _dewif,
|
||||
oldPin: _oldPin.toUpperCase(),
|
||||
);
|
||||
|
||||
newPin.text = pinToGive = newWalletFile.pin;
|
||||
ischangedPin = true;
|
||||
notifyListeners();
|
||||
return newWalletFile;
|
||||
} catch (e) {
|
||||
log.e('Impossible de changer le code PIN.');
|
||||
return badWallet;
|
||||
}
|
||||
}
|
||||
|
||||
void storeNewPinChest(context, NewWallet _newWalletFile) {
|
||||
// ChestData currentChest = chestBox.getAt(configBox.get('currentChest'));
|
||||
// currentChest.dewif = _newWalletFile.dewif;
|
||||
// await chestBox.add(currentChest);
|
||||
|
||||
chestBox.get(configBox.get('currentChest')).dewif = _newWalletFile.dewif;
|
||||
|
||||
Navigator.pop(context, pinToGive);
|
||||
pinToGive = '';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
||||
part 'chest_data.g.dart';
|
||||
|
||||
@HiveType(typeId: 1)
|
||||
class ChestData extends HiveObject {
|
||||
@HiveField(0)
|
||||
String dewif;
|
||||
|
||||
@HiveField(2)
|
||||
String name;
|
||||
|
||||
@HiveField(3)
|
||||
int defaultWallet;
|
||||
|
||||
@HiveField(4)
|
||||
String imageName;
|
||||
|
||||
@HiveField(5)
|
||||
File imageFile;
|
||||
|
||||
@HiveField(6)
|
||||
bool isCesium;
|
||||
|
||||
ChestData({
|
||||
this.dewif,
|
||||
this.name,
|
||||
this.defaultWallet,
|
||||
this.imageName,
|
||||
this.imageFile,
|
||||
this.isCesium,
|
||||
});
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'chest_data.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class ChestDataAdapter extends TypeAdapter<ChestData> {
|
||||
@override
|
||||
final int typeId = 1;
|
||||
|
||||
@override
|
||||
ChestData read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return ChestData(
|
||||
dewif: fields[0] as String,
|
||||
name: fields[2] as String,
|
||||
defaultWallet: fields[3] as int,
|
||||
imageName: fields[4] as String,
|
||||
imageFile: fields[5] as File,
|
||||
isCesium: fields[6] as bool,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, ChestData obj) {
|
||||
writer
|
||||
..writeByte(6)
|
||||
..writeByte(0)
|
||||
..write(obj.dewif)
|
||||
..writeByte(2)
|
||||
..write(obj.name)
|
||||
..writeByte(3)
|
||||
..write(obj.defaultWallet)
|
||||
..writeByte(4)
|
||||
..write(obj.imageName)
|
||||
..writeByte(5)
|
||||
..write(obj.imageFile)
|
||||
..writeByte(6)
|
||||
..write(obj.isCesium);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is ChestDataAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
|
||||
class ChestProvider with ChangeNotifier {
|
||||
void rebuildWidget() {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future deleteChest(context, ChestData _chest) async {
|
||||
final bool _answer = await _confirmDeletingChest(context, _chest.name);
|
||||
|
||||
if (_answer) {
|
||||
await chestBox.delete(_chest.key);
|
||||
if (chestBox.isEmpty) {
|
||||
await configBox.put('currentChest', 0);
|
||||
} else {
|
||||
int lastChest = chestBox.toMap().keys.first;
|
||||
await configBox.put('currentChest', lastChest);
|
||||
}
|
||||
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _confirmDeletingChest(context, String _walletName) async {
|
||||
return showDialog<bool>(
|
||||
context: context,
|
||||
barrierDismissible: true, // user must tap button!
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text(
|
||||
'Êtes-vous sûr de vouloir supprimer le coffre "$_walletName" ?'),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: const Text("Non", key: Key('cancelDeleting')),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, false);
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: const Text("Oui", key: Key('confirmDeleting')),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
|
@ -5,7 +5,8 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:pdf/pdf.dart';
|
||||
import 'package:pdf/widgets.dart' as pw;
|
||||
import 'package:printing/printing.dart';
|
||||
|
@ -38,14 +39,41 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
bool canImport = false;
|
||||
bool isPinChanged = false;
|
||||
|
||||
void storeHDWChest(
|
||||
Future storeHDWChest(
|
||||
NewWallet _wallet, String _name, BuildContext context) async {
|
||||
WalletData myWallet =
|
||||
WalletData(chest: 0, number: 0, name: _name, derivation: 3);
|
||||
walletBox.add(myWallet);
|
||||
chestBox.put(0, _wallet.dewif);
|
||||
configBox.put('currentChest', 0);
|
||||
// walletBox.get(1)
|
||||
int chestNumber = 0;
|
||||
chestBox.toMap().forEach((key, value) {
|
||||
if (!value.isCesium) {
|
||||
chestNumber++;
|
||||
}
|
||||
});
|
||||
|
||||
String chestName;
|
||||
if (chestNumber == 0) {
|
||||
chestName = 'Coffre à Ğecko';
|
||||
} else {
|
||||
chestName = 'Coffre à Ğecko ${chestNumber + 1}';
|
||||
}
|
||||
ChestData thisChest = ChestData(
|
||||
dewif: _wallet.dewif,
|
||||
name: chestName,
|
||||
defaultWallet: 0,
|
||||
imageName: '${chestNumber % 8}.png',
|
||||
isCesium: false,
|
||||
);
|
||||
await chestBox.add(thisChest);
|
||||
int chestKey = chestBox.keys.last;
|
||||
|
||||
WalletData myWallet = WalletData(
|
||||
chest: chestKey,
|
||||
number: 0,
|
||||
name: _name,
|
||||
derivation: 3,
|
||||
imageName: '0.png');
|
||||
await walletBox.add(myWallet);
|
||||
|
||||
await configBox.put('currentChest', chestKey);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void checkAskedWord(String inputWord, String _mnemo) {
|
||||
|
@ -81,7 +109,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
int getRandomInt() {
|
||||
var rng = new Random();
|
||||
var rng = Random();
|
||||
return rng.nextInt(12);
|
||||
}
|
||||
|
||||
|
@ -112,7 +140,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
Future<String> generateMnemonic() async {
|
||||
try {
|
||||
generatedMnemonic = await DubpRust.genMnemonic(language: Language.french);
|
||||
this.actualWallet = await generateWallet(this.generatedMnemonic);
|
||||
actualWallet = await generateWallet(generatedMnemonic);
|
||||
walletIsGenerated = true;
|
||||
} catch (e) {
|
||||
log.e(e);
|
||||
|
@ -122,7 +150,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
|
||||
Future<NewWallet> generateWallet(generatedMnemonic) async {
|
||||
try {
|
||||
this.actualWallet = await DubpRust.genWalletFromMnemonic(
|
||||
actualWallet = await DubpRust.genWalletFromMnemonic(
|
||||
language: Language.french,
|
||||
mnemonic: generatedMnemonic,
|
||||
secretCodeType: SecretCodeType.letters,
|
||||
|
@ -132,10 +160,10 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
mnemonicController.text = generatedMnemonic;
|
||||
pin.text = this.actualWallet.pin;
|
||||
pin.text = actualWallet.pin;
|
||||
// notifyListeners();
|
||||
|
||||
return this.actualWallet;
|
||||
return actualWallet;
|
||||
}
|
||||
|
||||
Future<NewWallet> changePinCode({bool reload}) async {
|
||||
|
@ -158,7 +186,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
final pw.Font ttf = pw.Font.ttf(fontData.buffer.asByteData());
|
||||
final pdf = pw.Document();
|
||||
|
||||
const imageProvider = const AssetImage('assets/icon/gecko_final.png');
|
||||
const imageProvider = AssetImage('assets/icon/gecko_final.png');
|
||||
final geckoLogo = await flutterImageProvider(imageProvider);
|
||||
|
||||
pdf.addPage(
|
||||
|
@ -203,13 +231,15 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
log.d(_walletPubkey);
|
||||
}
|
||||
|
||||
Future importWallet(context, _cesiumID, _cesiumPWD) async {
|
||||
Future 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 = '';
|
||||
|
@ -218,6 +248,33 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
pin.text = '';
|
||||
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}';
|
||||
}
|
||||
|
||||
ChestData cesiumChest = ChestData(
|
||||
dewif: actualWallet.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);
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
|
|
@ -3,6 +3,8 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/screens/history.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:jdenticon_dart/jdenticon_dart.dart';
|
||||
|
@ -40,7 +42,7 @@ class HistoryProvider with ChangeNotifier {
|
|||
return 'false';
|
||||
}
|
||||
if (barcode != null) {
|
||||
this.outputPubkey.text = barcode;
|
||||
outputPubkey.text = barcode;
|
||||
isPubkey(context, barcode);
|
||||
} else {
|
||||
return 'false';
|
||||
|
@ -49,8 +51,12 @@ class HistoryProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
Future<String> pay(BuildContext context, String pinCode) async {
|
||||
// MyWalletsProvider _myWalletProvider = MyWalletsProvider();
|
||||
String dewif = chestBox.get(0);
|
||||
MyWalletsProvider _myWalletModel = MyWalletsProvider();
|
||||
int currentChest = configBox.get('currentChest');
|
||||
WalletData defaultWallet = _myWalletModel.getDefaultWallet(currentChest);
|
||||
|
||||
String dewif = chestBox.get(currentChest).dewif;
|
||||
|
||||
try {
|
||||
await DubpRust.simplePaymentFromTransparentAccount(
|
||||
accountIndex: defaultWallet.derivation,
|
||||
|
@ -71,7 +77,7 @@ class HistoryProvider with ChangeNotifier {
|
|||
String isPubkey(context, pubkey, {bool goHistory}) {
|
||||
HomeProvider _homeProvider =
|
||||
Provider.of<HomeProvider>(context, listen: false);
|
||||
final RegExp regExp = new RegExp(
|
||||
final RegExp regExp = RegExp(
|
||||
r'^[a-zA-Z0-9]+$',
|
||||
caseSensitive: false,
|
||||
multiLine: false,
|
||||
|
@ -85,9 +91,9 @@ class HistoryProvider with ChangeNotifier {
|
|||
this.pubkey = pubkey;
|
||||
getShortPubkey(pubkey);
|
||||
|
||||
this.outputPubkey.text = pubkey;
|
||||
outputPubkey.text = pubkey;
|
||||
|
||||
if (goHistory == null) goHistory = false;
|
||||
goHistory ??= false;
|
||||
|
||||
if (goHistory) {
|
||||
isHistoryScreen = true;
|
||||
|
@ -138,13 +144,13 @@ class HistoryProvider with ChangeNotifier {
|
|||
var transBC = [];
|
||||
int i = 0;
|
||||
|
||||
final currentBase = 0;
|
||||
const currentBase = 0;
|
||||
double currentUD = 10.54;
|
||||
|
||||
for (final trans in txs) {
|
||||
var direction = trans['direction'];
|
||||
final transaction = trans['node'];
|
||||
var output;
|
||||
String output;
|
||||
if (direction == "RECEIVED") {
|
||||
for (String line in transaction['outputs']) {
|
||||
if (line.contains(_pubkey)) {
|
||||
|
@ -235,15 +241,15 @@ class HistoryProvider with ChangeNotifier {
|
|||
} else {
|
||||
_message = "Vous êtes connecté au noeud\n${endPointGVA.split('/')[2]}";
|
||||
}
|
||||
final snackBar =
|
||||
SnackBar(content: Text(_message), duration: Duration(seconds: 2));
|
||||
final snackBar = SnackBar(
|
||||
content: Text(_message), duration: const Duration(seconds: 2));
|
||||
isFirstBuild = false;
|
||||
ScaffoldMessenger.of(context).showSnackBar(snackBar);
|
||||
}
|
||||
}
|
||||
|
||||
void resetdHistory() {
|
||||
this.outputPubkey.text = '';
|
||||
outputPubkey.text = '';
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
|
@ -253,7 +259,7 @@ class HistoryProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
snackCopyKey(context) {
|
||||
final snackBar = SnackBar(
|
||||
const snackBar = SnackBar(
|
||||
content:
|
||||
Text("Cette clé publique a été copié dans votre presse-papier."),
|
||||
duration: Duration(seconds: 2));
|
||||
|
@ -273,8 +279,4 @@ class HistoryProvider with ChangeNotifier {
|
|||
String generateIdenticon(String _pubkey) {
|
||||
return Jdenticon.toSvg(_pubkey);
|
||||
}
|
||||
|
||||
// num getBalance(_pubkey) {
|
||||
// getBalance(_pubkey);
|
||||
// }
|
||||
}
|
||||
|
|
|
@ -9,14 +9,14 @@ import 'package:flutter/services.dart';
|
|||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/history.dart';
|
||||
import 'package:gecko/screens/myWallets/walletsHome.dart';
|
||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||
import 'package:package_info/package_info.dart';
|
||||
|
||||
class HomeProvider with ChangeNotifier {
|
||||
int _currentIndex = 0;
|
||||
bool isSearching;
|
||||
Icon searchIcon = Icon(Icons.search);
|
||||
final TextEditingController searchQuery = new TextEditingController();
|
||||
Icon searchIcon = const Icon(Icons.search);
|
||||
final TextEditingController searchQuery = TextEditingController();
|
||||
Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
|
||||
Widget appBarExplorer =
|
||||
Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
|
||||
|
@ -57,7 +57,7 @@ class HomeProvider with ChangeNotifier {
|
|||
String _endpoint;
|
||||
int _statusCode = 0;
|
||||
|
||||
final _client = new HttpClient();
|
||||
final _client = HttpClient();
|
||||
_client.connectionTimeout = const Duration(milliseconds: 1000);
|
||||
|
||||
do {
|
||||
|
|
|
@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
|
||||
class MyWalletsProvider with ChangeNotifier {
|
||||
List<WalletData> listWallets = [];
|
||||
|
@ -18,13 +18,7 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
bool checkIfWalletExist() {
|
||||
if (appPath == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final List _walletList = readAllWallets(0);
|
||||
|
||||
if (_walletList.isEmpty) {
|
||||
if (chestBox.isEmpty) {
|
||||
log.i('No wallets detected');
|
||||
return false;
|
||||
} else {
|
||||
|
@ -47,27 +41,25 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
if (_id.isEmpty) return WalletData();
|
||||
int _chest = _id[0];
|
||||
int _nbr = _id[1];
|
||||
var _targetedWallet;
|
||||
WalletData _targetedWallet;
|
||||
|
||||
walletBox.toMap().forEach((key, value) {
|
||||
if (value.chest == _chest && value.number == _nbr) {
|
||||
_targetedWallet = value;
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
return _targetedWallet;
|
||||
}
|
||||
|
||||
void getDefaultWallet() {
|
||||
MyWalletsProvider myWalletsProvider = MyWalletsProvider();
|
||||
|
||||
if (configBox.get('defaultWallet') == null) {
|
||||
configBox.put('defaultWallet', [0, 0]);
|
||||
WalletData getDefaultWallet(int chest) {
|
||||
if (chestBox.isEmpty) {
|
||||
return WalletData(chest: 0, number: 0);
|
||||
} else {
|
||||
int defaultWalletNumber = chestBox.get(chest).defaultWallet;
|
||||
return getWalletData([chest, defaultWalletNumber]);
|
||||
}
|
||||
|
||||
defaultWallet = myWalletsProvider
|
||||
.getWalletData(configBox.get('defaultWallet').cast<int>());
|
||||
}
|
||||
|
||||
Future<int> deleteAllWallet(context) async {
|
||||
|
@ -94,19 +86,19 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
barrierDismissible: true, // user must tap button!
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title:
|
||||
Text('Êtes-vous sûr de vouloir supprimer tous vos trousseaux ?'),
|
||||
content: SingleChildScrollView(child: Text('')),
|
||||
title: const Text(
|
||||
'Êtes-vous sûr de vouloir supprimer tous vos trousseaux ?'),
|
||||
content: const SingleChildScrollView(child: Text('')),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: Text("Non"),
|
||||
child: const Text("Non"),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, false);
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
key: Key('confirmDeletingAllWallets'),
|
||||
child: Text("Oui"),
|
||||
key: const Key('confirmDeletingAllWallets'),
|
||||
child: const Text("Oui"),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
|
@ -120,7 +112,7 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
Future<void> generateNewDerivation(context, String _name) async {
|
||||
int _newDerivationNbr;
|
||||
int _newWalletNbr;
|
||||
int _chest = 0;
|
||||
int _chest = getCurrentChest();
|
||||
List<WalletData> _walletConfig = readAllWallets(_chest);
|
||||
|
||||
if (_walletConfig.isEmpty) {
|
||||
|
@ -135,12 +127,12 @@ class MyWalletsProvider with ChangeNotifier {
|
|||
chest: _chest,
|
||||
number: _newWalletNbr,
|
||||
name: _name,
|
||||
derivation: _newDerivationNbr);
|
||||
derivation: _newDerivationNbr,
|
||||
imageName: '${_newWalletNbr % 4}.png');
|
||||
|
||||
await walletBox.add(newWallet);
|
||||
|
||||
notifyListeners();
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
void rebuildWidget() {
|
|
@ -1,6 +1,8 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
|
||||
part 'walletData.g.dart';
|
||||
part 'wallet_data.g.dart';
|
||||
|
||||
@HiveType(typeId: 0)
|
||||
class WalletData extends HiveObject {
|
||||
|
@ -16,21 +18,33 @@ class WalletData extends HiveObject {
|
|||
@HiveField(3)
|
||||
int derivation;
|
||||
|
||||
WalletData({this.chest, this.number, this.name, this.derivation});
|
||||
@HiveField(4)
|
||||
String imageName;
|
||||
|
||||
@HiveField(5)
|
||||
File imageFile;
|
||||
|
||||
WalletData(
|
||||
{this.chest,
|
||||
this.number,
|
||||
this.name,
|
||||
this.derivation,
|
||||
this.imageName,
|
||||
this.imageFile});
|
||||
|
||||
// representation of WalletData when debugging
|
||||
@override
|
||||
String toString() {
|
||||
return this.name;
|
||||
return name;
|
||||
}
|
||||
|
||||
// creates the ':'-separated string from the WalletData
|
||||
String inLine() {
|
||||
return "${this.chest}:${this.number}:${this.name}:${this.derivation}";
|
||||
return "$chest:$number:$name:$derivation:$imageName";
|
||||
}
|
||||
|
||||
// returns only the id part of the ':'-separated string
|
||||
List id() {
|
||||
return [this.chest, this.number];
|
||||
List<int> id() {
|
||||
return [chest, number];
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'walletData.dart';
|
||||
part of 'wallet_data.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
|
@ -21,13 +21,15 @@ class WalletDataAdapter extends TypeAdapter<WalletData> {
|
|||
number: fields[1] as int,
|
||||
name: fields[2] as String,
|
||||
derivation: fields[3] as int,
|
||||
imageName: fields[4] as String,
|
||||
imageFile: fields[5] as File,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, WalletData obj) {
|
||||
writer
|
||||
..writeByte(4)
|
||||
..writeByte(6)
|
||||
..writeByte(0)
|
||||
..write(obj.chest)
|
||||
..writeByte(1)
|
||||
|
@ -35,7 +37,11 @@ class WalletDataAdapter extends TypeAdapter<WalletData> {
|
|||
..writeByte(2)
|
||||
..write(obj.name)
|
||||
..writeByte(3)
|
||||
..write(obj.derivation);
|
||||
..write(obj.derivation)
|
||||
..writeByte(4)
|
||||
..write(obj.imageName)
|
||||
..writeByte(5)
|
||||
..write(obj.imageFile);
|
||||
}
|
||||
|
||||
@override
|
|
@ -8,23 +8,23 @@ import 'package:flutter/foundation.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'dart:async';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
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();
|
||||
TextEditingController _newWalletName = TextEditingController();
|
||||
final TextEditingController _newWalletName = TextEditingController();
|
||||
bool isWalletUnlock = false;
|
||||
bool ischangedPin = false;
|
||||
TextEditingController newPin = new TextEditingController();
|
||||
TextEditingController newPin = TextEditingController();
|
||||
bool isEditing = false;
|
||||
bool isBalanceBlur = true;
|
||||
FocusNode walletNameFocus = FocusNode();
|
||||
TextEditingController nameController = TextEditingController();
|
||||
List<int> walletID;
|
||||
bool isDefaultWallet;
|
||||
|
||||
Future<NewWallet> get badWallet => null;
|
||||
|
@ -32,7 +32,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
Future _getPubkeyFromDewif(
|
||||
String _dewif, _pin, int _pinLenght, int derivation) async {
|
||||
String _pubkey;
|
||||
RegExp regExp = new RegExp(
|
||||
RegExp regExp = RegExp(
|
||||
r'^[A-Z0-9]+$',
|
||||
caseSensitive: false,
|
||||
multiLine: false,
|
||||
|
@ -47,7 +47,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
List _pubkeysTmp = await DubpRust.getBip32DewifAccountsPublicKeys(
|
||||
dewif: _dewif, secretCode: _pin, accountsIndex: [derivation]);
|
||||
_pubkey = _pubkeysTmp[0];
|
||||
this.pubkey.text = _pubkey;
|
||||
pubkey.text = _pubkey;
|
||||
notifyListeners();
|
||||
|
||||
return _pubkey;
|
||||
|
@ -60,7 +60,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
} else {
|
||||
try {
|
||||
_pubkey = await DubpRust.getDewifPublicKey(dewif: _dewif, pin: _pin);
|
||||
this.pubkey.text = _pubkey;
|
||||
pubkey.text = _pubkey;
|
||||
notifyListeners();
|
||||
return _pubkey;
|
||||
} catch (e) {
|
||||
|
@ -76,13 +76,13 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
context, WalletData _wallet, String _pin, int _pinLenght) async {
|
||||
isWalletUnlock = false;
|
||||
try {
|
||||
String _localDewif = chestBox.get(0);
|
||||
String _localDewif = chestBox.get(_wallet.chest).dewif;
|
||||
String _localPubkey;
|
||||
|
||||
if ((_localPubkey = await _getPubkeyFromDewif(
|
||||
_localDewif, _pin, _pinLenght, _wallet.derivation)) !=
|
||||
'false') {
|
||||
this.pubkey.text = _localPubkey;
|
||||
pubkey.text = _localPubkey;
|
||||
isWalletUnlock = true;
|
||||
return _localDewif;
|
||||
} else {
|
||||
|
@ -91,7 +91,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
} catch (e) {
|
||||
// _homeProvider.playSound('non', 0.6);
|
||||
log.e('ERROR READING FILE: $e');
|
||||
this.pubkey.clear();
|
||||
pubkey.clear();
|
||||
return 'bad';
|
||||
}
|
||||
}
|
||||
|
@ -113,8 +113,8 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
|
||||
int getPinLenght(_walletNbr) {
|
||||
String _localDewif;
|
||||
if (_walletNbr is int) {
|
||||
_localDewif = chestBox.get(0);
|
||||
if (_walletNbr is int || _walletNbr == null) {
|
||||
_localDewif = chestBox.get(configBox.get('currentChest')).dewif;
|
||||
} else {
|
||||
_localDewif = _walletNbr;
|
||||
}
|
||||
|
@ -125,69 +125,33 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
return _pinLenght;
|
||||
}
|
||||
|
||||
Future _renameWallet(List<int> _walletID, _newName) async {
|
||||
void _renameWallet(List<int> _walletID, _newName, {bool isCesium}) async {
|
||||
if (isCesium) {
|
||||
ChestData _chestTarget = chestBox.get(_walletID[0]);
|
||||
_chestTarget.name = _newName;
|
||||
await chestBox.put(_chestTarget.key, _chestTarget);
|
||||
} else {
|
||||
MyWalletsProvider myWalletClass = MyWalletsProvider();
|
||||
|
||||
WalletData _walletTarget = myWalletClass.getWalletData(_walletID);
|
||||
_walletTarget.name = _newName;
|
||||
await walletBox.putAt(_walletTarget.key, _walletTarget);
|
||||
await walletBox.put(_walletTarget.key, _walletTarget);
|
||||
}
|
||||
|
||||
_newWalletName.text = '';
|
||||
}
|
||||
|
||||
Future<bool> renameWalletAlerte(
|
||||
context, _walletName, _walletNbr, _derivation) async {
|
||||
return showDialog<bool>(
|
||||
context: context,
|
||||
barrierDismissible: true,
|
||||
builder: (BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text('Choisissez un nouveau nom pour ce portefeuille'),
|
||||
content: SingleChildScrollView(
|
||||
child: ListBody(
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
controller: this._newWalletName,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
fontSize: 14.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: Text("Valider"),
|
||||
onPressed: () {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
// await _renameWallet(_walletName, this._newWalletName.text,
|
||||
// _walletNbr, _derivation);
|
||||
});
|
||||
// notifyListeners();
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<bool> editWalletName(List<int> _wID) async {
|
||||
bool editWalletName(List<int> _wID, {bool isCesium}) {
|
||||
bool nameState;
|
||||
if (isEditing) {
|
||||
if (!nameController.text.contains(':') &&
|
||||
nameController.text.length <= 39) {
|
||||
await _renameWallet(_wID, nameController.text);
|
||||
_renameWallet(_wID, nameController.text, isCesium: isCesium);
|
||||
nameState = true;
|
||||
} else {
|
||||
nameState = false;
|
||||
}
|
||||
} else {
|
||||
walletNameFocus.requestFocus();
|
||||
nameState = true;
|
||||
}
|
||||
|
||||
|
@ -220,20 +184,20 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
'Êtes-vous sûr de vouloir supprimer le portefeuille "$_walletName" ?'),
|
||||
content: SingleChildScrollView(
|
||||
child: ListBody(
|
||||
children: <Widget>[
|
||||
children: const <Widget>[
|
||||
Text('Vous pourrez restaurer ce portefeuille plus tard.'),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: Text("Non", key: Key('cancelDeleting')),
|
||||
child: const Text("Non", key: Key('cancelDeleting')),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, false);
|
||||
},
|
||||
),
|
||||
TextButton(
|
||||
child: Text("Oui", key: Key('confirmDeleting')),
|
||||
child: const Text("Oui", key: Key('confirmDeleting')),
|
||||
onPressed: () {
|
||||
Navigator.pop(context, true);
|
||||
},
|
||||
|
@ -245,7 +209,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
}
|
||||
|
||||
snackCopyKey(context) {
|
||||
final snackBar = SnackBar(
|
||||
const snackBar = SnackBar(
|
||||
content:
|
||||
Text("Cette clé publique a été copié dans votre presse-papier."),
|
||||
duration: Duration(seconds: 2));
|
||||
|
@ -282,10 +246,11 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
File _image;
|
||||
final picker = ImagePicker();
|
||||
|
||||
final pickedFile = await picker.pickImage(source: ImageSource.gallery);
|
||||
XFile pickedFile = await picker.pickImage(source: ImageSource.gallery);
|
||||
|
||||
if (pickedFile != null) {
|
||||
_image = File(pickedFile.path);
|
||||
log.i(pickedFile.path);
|
||||
return _image;
|
||||
} else {
|
||||
log.w('No image selected.');
|
|
@ -5,22 +5,22 @@ import 'package:gecko/globals.dart';
|
|||
class CommonElements {
|
||||
// Exemple de Widget
|
||||
Widget exemple(String data) {
|
||||
return Text('Coucou');
|
||||
return const Text('Coucou');
|
||||
}
|
||||
|
||||
Widget bubbleSpeak(String text, {double long, Key textKey}) {
|
||||
return Bubble(
|
||||
padding: long == null
|
||||
? BubbleEdges.all(18)
|
||||
? const BubbleEdges.all(18)
|
||||
: BubbleEdges.symmetric(horizontal: long, vertical: 30),
|
||||
elevation: 5,
|
||||
color: Colors.white,
|
||||
margin: BubbleEdges.fromLTRB(10, 0, 20, 10),
|
||||
margin: const BubbleEdges.fromLTRB(10, 0, 20, 10),
|
||||
// nip: BubbleNip.leftTop,
|
||||
child: Text(
|
||||
text,
|
||||
key: textKey,
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
color: Colors.black, fontSize: 18, fontWeight: FontWeight.w400),
|
||||
),
|
||||
);
|
||||
|
@ -28,15 +28,15 @@ class CommonElements {
|
|||
|
||||
Widget bubbleSpeakRich(List<TextSpan> text, {Key textKey}) {
|
||||
return Bubble(
|
||||
padding: BubbleEdges.all(18),
|
||||
padding: const BubbleEdges.all(18),
|
||||
elevation: 5,
|
||||
color: Colors.white,
|
||||
margin: BubbleEdges.fromLTRB(10, 0, 20, 10),
|
||||
margin: const BubbleEdges.fromLTRB(10, 0, 20, 10),
|
||||
// nip: BubbleNip.leftTop,
|
||||
child: RichText(
|
||||
key: textKey,
|
||||
text: TextSpan(
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 18.0,
|
||||
color: Colors.black,
|
||||
),
|
||||
|
@ -87,7 +87,7 @@ class CommonElements {
|
|||
top: 70,
|
||||
right: 90,
|
||||
child: Text(progress == 12 ? '11/11' : '$progress/11',
|
||||
style: TextStyle(fontSize: 12, color: Colors.black)),
|
||||
style: const TextStyle(fontSize: 12, color: Colors.black)),
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ class CommonElements {
|
|||
return Container(
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
|
@ -113,7 +113,7 @@ class CommonElements {
|
|||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -207,14 +207,15 @@ class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget {
|
|||
GeckoSpeechAppBar(
|
||||
this.title, {
|
||||
Key key,
|
||||
}) : preferredSize = Size.fromHeight(105.4),
|
||||
}) : preferredSize = const Size.fromHeight(105.4),
|
||||
super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: Container(
|
||||
icon: SizedBox(
|
||||
height: 30,
|
||||
child: Image.asset('assets/onBoarding/gecko_bar.png')),
|
||||
onPressed: () => Navigator.popUntil(
|
|
@ -1,13 +1,15 @@
|
|||
import 'dart:io';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/cesiumPlus.dart';
|
||||
import 'package:gecko/models/cesium_plus.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'dart:ui';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -20,7 +22,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
final nRepositories = 20;
|
||||
// HistoryProvider _historyProvider;
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
FocusNode _pubkeyFocus = FocusNode();
|
||||
final FocusNode _pubkeyFocus = FocusNode();
|
||||
List cesiumData;
|
||||
final double avatarsSize = 80;
|
||||
|
||||
|
@ -28,22 +30,25 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
FetchMoreOptions opts;
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
HistoryScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
HomeProvider _homeProvider = Provider.of<HomeProvider>(context);
|
||||
this._outputPubkey.text = _historyProvider.pubkey;
|
||||
_outputPubkey.text = _historyProvider.pubkey;
|
||||
log.i('Build pubkey : ' + _historyProvider.pubkey);
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {});
|
||||
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: _homeProvider.appBarExplorer,
|
||||
actions: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: IconButton(
|
||||
icon: _homeProvider.searchIcon,
|
||||
color: Colors.grey[850],
|
||||
|
@ -79,9 +84,9 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
}
|
||||
}))
|
||||
],
|
||||
backgroundColor: Color(0xffFFD58D),
|
||||
backgroundColor: const Color(0xffFFD58D),
|
||||
),
|
||||
floatingActionButton: Container(
|
||||
floatingActionButton: SizedBox(
|
||||
height: 80.0,
|
||||
width: 80.0,
|
||||
child: FittedBox(
|
||||
|
@ -90,11 +95,11 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
onPressed: () async {
|
||||
await _historyProvider.scan(context);
|
||||
},
|
||||
child: Container(
|
||||
child: SizedBox(
|
||||
height: 40.0,
|
||||
width: 40.0,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 3),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 3),
|
||||
child: Image.asset('assets/qrcode-scan.png'))),
|
||||
backgroundColor:
|
||||
floattingYellow, //smoothYellow, //Color.fromARGB(500, 204, 255, 255),
|
||||
|
@ -102,7 +107,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
),
|
||||
),
|
||||
body: Column(children: <Widget>[
|
||||
SizedBox(height: 0),
|
||||
const SizedBox(height: 0),
|
||||
if (_historyProvider.pubkey != '')
|
||||
historyQuery(context, _historyProvider),
|
||||
]));
|
||||
|
@ -137,7 +142,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
|
||||
if (result.hasException) {
|
||||
log.e('Error GVA: ' + result.exception.toString());
|
||||
return Column(children: <Widget>[
|
||||
return Column(children: const <Widget>[
|
||||
SizedBox(height: 50),
|
||||
Text(
|
||||
"Aucun noeud GVA valide n'a pu être trouvé.\nVeuillez réessayer ultérieurement.",
|
||||
|
@ -169,10 +174,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
child: Builder(
|
||||
builder: (context) => Expanded(
|
||||
child: ListView(
|
||||
key: Key('listTransactions'),
|
||||
key: const Key('listTransactions'),
|
||||
controller: scrollController,
|
||||
children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
if (_historyProvider.pubkey != '')
|
||||
Row(
|
||||
mainAxisAlignment:
|
||||
|
@ -212,7 +217,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
if (_avatar.hasData) {
|
||||
return SingleChildScrollView(
|
||||
padding:
|
||||
EdgeInsets.all(0.0),
|
||||
const EdgeInsets.all(
|
||||
0.0),
|
||||
child: Image.file(
|
||||
_avatar.data[0],
|
||||
height: avatarsSize));
|
||||
|
@ -223,7 +229,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
height: avatarsSize);
|
||||
})),
|
||||
GestureDetector(
|
||||
key: Key('copyPubkey'),
|
||||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(
|
||||
text: _historyProvider.pubkey));
|
||||
|
@ -232,7 +238,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
child: Text(
|
||||
_historyProvider.getShortPubkey(
|
||||
_historyProvider.pubkey),
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontFamily: 'Monospace')),
|
||||
|
@ -255,7 +261,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
],
|
||||
),
|
||||
)),
|
||||
SizedBox(width: 0)
|
||||
const SizedBox(width: 0)
|
||||
]),
|
||||
if (_isFirstExec)
|
||||
Row(
|
||||
|
@ -272,25 +278,22 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
_historyProvider.pubkey),
|
||||
initialData: '...',
|
||||
builder: (context, snapshot) {
|
||||
return Text(
|
||||
snapshot.data != null
|
||||
? snapshot.data
|
||||
: '-',
|
||||
style:
|
||||
TextStyle(fontSize: 20));
|
||||
return Text(snapshot.data ?? '-',
|
||||
style: const TextStyle(
|
||||
fontSize: 20));
|
||||
}))
|
||||
]),
|
||||
SizedBox(height: 18),
|
||||
const SizedBox(height: 18),
|
||||
if (_isFirstExec)
|
||||
Container(
|
||||
padding:
|
||||
const EdgeInsets.fromLTRB(0, 0, 0, 0),
|
||||
child: Text(balance.toString() + ' Ğ1',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(fontSize: 18.0))),
|
||||
SizedBox(height: 20),
|
||||
style: const TextStyle(fontSize: 18.0))),
|
||||
const SizedBox(height: 20),
|
||||
ElevatedButton(
|
||||
key: Key('switchPayHistory'),
|
||||
key: const Key('switchPayHistory'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 1,
|
||||
primary: Colors.grey[50], // background
|
||||
|
@ -330,6 +333,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
}
|
||||
|
||||
Widget payView(context, HistoryProvider _historyProvider) {
|
||||
MyWalletsProvider _myWalletProvider = MyWalletsProvider();
|
||||
WalletData defaultWallet =
|
||||
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
||||
|
||||
return Stack(
|
||||
clipBehavior: Clip.hardEdge,
|
||||
children: <Widget>[
|
||||
|
@ -338,32 +345,32 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
Text('Commentaire:', style: TextStyle(fontSize: 20.0)),
|
||||
const SizedBox(height: 20),
|
||||
const Text('Commentaire:', style: TextStyle(fontSize: 20.0)),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextField(
|
||||
controller: _historyProvider.payComment,
|
||||
maxLines: 2,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold))),
|
||||
SizedBox(height: 20),
|
||||
Text('Montant (DU/Ğ1):', style: TextStyle(fontSize: 20.0)),
|
||||
const SizedBox(height: 20),
|
||||
const Text('Montant (DU/Ğ1):', style: TextStyle(fontSize: 20.0)),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextFormField(
|
||||
style: TextStyle(fontSize: 22),
|
||||
style: const TextStyle(fontSize: 22),
|
||||
controller: _historyProvider.payAmount,
|
||||
textAlign: TextAlign.center,
|
||||
maxLines: 1,
|
||||
keyboardType: TextInputType.number,
|
||||
decoration: InputDecoration(
|
||||
contentPadding:
|
||||
EdgeInsets.symmetric(vertical: 25.0, horizontal: 10.0),
|
||||
contentPadding: const EdgeInsets.symmetric(
|
||||
vertical: 25.0, horizontal: 10.0),
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(10.0)),
|
||||
),
|
||||
|
@ -406,7 +413,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
int keyID = 0;
|
||||
|
||||
return _historyProvider.transBC == null
|
||||
? Text('Aucune transaction à afficher.')
|
||||
? const Text('Aucune transaction à afficher.')
|
||||
: Column(children: <Widget>[
|
||||
for (var repository in _historyProvider.transBC)
|
||||
Padding(
|
||||
|
@ -421,14 +428,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
fontWeight: FontWeight.w700),
|
||||
textAlign: TextAlign.center),
|
||||
title: Text(repository[3],
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 15.0, fontFamily: 'Monospace'),
|
||||
textAlign: TextAlign.center),
|
||||
subtitle: Text(repository[6] != '' ? repository[6] : '-',
|
||||
style: TextStyle(fontSize: 12.0),
|
||||
style: const TextStyle(fontSize: 12.0),
|
||||
textAlign: TextAlign.center),
|
||||
trailing: Text("${repository[4]} Ğ1",
|
||||
style: TextStyle(fontSize: 14.0),
|
||||
style: const TextStyle(fontSize: 14.0),
|
||||
textAlign: TextAlign.justify),
|
||||
dense: true,
|
||||
isThreeLine: false,
|
||||
|
@ -439,14 +446,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
|||
if (result.isLoading)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
children: const <Widget>[
|
||||
CircularProgressIndicator(),
|
||||
],
|
||||
),
|
||||
// if (_historyProvider.isTheEnd) // What I did before ...
|
||||
if (!_historyProvider.pageInfo['hasPreviousPage'])
|
||||
Column(
|
||||
children: <Widget>[
|
||||
children: const <Widget>[
|
||||
SizedBox(height: 15),
|
||||
Text("Début de l'historique.",
|
||||
textAlign: TextAlign.center,
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
import 'package:dubp/dubp.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_provider.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
||||
import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:gecko/screens/onBoarding/0_no_keychain_found.dart';
|
||||
import 'dart:ui';
|
||||
import 'package:gecko/screens/settings.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class HomeScreen extends StatelessWidget {
|
||||
const HomeScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -20,6 +24,8 @@ class HomeScreen extends StatelessWidget {
|
|||
HistoryProvider _historyStatic = HistoryProvider('');
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
Provider.of<ChestProvider>(context);
|
||||
|
||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||
|
||||
// walletBox.toMap().forEach((key, value) {
|
||||
|
@ -42,7 +48,7 @@ class HomeScreen extends StatelessWidget {
|
|||
Expanded(
|
||||
child: ListView(padding: EdgeInsets.zero, children: <Widget>[
|
||||
DrawerHeader(
|
||||
child: Column(children: <Widget>[
|
||||
child: Column(children: const <Widget>[
|
||||
SizedBox(height: 0),
|
||||
Image(
|
||||
image: AssetImage('assets/icon/gecko_final.png'),
|
||||
|
@ -53,8 +59,8 @@ class HomeScreen extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
ListTile(
|
||||
key: Key('parameters'),
|
||||
title: Text('Paramètres'),
|
||||
key: const Key('parameters'),
|
||||
title: const Text('Paramètres'),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
Navigator.push(
|
||||
|
@ -66,34 +72,34 @@ class HomeScreen extends StatelessWidget {
|
|||
},
|
||||
),
|
||||
ListTile(
|
||||
title: Text('A propos'),
|
||||
title: const Text('A propos'),
|
||||
onTap: () {
|
||||
// Update the state of the app.
|
||||
// ...
|
||||
},
|
||||
),
|
||||
])),
|
||||
Container(
|
||||
child: Align(
|
||||
Align(
|
||||
alignment: FractionalOffset.bottomCenter,
|
||||
child: Text('Ğecko v$appVersion'))),
|
||||
SizedBox(height: 20)
|
||||
child: Text('Ğecko v$appVersion')),
|
||||
const SizedBox(height: 20)
|
||||
],
|
||||
),
|
||||
),
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: Builder(
|
||||
builder: (context) => IconButton(
|
||||
key: Key('drawerMenu'),
|
||||
icon: new Icon(Icons.menu, color: Colors.grey[850]),
|
||||
key: const Key('drawerMenu'),
|
||||
icon: Icon(Icons.menu, color: Colors.grey[850]),
|
||||
onPressed: () => Scaffold.of(context).openDrawer(),
|
||||
)),
|
||||
title: _homeProvider.appBarTitle,
|
||||
actions: [
|
||||
Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 16),
|
||||
child: IconButton(
|
||||
key: Key('searchIcon'),
|
||||
key: const Key('searchIcon'),
|
||||
icon: _homeProvider.searchIcon,
|
||||
color: Colors.grey[850],
|
||||
onPressed: () {
|
||||
|
@ -103,7 +109,7 @@ class HomeScreen extends StatelessWidget {
|
|||
color: Colors.grey[850],
|
||||
);
|
||||
_homeProvider.appBarTitle = TextField(
|
||||
key: Key('searchInput'),
|
||||
key: const Key('searchInput'),
|
||||
autofocus: true,
|
||||
controller: _homeProvider.searchQuery,
|
||||
onChanged: (text) {
|
||||
|
@ -129,9 +135,9 @@ class HomeScreen extends StatelessWidget {
|
|||
}
|
||||
}))
|
||||
],
|
||||
backgroundColor: Color(0xffFFD58D),
|
||||
backgroundColor: const Color(0xffFFD58D),
|
||||
),
|
||||
backgroundColor: Color(0xffF9F9F1),
|
||||
backgroundColor: const Color(0xffF9F9F1),
|
||||
body: Builder(
|
||||
builder: (ctx) => StatefulWrapper(
|
||||
onInit: () {
|
||||
|
@ -142,21 +148,21 @@ class HomeScreen extends StatelessWidget {
|
|||
},
|
||||
child: Column(children: <Widget>[
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 20),
|
||||
padding: const EdgeInsets.only(top: 20),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
children: const <Widget>[
|
||||
SizedBox(width: 7),
|
||||
Image(
|
||||
image:
|
||||
AssetImage('assets/icon/gecko_final.png'),
|
||||
image: AssetImage('assets/icon/gecko_final.png'),
|
||||
height: 180),
|
||||
])),
|
||||
]),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 15),
|
||||
padding: const EdgeInsets.only(top: 15),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
children: const <Widget>[
|
||||
Text(
|
||||
"y'a pas de lézard !",
|
||||
textAlign: TextAlign.center,
|
||||
|
@ -165,9 +171,10 @@ class HomeScreen extends StatelessWidget {
|
|||
fontSize: 17,
|
||||
fontStyle: FontStyle.italic),
|
||||
)
|
||||
])),
|
||||
]),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 60),
|
||||
padding: EdgeInsets.only(top: isTall ? 100 : 60),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
|
@ -175,22 +182,21 @@ class HomeScreen extends StatelessWidget {
|
|||
Container(
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(22),
|
||||
child: Image(
|
||||
image: AssetImage(
|
||||
'assets/qrcode-scan.png'),
|
||||
height: 60)),
|
||||
onTap: () async {
|
||||
await _historyProvider
|
||||
.scan(context);
|
||||
await _historyProvider.scan(context);
|
||||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -202,17 +208,17 @@ class HomeScreen extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
Text(
|
||||
const SizedBox(height: 12),
|
||||
const Text(
|
||||
"Payer par QR-Code",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.black, fontSize: 16),
|
||||
style: TextStyle(color: Colors.black, fontSize: 16),
|
||||
)
|
||||
])
|
||||
])),
|
||||
]),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 50),
|
||||
padding: const EdgeInsets.only(top: 50),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
|
@ -220,15 +226,15 @@ class HomeScreen extends StatelessWidget {
|
|||
Container(
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 20, vertical: 16),
|
||||
child: Image(
|
||||
image: AssetImage(
|
||||
'assets/blockchain.png'),
|
||||
image:
|
||||
AssetImage('assets/blockchain.png'),
|
||||
height: 70)),
|
||||
onTap: () {
|
||||
// Navigator.push(
|
||||
|
@ -241,7 +247,7 @@ class HomeScreen extends StatelessWidget {
|
|||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -253,34 +259,34 @@ class HomeScreen extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
Text(
|
||||
const SizedBox(height: 12),
|
||||
const Text(
|
||||
"Explorer\n",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.black, fontSize: 16),
|
||||
style: TextStyle(color: Colors.black, fontSize: 16),
|
||||
)
|
||||
]),
|
||||
SizedBox(width: 140),
|
||||
const SizedBox(width: 140),
|
||||
Column(children: <Widget>[
|
||||
Container(
|
||||
child: ClipOval(
|
||||
key: Key('manageWallets'),
|
||||
key: const Key('manageWallets'),
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(23),
|
||||
child: Image(
|
||||
image: AssetImage(
|
||||
'assets/lock.png'),
|
||||
image: AssetImage('assets/lock.png'),
|
||||
height: 57)),
|
||||
onTap: () {
|
||||
WalletData defaultWallet =
|
||||
_myWalletProvider.getDefaultWallet(
|
||||
configBox.get('currentChest'));
|
||||
isWalletsExists
|
||||
? Navigator.push(context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet,
|
||||
action: "mywallets",
|
||||
|
@ -290,14 +296,13 @@ class HomeScreen extends StatelessWidget {
|
|||
// Navigator.pushNamed(
|
||||
// context, '/mywallets')
|
||||
: Navigator.push(context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return NoKeyChainScreen();
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return const NoKeyChainScreen();
|
||||
}));
|
||||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -309,15 +314,15 @@ class HomeScreen extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 12),
|
||||
Text(
|
||||
const SizedBox(height: 12),
|
||||
const Text(
|
||||
"Gérer mes\nportefeuilles",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Colors.black, fontSize: 16),
|
||||
style: TextStyle(color: Colors.black, fontSize: 16),
|
||||
)
|
||||
])
|
||||
]))
|
||||
]),
|
||||
)
|
||||
]),
|
||||
// bottomNavigationBar: BottomNavigationBar(
|
||||
// backgroundColor: Color(0xffFFD58D),
|
||||
|
@ -340,14 +345,17 @@ class HomeScreen extends StatelessWidget {
|
|||
// ),
|
||||
// ],
|
||||
// ),
|
||||
)));
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class StatefulWrapper extends StatefulWidget {
|
||||
final Function onInit;
|
||||
final Widget child;
|
||||
const StatefulWrapper({@required this.onInit, @required this.child});
|
||||
const StatefulWrapper({Key key, @required this.onInit, @required this.child})
|
||||
: super(key: key);
|
||||
@override
|
||||
_StatefulWrapperState createState() => _StatefulWrapperState();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,352 @@
|
|||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/chest_provider.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/models/wallet_options.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';
|
||||
|
||||
int _nbrLinesName = 1;
|
||||
bool _isNewNameValid = false;
|
||||
|
||||
Widget cesiumWalletOptions(BuildContext context, ChestData cesiumWallet,
|
||||
MyWalletsProvider _myWalletProvider) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context);
|
||||
ChestProvider _chestProvider =
|
||||
Provider.of<ChestProvider>(context, listen: false);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
|
||||
final String shortPubkey =
|
||||
_walletOptions.getShortPubkey(_walletOptions.pubkey.text);
|
||||
|
||||
if (_walletOptions.nameController.text == null || _isNewNameValid == false) {
|
||||
_walletOptions.nameController.text = cesiumWallet.name;
|
||||
} else {
|
||||
cesiumWallet.name = _walletOptions.nameController.text;
|
||||
}
|
||||
|
||||
_walletOptions.nameController.text.length >= 15
|
||||
? _nbrLinesName = 2
|
||||
: _nbrLinesName = 1;
|
||||
if (_walletOptions.nameController.text.length >= 26 && isTall) {
|
||||
_nbrLinesName = 3;
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
body: Builder(
|
||||
builder: (ctx) => SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
Container(
|
||||
height: isTall ? 30 : 15,
|
||||
color: yellowC,
|
||||
),
|
||||
Container(
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
yellowC,
|
||||
const Color(0xfffafafa),
|
||||
],
|
||||
)),
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 25),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar = await _walletOptions.changeAvatar();
|
||||
if (newAvatar != null) {
|
||||
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();
|
||||
if (newAvatar != null) {
|
||||
cesiumWallet.imageFile = newAvatar;
|
||||
}
|
||||
_walletOptions.reloadBuild();
|
||||
},
|
||||
child: Column(children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/walletOptions/camera.png',
|
||||
),
|
||||
const SizedBox(height: 100)
|
||||
])),
|
||||
Column(children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
Column(children: <Widget>[
|
||||
SizedBox(
|
||||
width: 260,
|
||||
child: TextField(
|
||||
key: const Key('walletName'),
|
||||
autofocus: false,
|
||||
focusNode: _walletOptions.walletNameFocus,
|
||||
enabled: _walletOptions.isEditing,
|
||||
controller: _walletOptions.nameController,
|
||||
maxLines: _nbrLinesName,
|
||||
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,
|
||||
fontFamily: 'Monospace')),
|
||||
),
|
||||
SizedBox(height: isTall ? 5 : 0),
|
||||
Query(
|
||||
options: QueryOptions(
|
||||
document: gql(getBalance),
|
||||
variables: {
|
||||
'pubkey': _walletOptions.pubkey.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,
|
||||
sigmaY: _walletOptions.isBalanceBlur ? 5 : 0),
|
||||
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',
|
||||
)),
|
||||
]),
|
||||
const SizedBox(width: 0),
|
||||
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,
|
||||
)
|
||||
])
|
||||
]),
|
||||
]),
|
||||
])),
|
||||
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));
|
||||
}),
|
||||
SizedBox(height: 15 * ratio),
|
||||
GestureDetector(
|
||||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: _walletOptions.pubkey.text));
|
||||
_walletOptions.snackCopyKey(ctx);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/key.png',
|
||||
),
|
||||
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.pubkey.text));
|
||||
_walletOptions.snackCopyKey(ctx);
|
||||
},
|
||||
child: Row(children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/walletOptions/copy-white.png',
|
||||
),
|
||||
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.isPubkey(ctx, _walletOptions.pubkey.text,
|
||||
goHistory: true);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/clock.png',
|
||||
),
|
||||
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);
|
||||
_myWalletProvider.pinCode = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return ChangePinScreen(
|
||||
walletName: cesiumWallet.name,
|
||||
walletProvider: _myWalletProvider,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 28),
|
||||
Image.asset(
|
||||
'assets/chests/secret_code.png',
|
||||
),
|
||||
const SizedBox(width: 18),
|
||||
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',
|
||||
),
|
||||
const SizedBox(width: 25),
|
||||
const Text(
|
||||
'Supprimer ce coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
color: Color(0xffD80000),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
|
@ -1,103 +0,0 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/changePin.dart';
|
||||
import 'dart:io';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||
ChangePinScreen(
|
||||
{Key keyMyWallets, @required this.walletName, @required this.oldPin})
|
||||
: super(key: keyMyWallets);
|
||||
final String walletName;
|
||||
final oldPin;
|
||||
Directory appPath;
|
||||
NewWallet _newWalletFile;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
ChangePinProvider _changePin = Provider.of<ChangePinProvider>(context);
|
||||
// _walletOptions.changePin(walletName, oldPin);
|
||||
// _walletOptions.newPin.text = _tmpPin;
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
_changePin.newPin.text = '';
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
_changePin.newPin.text = '';
|
||||
Navigator.of(context).pop();
|
||||
}),
|
||||
title: SizedBox(
|
||||
height: 22,
|
||||
child: Text(walletName),
|
||||
)),
|
||||
body: Center(
|
||||
child: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 80),
|
||||
Text(
|
||||
'Choisissez un code secret autogénéré :',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 17.0,
|
||||
color: Colors.grey[600],
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
SizedBox(height: 30),
|
||||
Container(
|
||||
child: Stack(
|
||||
alignment: Alignment.centerRight,
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
enabled: true,
|
||||
controller: _changePin.newPin,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () async {
|
||||
_newWalletFile =
|
||||
await _changePin.changePin(walletName, oldPin);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 30),
|
||||
SizedBox(
|
||||
width: 200,
|
||||
height: 50,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 12,
|
||||
primary: Colors.green[400], //smoothYellow, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: _changePin.newPin.text != ''
|
||||
? () {
|
||||
_changePin.newPin.text = '';
|
||||
_changePin.storeWallet(
|
||||
context, walletName, _newWalletFile);
|
||||
}
|
||||
: null,
|
||||
child: Text('Confirmer', style: TextStyle(fontSize: 28))),
|
||||
)
|
||||
])))));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/change_pin.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'dart:io';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class ChangePinScreen extends StatelessWidget with ChangeNotifier {
|
||||
ChangePinScreen(
|
||||
{Key keyMyWallets,
|
||||
@required this.walletName,
|
||||
@required this.walletProvider})
|
||||
: super(key: keyMyWallets);
|
||||
final String walletName;
|
||||
final MyWalletsProvider walletProvider;
|
||||
Directory appPath;
|
||||
NewWallet _newWalletFile;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
ChangePinProvider _changePin = Provider.of<ChangePinProvider>(context);
|
||||
// _walletOptions.changePin(walletName, oldPin);
|
||||
// _walletOptions.newPin.text = _tmpPin;
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
_changePin.newPin.text = '';
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
_changePin.newPin.text = '';
|
||||
Navigator.of(context).pop();
|
||||
}),
|
||||
title: SizedBox(
|
||||
height: 22,
|
||||
child: Text(walletName),
|
||||
)),
|
||||
body: Center(
|
||||
child: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
const SizedBox(height: 80),
|
||||
Text(
|
||||
'Choisissez un code secret autogénéré :',
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 17.0,
|
||||
color: Colors.grey[600],
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
const SizedBox(height: 30),
|
||||
Stack(
|
||||
alignment: Alignment.centerRight,
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
enabled: false,
|
||||
controller: _changePin.newPin,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () async {
|
||||
_newWalletFile =
|
||||
await _changePin.changePin(walletProvider.pinCode);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 30),
|
||||
SizedBox(
|
||||
width: 200,
|
||||
height: 50,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 12,
|
||||
primary: Colors.green[400], //smoothYellow, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: _changePin.newPin.text != ''
|
||||
? () {
|
||||
_changePin.newPin.text = '';
|
||||
_changePin.storeNewPinChest(context, _newWalletFile);
|
||||
walletProvider.pinCode = _changePin.newPin.text;
|
||||
}
|
||||
: null,
|
||||
child: const Text(
|
||||
'Confirmer',
|
||||
style: TextStyle(fontSize: 28),
|
||||
),
|
||||
),
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
import 'dart:ui';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/models/chest_provider.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/change_pin.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ChestOptions extends StatelessWidget {
|
||||
const ChestOptions({Key keyMyWallets, @required this.walletProvider})
|
||||
: super(key: keyMyWallets);
|
||||
final MyWalletsProvider walletProvider;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
ChestProvider _chestProvider =
|
||||
Provider.of<ChestProvider>(context, listen: false);
|
||||
|
||||
ChestData currentChest = chestBox.get(configBox.get('currentChest'));
|
||||
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/mywallets'),
|
||||
);
|
||||
}),
|
||||
title: SizedBox(
|
||||
height: 22,
|
||||
child: Text(currentChest.name),
|
||||
)),
|
||||
body: Builder(
|
||||
builder: (ctx) => SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 30 * ratio),
|
||||
InkWell(
|
||||
key: const Key('changePin'),
|
||||
onTap: () async {
|
||||
// await _chestProvider.changePin(context, cesiumWallet);
|
||||
walletProvider.pinCode = await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) {
|
||||
return ChangePinScreen(
|
||||
walletName: currentChest.name,
|
||||
walletProvider: walletProvider,
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 28),
|
||||
Image.asset(
|
||||
'assets/chests/secret_code.png',
|
||||
),
|
||||
const SizedBox(width: 18),
|
||||
const Text('Changer mon code secret',
|
||||
style: TextStyle(fontSize: 20, color: Colors.black)),
|
||||
])),
|
||||
),
|
||||
SizedBox(height: 10 * ratio),
|
||||
InkWell(
|
||||
key: const Key('deleteChest'),
|
||||
onTap: () async {
|
||||
await _chestProvider.deleteChest(context, currentChest);
|
||||
},
|
||||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
const SizedBox(width: 33),
|
||||
Image.asset(
|
||||
'assets/walletOptions/trash.png',
|
||||
),
|
||||
const SizedBox(width: 24),
|
||||
const Text(
|
||||
'Supprimer ce coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
color: Color(0xffD80000),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,158 @@
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/generate_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:carousel_slider/carousel_slider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ChooseChest extends StatefulWidget {
|
||||
const ChooseChest({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<StatefulWidget> createState() {
|
||||
return _ChooseChestState();
|
||||
}
|
||||
}
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class _ChooseChestState extends State<ChooseChest> {
|
||||
TextEditingController tplController = TextEditingController();
|
||||
CarouselController buttonCarouselController = CarouselController();
|
||||
int currentChest = configBox.get('currentChest');
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Sélectionner mon coffre'),
|
||||
)),
|
||||
body: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 160 * ratio),
|
||||
CarouselSlider(
|
||||
carouselController: buttonCarouselController,
|
||||
options: CarouselOptions(
|
||||
height: 210,
|
||||
onPageChanged: (index, reason) {
|
||||
currentChest = chestBox.toMap().keys.toList()[index];
|
||||
setState(() {});
|
||||
},
|
||||
enableInfiniteScroll: false,
|
||||
initialPage: currentChest,
|
||||
enlargeCenterPage: true,
|
||||
viewportFraction: 0.6,
|
||||
),
|
||||
items: chestBox.toMap().entries.map((i) {
|
||||
return Builder(
|
||||
builder: (BuildContext context) {
|
||||
return Column(children: <Widget>[
|
||||
i.value.imageFile == null
|
||||
? Image.asset(
|
||||
'assets/chests/${i.value.imageName}',
|
||||
height: 150,
|
||||
)
|
||||
: Image.file(
|
||||
i.value.imageFile,
|
||||
height: 150,
|
||||
),
|
||||
const SizedBox(height: 30),
|
||||
Text(
|
||||
i.value.name,
|
||||
style: const TextStyle(fontSize: 21),
|
||||
),
|
||||
]);
|
||||
},
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
if (chestBox.values.toList().length > 1)
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: chestBox.toMap().entries.map((entry) {
|
||||
return GestureDetector(
|
||||
onTap: () =>
|
||||
buttonCarouselController.animateToPage(entry.key),
|
||||
child: Container(
|
||||
width: 12.0,
|
||||
height: 12.0,
|
||||
margin: const EdgeInsets.symmetric(
|
||||
vertical: 8.0, horizontal: 4.0),
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color:
|
||||
(Theme.of(context).brightness == Brightness.dark
|
||||
? Colors.white
|
||||
: Colors.black)
|
||||
.withOpacity(
|
||||
currentChest == entry.key ? 0.9 : 0.4)),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
SizedBox(height: 80 * ratio),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
height: 70,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: orangeC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
configBox.put('currentChest', currentChest);
|
||||
WalletData defaultWallet =
|
||||
_myWalletProvider.getDefaultWallet(currentChest);
|
||||
_myWalletProvider.rebuildWidget();
|
||||
Navigator.pushAndRemoveUntil(context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return UnlockingWallet(
|
||||
wallet: defaultWallet,
|
||||
action: "mywallets",
|
||||
);
|
||||
}), ModalRoute.withName('/'));
|
||||
},
|
||||
child: Text(
|
||||
'Ouvrir ce coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
color: backgroundColor,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
InkWell(
|
||||
key: const Key('createNewChest'),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return GenerateFastChestScreen();
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: SizedBox(
|
||||
width: 400,
|
||||
height: 70,
|
||||
child: Center(
|
||||
child: Text('Créer un nouveau coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
color: orangeC,
|
||||
fontWeight: FontWeight.w600))),
|
||||
)),
|
||||
const SizedBox(height: 10),
|
||||
]),
|
||||
));
|
||||
}
|
||||
}
|
|
@ -3,9 +3,10 @@ import 'dart:async';
|
|||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_options.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -19,10 +20,10 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
String generatedMnemonic;
|
||||
NewWallet generatedWallet;
|
||||
|
||||
TextEditingController _mnemonicController = TextEditingController();
|
||||
TextEditingController _inputRestoreWord = TextEditingController();
|
||||
final TextEditingController _mnemonicController = TextEditingController();
|
||||
final TextEditingController _inputRestoreWord = TextEditingController();
|
||||
TextEditingController walletName = TextEditingController();
|
||||
FocusNode _wordFocus = FocusNode();
|
||||
final FocusNode _wordFocus = FocusNode();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -35,7 +36,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
Provider.of<WalletOptionsProvider>(context);
|
||||
final int _currentChest = _myWalletProvider.getCurrentChest();
|
||||
|
||||
this._mnemonicController.text = generatedMnemonic;
|
||||
_mnemonicController.text = generatedMnemonic;
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
_generateWalletProvider.isAskedWordValid = false;
|
||||
|
@ -45,21 +46,22 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.black),
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
_generateWalletProvider.isAskedWordValid = false;
|
||||
_generateWalletProvider.askedWordColor = Colors.black;
|
||||
}),
|
||||
title: SizedBox(
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Enregistrer ce trousseau'),
|
||||
)),
|
||||
body: Center(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 15),
|
||||
Container(
|
||||
const SizedBox(height: 15),
|
||||
SizedBox(
|
||||
width: 360,
|
||||
child: Text(
|
||||
'Quel est le ${_generateWalletProvider.nbrWord + 1}ème mot de votre phrase de restauration ?',
|
||||
|
@ -70,11 +72,11 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
fontWeight: FontWeight.w400),
|
||||
)),
|
||||
TextFormField(
|
||||
key: Key('askedWord'),
|
||||
key: const Key('askedWord'),
|
||||
focusNode: _wordFocus,
|
||||
autofocus: true,
|
||||
enabled: !_generateWalletProvider.isAskedWordValid,
|
||||
controller: this._inputRestoreWord,
|
||||
controller: _inputRestoreWord,
|
||||
textInputAction: TextInputAction.next,
|
||||
onChanged: (value) {
|
||||
_generateWalletProvider.checkAskedWord(
|
||||
|
@ -82,13 +84,13 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
},
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
decoration: const InputDecoration(),
|
||||
style: TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: _generateWalletProvider.askedWordColor,
|
||||
fontWeight: FontWeight.w500)),
|
||||
SizedBox(height: 12),
|
||||
Container(
|
||||
const SizedBox(height: 12),
|
||||
SizedBox(
|
||||
width: 360,
|
||||
child: Text(
|
||||
'Choisissez un nom pour votre premier portefeuille :',
|
||||
|
@ -99,21 +101,21 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
fontWeight: FontWeight.w400),
|
||||
)),
|
||||
TextFormField(
|
||||
key: Key('walletName'),
|
||||
key: const Key('walletName'),
|
||||
focusNode: _generateWalletProvider.walletNameFocus,
|
||||
inputFormatters: [
|
||||
FilteringTextInputFormatter.allow(
|
||||
RegExp('[A-Za-z|0-9|\\-|_| ]')),
|
||||
],
|
||||
controller: this.walletName,
|
||||
controller: walletName,
|
||||
textInputAction: TextInputAction.next,
|
||||
onChanged: (v) {
|
||||
_generateWalletProvider.nameChanged();
|
||||
},
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w500)),
|
||||
|
@ -124,7 +126,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
width: 200,
|
||||
height: 50,
|
||||
child: ElevatedButton(
|
||||
key: Key('confirmStorage'),
|
||||
key: const Key('confirmStorage'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 12,
|
||||
primary: Colors
|
||||
|
@ -133,7 +135,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
),
|
||||
onPressed: (_generateWalletProvider
|
||||
.isAskedWordValid &&
|
||||
this.walletName.text != '')
|
||||
walletName.text != '')
|
||||
? () {
|
||||
_generateWalletProvider.storeHDWChest(
|
||||
generatedWallet,
|
||||
|
@ -146,7 +148,6 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
_myWalletProvider.listWallets =
|
||||
_myWalletProvider
|
||||
.readAllWallets(_currentChest);
|
||||
_myWalletProvider.getDefaultWallet();
|
||||
scheduleMicrotask(() {
|
||||
_walletOptions.reloadBuild();
|
||||
_myWalletProvider.rebuildWidget();
|
||||
|
@ -155,12 +156,12 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier {
|
|||
context, ModalRoute.withName('/'));
|
||||
}
|
||||
: null,
|
||||
child: Text('Confirmer',
|
||||
child: const Text('Confirmer',
|
||||
style: TextStyle(fontSize: 28))),
|
||||
))),
|
||||
SizedBox(height: 70),
|
||||
Text('TRICHE PENDANT ALPHA: ' + this._mnemonicController.text,
|
||||
style: TextStyle(
|
||||
const SizedBox(height: 70),
|
||||
Text('TRICHE PENDANT ALPHA: ' + _mnemonicController.text,
|
||||
style: const TextStyle(
|
||||
fontSize: 10.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.normal)),
|
|
@ -1,22 +1,26 @@
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/screens/myWallets/confirmWalletStorage.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/confirm_wallet_storage.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||
import 'package:printing/printing.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:super_tooltip/super_tooltip.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class GenerateWalletsScreen extends StatelessWidget {
|
||||
class GenerateFastChestScreen extends StatelessWidget {
|
||||
SuperTooltip tooltip;
|
||||
bool hasError = false;
|
||||
String validPin = 'NO PIN';
|
||||
String currentText = "";
|
||||
var pinColor = Colors.grey[300];
|
||||
|
||||
GlobalKey _toolTipSentence = GlobalKey();
|
||||
GlobalKey _toolTipSecret = GlobalKey();
|
||||
final GlobalKey _toolTipSentence = GlobalKey();
|
||||
final GlobalKey _toolTipSecret = GlobalKey();
|
||||
|
||||
GenerateFastChestScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -25,20 +29,23 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
Provider.of<GenerateWalletsProvider>(context);
|
||||
_generateWalletProvider.generateMnemonic();
|
||||
|
||||
MyWalletsProvider _myWalletClass = MyWalletsProvider();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: SizedBox(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Générer un trousseau'),
|
||||
)),
|
||||
floatingActionButton: Container(
|
||||
floatingActionButton: SizedBox(
|
||||
height: 80.0,
|
||||
width: 80.0,
|
||||
child: FittedBox(
|
||||
child: FloatingActionButton(
|
||||
heroTag: "buttonGenerateWallet",
|
||||
onPressed: () => _generateWalletProvider.generateMnemonic(),
|
||||
child: Container(
|
||||
child: SizedBox(
|
||||
height: 40.0,
|
||||
width: 40.0,
|
||||
child: Icon(Icons.replay, color: Colors.grey[850]),
|
||||
|
@ -49,7 +56,7 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
body: Builder(
|
||||
builder: (ctx) => SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
toolTips(_toolTipSentence, 'Phrase de restauration:',
|
||||
"Notez et gardez cette phrase précieusement sur un papier, elle vous servira à restaurer votre portefeuille sur un autre appareil"),
|
||||
TextField(
|
||||
|
@ -57,33 +64,32 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
controller: _generateWalletProvider.mnemonicController,
|
||||
maxLines: 3,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(
|
||||
decoration: const InputDecoration(
|
||||
contentPadding: EdgeInsets.all(15.0),
|
||||
),
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 22.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w400)),
|
||||
SizedBox(height: 8),
|
||||
const SizedBox(height: 8),
|
||||
toolTips(_toolTipSecret, 'Code secret:',
|
||||
"Retenez bien votre code secret, il vous sera demandé à chaque paiement, ainsi que pour configurer votre portefeuille"),
|
||||
Container(
|
||||
child: Stack(
|
||||
Stack(
|
||||
alignment: Alignment.centerRight,
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
key: Key('generatedPin'),
|
||||
key: const Key('generatedPin'),
|
||||
enabled: false,
|
||||
controller: _generateWalletProvider.pin,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.replay),
|
||||
icon: const Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () {
|
||||
_generateWalletProvider.changePinCode(
|
||||
|
@ -92,19 +98,18 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
ElevatedButton(
|
||||
key: Key('storeKeychain'),
|
||||
key: const Key('storeKeychain'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: yellowC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: _generateWalletProvider.walletIsGenerated
|
||||
? () {
|
||||
? () async {
|
||||
_generateWalletProvider.nbrWord =
|
||||
_generateWalletProvider.getRandomInt();
|
||||
Navigator.push(
|
||||
await Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return ConfirmStoreWallet(
|
||||
|
@ -115,11 +120,21 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
.actualWallet);
|
||||
}),
|
||||
);
|
||||
await Future.delayed(
|
||||
const Duration(milliseconds: 20));
|
||||
await Navigator.pushAndRemoveUntil(context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return UnlockingWallet(
|
||||
wallet: _myWalletClass.getDefaultWallet(
|
||||
configBox.get('currentChest')),
|
||||
action: "mywallets",
|
||||
);
|
||||
}), ModalRoute.withName('/'));
|
||||
}
|
||||
: null,
|
||||
child: Text('Enregistrer ce trousseau',
|
||||
child: const Text('Enregistrer ce trousseau',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
|
@ -130,7 +145,7 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
}),
|
||||
);
|
||||
},
|
||||
child: Icon(Icons.print))
|
||||
child: const Icon(Icons.print))
|
||||
]),
|
||||
)));
|
||||
}
|
||||
|
@ -142,21 +157,21 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
_toolTip.ensureTooltipVisible();
|
||||
},
|
||||
child: Tooltip(
|
||||
padding: EdgeInsets.all(10),
|
||||
padding: const EdgeInsets.all(10),
|
||||
key: _key,
|
||||
showDuration: Duration(seconds: 5),
|
||||
showDuration: const Duration(seconds: 5),
|
||||
message: _message,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
SizedBox(width: 20),
|
||||
const SizedBox(width: 20),
|
||||
Column(children: <Widget>[
|
||||
SizedBox(
|
||||
width: 30,
|
||||
height: 25,
|
||||
child:
|
||||
Icon(Icons.info_outline, size: 22, color: orangeC)),
|
||||
SizedBox(height: 1)
|
||||
const SizedBox(height: 1)
|
||||
]),
|
||||
Text(
|
||||
_text,
|
||||
|
@ -165,14 +180,14 @@ class GenerateWalletsScreen extends StatelessWidget {
|
|||
color: Colors.grey[600],
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
SizedBox(width: 45)
|
||||
const SizedBox(width: 45)
|
||||
])));
|
||||
}
|
||||
}
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class PrintWallet extends StatelessWidget {
|
||||
PrintWallet(this.sentence);
|
||||
const PrintWallet(this.sentence, {Key key}) : super(key: key);
|
||||
|
||||
final String sentence;
|
||||
|
||||
|
@ -182,7 +197,9 @@ class PrintWallet extends StatelessWidget {
|
|||
Provider.of<GenerateWalletsProvider>(context);
|
||||
return MaterialApp(
|
||||
home: Scaffold(
|
||||
appBar: AppBar(title: Text('Imprimer ce trousseau')),
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const Text('Imprimer ce trousseau')),
|
||||
body: PdfPreview(
|
||||
build: (format) => _generateWalletProvider.printWallet(sentence),
|
||||
),
|
|
@ -1,13 +1,15 @@
|
|||
import 'dart:async';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_options.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class ImportWalletScreen extends StatelessWidget {
|
||||
const ImportWalletScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -27,26 +29,26 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.black),
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
_generateWalletProvider.resetImportView();
|
||||
Navigator.of(context).pop();
|
||||
}),
|
||||
title: SizedBox(
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Importer un portefeuille'),
|
||||
)),
|
||||
body: Builder(
|
||||
builder: (ctx) => SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
TextFormField(
|
||||
onChanged: (text) {
|
||||
if (_debounce?.isActive ?? false)
|
||||
// _generateWalletProvider.canImport = false;
|
||||
// _generateWalletProvider.reloadBuild();
|
||||
if (_debounce?.isActive ?? false) {
|
||||
_debounce.cancel();
|
||||
}
|
||||
_debounce =
|
||||
Timer(const Duration(milliseconds: 200), () {
|
||||
_generateWalletProvider
|
||||
|
@ -77,13 +79,12 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
TextFormField(
|
||||
onChanged: (text) {
|
||||
if (_debounce?.isActive ?? false)
|
||||
// _generateWalletProvider.canImport = false;
|
||||
// _generateWalletProvider.reloadBuild();
|
||||
if (_debounce?.isActive ?? false) {
|
||||
_debounce.cancel();
|
||||
}
|
||||
_debounce =
|
||||
Timer(const Duration(milliseconds: 200), () {
|
||||
_generateWalletProvider
|
||||
|
@ -115,7 +116,7 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Clipboard.setData(ClipboardData(
|
||||
|
@ -125,17 +126,16 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
},
|
||||
child: Text(
|
||||
_generateWalletProvider.cesiumPubkey.text,
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 14.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontFamily: 'Monospace'),
|
||||
)),
|
||||
SizedBox(height: 20),
|
||||
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"),
|
||||
Container(
|
||||
child: Stack(
|
||||
Stack(
|
||||
alignment: Alignment.centerRight,
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
|
@ -143,13 +143,13 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
controller: _generateWalletProvider.pin,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
fontSize: 30.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.replay),
|
||||
icon: const Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () {
|
||||
_generateWalletProvider.changePinCode(
|
||||
|
@ -158,8 +158,7 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 30),
|
||||
const SizedBox(height: 30),
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: yellowC, // background
|
||||
|
@ -169,19 +168,18 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
_generateWalletProvider.isPinChanged
|
||||
? () {
|
||||
_generateWalletProvider
|
||||
.importWallet(
|
||||
context,
|
||||
_generateWalletProvider
|
||||
.cesiumID.text,
|
||||
_generateWalletProvider
|
||||
.cesiumPWD.text)
|
||||
.importCesiumWallet()
|
||||
.then((value) {
|
||||
_myWalletProvider.rebuildWidget();
|
||||
_generateWalletProvider.resetImportView();
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
});
|
||||
}
|
||||
: null,
|
||||
child: Text('Importer ce portefeuille Cesium',
|
||||
child: const Text('Importer ce portefeuille Cesium',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
]),
|
||||
))));
|
||||
|
@ -194,21 +192,21 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
_toolTip.ensureTooltipVisible();
|
||||
},
|
||||
child: Tooltip(
|
||||
padding: EdgeInsets.all(10),
|
||||
padding: const EdgeInsets.all(10),
|
||||
key: _key,
|
||||
showDuration: Duration(seconds: 5),
|
||||
showDuration: const Duration(seconds: 5),
|
||||
message: _message,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
SizedBox(width: 20),
|
||||
const SizedBox(width: 20),
|
||||
Column(children: <Widget>[
|
||||
SizedBox(
|
||||
width: 30,
|
||||
height: 25,
|
||||
child:
|
||||
Icon(Icons.info_outline, size: 22, color: orangeC)),
|
||||
SizedBox(height: 1)
|
||||
const SizedBox(height: 1)
|
||||
]),
|
||||
Text(
|
||||
_text,
|
||||
|
@ -217,7 +215,7 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
color: Colors.grey[600],
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
SizedBox(width: 45)
|
||||
const SizedBox(width: 45)
|
||||
])));
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
import 'dart:async';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/models/chest_data.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/wallet_options.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/myWallets/choose_chest.dart';
|
||||
import 'package:pin_code_fields/pin_code_fields.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
|
@ -21,8 +23,7 @@ class UnlockingWallet extends StatelessWidget {
|
|||
// ignore: close_sinks
|
||||
StreamController<ErrorAnimationType> errorController;
|
||||
final formKey = GlobalKey<FormState>();
|
||||
bool hasError = false;
|
||||
var pinColor = Color(0xffF9F9F1);
|
||||
var pinColor = const Color(0xffF9F9F1);
|
||||
var walletPin = '';
|
||||
String resultPay;
|
||||
|
||||
|
@ -34,43 +35,87 @@ class UnlockingWallet extends StatelessWidget {
|
|||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context);
|
||||
|
||||
// log.d("defaultWallet: " + defaultWallet.toString());
|
||||
final int _pinLenght = _walletOptions.getPinLenght(wallet.number);
|
||||
int _pinLenght;
|
||||
|
||||
ChestData currentChest = chestBox.get(configBox.get('currentChest'));
|
||||
|
||||
if (currentChest.isCesium) {
|
||||
_pinLenght = _walletOptions.getPinLenght(currentChest.dewif);
|
||||
wallet = WalletData(derivation: -1, chest: currentChest.key);
|
||||
} else {
|
||||
_pinLenght = _walletOptions.getPinLenght(wallet.number);
|
||||
}
|
||||
errorController = StreamController<ErrorAnimationType>();
|
||||
|
||||
return Scaffold(
|
||||
// backgroundColor: Colors.brown[600],
|
||||
body: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
Expanded(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 150),
|
||||
Text(
|
||||
'Veuillez tapper votre code secret pour dévérouiller votre portefeuille.',
|
||||
SizedBox(height: isTall ? 80 : 20),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
|
||||
currentChest.imageFile == null
|
||||
? Image.asset(
|
||||
'assets/chests/${currentChest.imageName}',
|
||||
width: isTall ? 130 : 100,
|
||||
)
|
||||
: Image.file(
|
||||
currentChest.imageFile,
|
||||
width: isTall ? 130 : 100,
|
||||
),
|
||||
const SizedBox(width: 5),
|
||||
SizedBox(
|
||||
width: 250,
|
||||
child: Text(
|
||||
currentChest.name,
|
||||
textAlign: TextAlign.center,
|
||||
style: const TextStyle(
|
||||
fontSize: 25,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w700),
|
||||
)),
|
||||
]),
|
||||
SizedBox(height: 30 * ratio),
|
||||
const SizedBox(
|
||||
width: 400,
|
||||
child: Text(
|
||||
'Pour déverrouiller votre coffre, composez votre code secret à l’abri des lézards indiscrets :',
|
||||
style: TextStyle(
|
||||
fontSize: 15.0,
|
||||
fontSize: 19,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w400),
|
||||
),
|
||||
SizedBox(height: 50),
|
||||
pinForm(context, _pinLenght, wallet.number, wallet.derivation),
|
||||
]),
|
||||
),
|
||||
GestureDetector(
|
||||
)),
|
||||
SizedBox(height: 40 * ratio),
|
||||
pinForm(context, _pinLenght),
|
||||
SizedBox(height: 3 * ratio),
|
||||
InkWell(
|
||||
key: const Key('chooseChest'),
|
||||
onTap: () {
|
||||
Navigator.popUntil(
|
||||
Navigator.push(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return const ChooseChest();
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: Icon(Icons.home))
|
||||
child: SizedBox(
|
||||
width: 400,
|
||||
height: 70,
|
||||
child: Center(
|
||||
child: Text('Changer de coffre',
|
||||
style: TextStyle(
|
||||
fontSize: 22,
|
||||
color: orangeC,
|
||||
fontWeight: FontWeight.w600))),
|
||||
)),
|
||||
]),
|
||||
),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
||||
Widget pinForm(context, _pinLenght, int _walletNbr, int _derivation) {
|
||||
Widget pinForm(context, _pinLenght) {
|
||||
// var _walletPin = '';
|
||||
// ignore: close_sinks
|
||||
StreamController<ErrorAnimationType> errorController =
|
||||
|
@ -82,11 +127,14 @@ class UnlockingWallet extends StatelessWidget {
|
|||
Provider.of<MyWalletsProvider>(context);
|
||||
HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
|
||||
|
||||
FocusNode pinFocus = FocusNode();
|
||||
|
||||
return Form(
|
||||
key: formKey,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 30),
|
||||
padding: EdgeInsets.symmetric(vertical: 5 * ratio, horizontal: 30),
|
||||
child: PinCodeTextField(
|
||||
focusNode: pinFocus,
|
||||
autoFocus: true,
|
||||
appContext: context,
|
||||
pastedTextStyle: TextStyle(
|
||||
|
@ -109,19 +157,19 @@ class UnlockingWallet extends StatelessWidget {
|
|||
borderWidth: 4,
|
||||
shape: PinCodeFieldShape.box,
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
fieldHeight: 60,
|
||||
fieldHeight: 50 * ratio,
|
||||
fieldWidth: 50,
|
||||
activeFillColor: hasError ? Colors.blueAccent : Colors.black,
|
||||
activeFillColor: Colors.black,
|
||||
),
|
||||
cursorColor: Colors.black,
|
||||
animationDuration: Duration(milliseconds: 300),
|
||||
textStyle: TextStyle(fontSize: 20, height: 1.6),
|
||||
backgroundColor: Color(0xffF9F9F1),
|
||||
animationDuration: const Duration(milliseconds: 300),
|
||||
textStyle: const TextStyle(fontSize: 20, height: 1.6),
|
||||
backgroundColor: const Color(0xffF9F9F1),
|
||||
enableActiveFill: false,
|
||||
errorAnimationController: errorController,
|
||||
controller: _enterPin,
|
||||
keyboardType: TextInputType.text,
|
||||
boxShadows: [
|
||||
boxShadows: const [
|
||||
BoxShadow(
|
||||
offset: Offset(0, 1),
|
||||
color: Colors.black12,
|
||||
|
@ -131,24 +179,23 @@ class UnlockingWallet extends StatelessWidget {
|
|||
onCompleted: (_pin) async {
|
||||
log.d("Completed");
|
||||
_myWalletProvider.pinCode = _pin;
|
||||
final resultWallet = await _walletOptions.readLocalWallet(
|
||||
context, this.wallet, _pin.toUpperCase(), _pinLenght);
|
||||
final String resultWallet = await _walletOptions.readLocalWallet(
|
||||
context, wallet, _pin.toUpperCase(), _pinLenght);
|
||||
// _myWalletProvider.pinCode = _pin.toUpperCase();
|
||||
_myWalletProvider.pinLenght = _pinLenght;
|
||||
|
||||
if (resultWallet == 'bad') {
|
||||
errorController.add(ErrorAnimationType
|
||||
.shake); // Triggering error shake animation
|
||||
hasError = true;
|
||||
pinColor = Colors.red[600];
|
||||
_walletOptions.reloadBuild();
|
||||
pinFocus.requestFocus();
|
||||
} else {
|
||||
pinColor = Colors.green[400];
|
||||
// await Future.delayed(Duration(milliseconds: 50));
|
||||
if (action == "mywallets") {
|
||||
Navigator.pushNamed(formKey.currentContext, '/mywallets');
|
||||
} else if (action == "pay") {
|
||||
print("Go payments");
|
||||
resultPay =
|
||||
await _historyProvider.pay(context, _pin.toUpperCase());
|
||||
await _paymentsResult(context);
|
||||
|
@ -156,8 +203,8 @@ class UnlockingWallet extends StatelessWidget {
|
|||
}
|
||||
},
|
||||
onChanged: (value) {
|
||||
if (pinColor != Color(0xFFA4B600)) {
|
||||
pinColor = Color(0xFFA4B600);
|
||||
if (pinColor != const Color(0xFFA4B600)) {
|
||||
pinColor = const Color(0xFFA4B600);
|
||||
}
|
||||
},
|
||||
)),
|
||||
|
@ -173,10 +220,10 @@ class UnlockingWallet extends StatelessWidget {
|
|||
title: Text(resultPay == "Success"
|
||||
? 'Paiement effecuté avec succès !'
|
||||
: "Une erreur s'est produite lors du paiement"),
|
||||
content: SingleChildScrollView(child: Text('')),
|
||||
content: const SingleChildScrollView(child: Text('')),
|
||||
actions: <Widget>[
|
||||
TextButton(
|
||||
child: Text("OK"),
|
||||
child: const Text("OK"),
|
||||
onPressed: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
|
@ -1,12 +1,13 @@
|
|||
import 'dart:io';
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/history.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/queries.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/models/wallet_options.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
@ -42,15 +43,14 @@ class WalletOptions extends StatelessWidget {
|
|||
_walletOptions.nameController.text.length >= 15
|
||||
? _nbrLinesName = 2
|
||||
: _nbrLinesName = 1;
|
||||
if (_walletOptions.nameController.text.length >= 26 && isTall)
|
||||
if (_walletOptions.nameController.text.length >= 26 && isTall) {
|
||||
_nbrLinesName = 3;
|
||||
}
|
||||
|
||||
_walletOptions.walletID = [0, wallet.number];
|
||||
WalletData defaultWallet =
|
||||
_myWalletProvider.getDefaultWallet(_currentChest);
|
||||
|
||||
_myWalletProvider.getDefaultWallet();
|
||||
|
||||
_walletOptions.isDefaultWallet =
|
||||
(defaultWallet.id()[1] == _walletOptions.walletID[1]);
|
||||
_walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]);
|
||||
|
||||
int currentChest = _myWalletProvider.getCurrentChest();
|
||||
|
||||
|
@ -69,8 +69,9 @@ class WalletOptions extends StatelessWidget {
|
|||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.black),
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
_walletOptions.isEditing = false;
|
||||
_walletOptions.isBalanceBlur = true;
|
||||
|
@ -97,27 +98,43 @@ class WalletOptions extends StatelessWidget {
|
|||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
yellowC,
|
||||
Color(0xfffafafa),
|
||||
const Color(0xfffafafa),
|
||||
],
|
||||
)),
|
||||
child: Row(children: <Widget>[
|
||||
SizedBox(width: 25),
|
||||
const SizedBox(width: 25),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar =
|
||||
await _walletOptions.changeAvatar();
|
||||
if (newAvatar != null) {
|
||||
wallet.imageFile = newAvatar;
|
||||
}
|
||||
_walletOptions.reloadBuild();
|
||||
},
|
||||
child: Image.asset(
|
||||
'assets/chopp-gecko2.png',
|
||||
child: wallet.imageFile == null
|
||||
? Image.asset(
|
||||
'assets/avatars/${wallet.imageName}',
|
||||
width: 110,
|
||||
)
|
||||
: Image.file(
|
||||
wallet.imageFile,
|
||||
width: 110,
|
||||
)),
|
||||
InkWell(
|
||||
onTap: () async {
|
||||
File newAvatar =
|
||||
await _walletOptions.changeAvatar();
|
||||
if (newAvatar != null) {
|
||||
wallet.imageFile = newAvatar;
|
||||
}
|
||||
_walletOptions.reloadBuild();
|
||||
},
|
||||
child: Column(children: <Widget>[
|
||||
Image.asset(
|
||||
'assets/walletOptions/camera.png',
|
||||
),
|
||||
SizedBox(height: 100)
|
||||
const SizedBox(height: 100)
|
||||
])),
|
||||
Column(children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
|
@ -125,13 +142,14 @@ class WalletOptions extends StatelessWidget {
|
|||
SizedBox(
|
||||
width: 260,
|
||||
child: TextField(
|
||||
key: Key('walletName'),
|
||||
key: const Key('walletName'),
|
||||
autofocus: false,
|
||||
focusNode: _walletOptions.walletNameFocus,
|
||||
enabled: _walletOptions.isEditing,
|
||||
controller: _walletOptions.nameController,
|
||||
maxLines: _nbrLinesName,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(
|
||||
decoration: const InputDecoration(
|
||||
border: InputBorder.none,
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
|
@ -160,7 +178,7 @@ class WalletOptions extends StatelessWidget {
|
|||
}
|
||||
|
||||
if (result.isLoading) {
|
||||
return Text('Loading');
|
||||
return const Text('Loading');
|
||||
}
|
||||
|
||||
// List repositories = result.data['viewer']['repositories']['nodes'];
|
||||
|
@ -187,7 +205,7 @@ class WalletOptions extends StatelessWidget {
|
|||
sigmaY: _walletOptions.isBalanceBlur
|
||||
? 5
|
||||
: 0),
|
||||
child: Text('$wBalanceUD',
|
||||
child: Text(wBalanceUD,
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 20 : 18,
|
||||
color: Colors.black)),
|
||||
|
@ -205,9 +223,9 @@ class WalletOptions extends StatelessWidget {
|
|||
// );
|
||||
},
|
||||
),
|
||||
SizedBox(height: 5),
|
||||
const SizedBox(height: 5),
|
||||
InkWell(
|
||||
key: Key('displayBalance'),
|
||||
key: const Key('displayBalance'),
|
||||
onTap: () {
|
||||
_walletOptions.bluringBalance();
|
||||
},
|
||||
|
@ -217,41 +235,17 @@ class WalletOptions extends StatelessWidget {
|
|||
: 'assets/walletOptions/icon_oeuil_close.png',
|
||||
)),
|
||||
]),
|
||||
SizedBox(width: 0),
|
||||
const SizedBox(width: 0),
|
||||
Column(children: <Widget>[
|
||||
InkWell(
|
||||
key: Key('renameWallet'),
|
||||
key: const Key('renameWallet'),
|
||||
onTap: () async {
|
||||
// _walletOptions.isEditing = true;
|
||||
// _walletOptions.reloadBuild();
|
||||
// _walletOptions.walletNameFocus
|
||||
// .requestFocus();
|
||||
_isNewNameValid = await _walletOptions
|
||||
.editWalletName(_walletOptions.walletID);
|
||||
// .then((_) {
|
||||
// _walletOptions.walletNameFocus
|
||||
// .requestFocus();
|
||||
// _walletOptions.reloadBuild();
|
||||
// });
|
||||
|
||||
// .then(
|
||||
// (_result) {
|
||||
// if (_result == true) {
|
||||
// WidgetsBinding.instance
|
||||
// .addPostFrameCallback((_) {
|
||||
// _myWalletProvider.listWallets =
|
||||
// _myWalletProvider
|
||||
// .readAllWallets(
|
||||
// _currentChest);
|
||||
// _myWalletProvider.rebuildWidget();
|
||||
// });
|
||||
// Navigator.popUntil(
|
||||
// context,
|
||||
// ModalRoute.withName('/mywallets'),
|
||||
// );
|
||||
// }
|
||||
// },
|
||||
// );
|
||||
_isNewNameValid =
|
||||
_walletOptions.editWalletName(wallet.id(),
|
||||
isCesium: false);
|
||||
await Future.delayed(
|
||||
const Duration(milliseconds: 30));
|
||||
_walletOptions.walletNameFocus.requestFocus();
|
||||
},
|
||||
child: ClipRRect(
|
||||
child: Image.asset(
|
||||
|
@ -261,10 +255,7 @@ class WalletOptions extends StatelessWidget {
|
|||
width: 20,
|
||||
height: 20),
|
||||
)),
|
||||
// Image.asset(
|
||||
// 'assets/walletOptions/edit.png',
|
||||
// ),
|
||||
SizedBox(
|
||||
const SizedBox(
|
||||
height: 60,
|
||||
)
|
||||
])
|
||||
|
@ -279,11 +270,11 @@ class WalletOptions extends StatelessWidget {
|
|||
return snapshot.data != null
|
||||
? Image.memory(snapshot.data,
|
||||
height: isTall ? 300 : 270)
|
||||
: Text('-', style: TextStyle(fontSize: 20));
|
||||
: const Text('-', style: TextStyle(fontSize: 20));
|
||||
}),
|
||||
SizedBox(height: 15 * ratio),
|
||||
GestureDetector(
|
||||
key: Key('copyPubkey'),
|
||||
key: const Key('copyPubkey'),
|
||||
onTap: () {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: _walletOptions.pubkey.text));
|
||||
|
@ -292,30 +283,29 @@ class WalletOptions extends StatelessWidget {
|
|||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
SizedBox(width: 30),
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/key.png',
|
||||
),
|
||||
SizedBox(width: 10),
|
||||
const SizedBox(width: 20),
|
||||
Text("${shortPubkey.split(':')[0]}:",
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontFamily: 'Monospace',
|
||||
color: Colors.black)),
|
||||
Text(shortPubkey.split(':')[1],
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 22,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontFamily: 'Monospace')),
|
||||
SizedBox(width: 15),
|
||||
const SizedBox(width: 15),
|
||||
SizedBox(
|
||||
height: 40,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius:
|
||||
new BorderRadius.circular(8),
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
elevation: 1,
|
||||
primary: orangeC, // background
|
||||
|
@ -330,7 +320,7 @@ class WalletOptions extends StatelessWidget {
|
|||
Image.asset(
|
||||
'assets/walletOptions/copy-white.png',
|
||||
),
|
||||
SizedBox(width: 7),
|
||||
const SizedBox(width: 7),
|
||||
Text('Copier',
|
||||
style: TextStyle(
|
||||
fontSize: 15,
|
||||
|
@ -339,7 +329,7 @@ class WalletOptions extends StatelessWidget {
|
|||
]))),
|
||||
SizedBox(height: 10 * ratio),
|
||||
InkWell(
|
||||
key: Key('displayHistory'),
|
||||
key: const Key('displayHistory'),
|
||||
onTap: () {
|
||||
_historyProvider.isPubkey(ctx, _walletOptions.pubkey.text,
|
||||
goHistory: true);
|
||||
|
@ -347,22 +337,23 @@ class WalletOptions extends StatelessWidget {
|
|||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
SizedBox(width: 30),
|
||||
const SizedBox(width: 30),
|
||||
Image.asset(
|
||||
'assets/walletOptions/clock.png',
|
||||
),
|
||||
SizedBox(width: 12),
|
||||
Text('Historique des transactions',
|
||||
const SizedBox(width: 22),
|
||||
const Text('Historique des transactions',
|
||||
style:
|
||||
TextStyle(fontSize: 20, color: Colors.black)),
|
||||
]))),
|
||||
SizedBox(height: 12 * ratio),
|
||||
InkWell(
|
||||
key: Key('setDefaultWallet'),
|
||||
key: const Key('setDefaultWallet'),
|
||||
onTap: !_walletOptions.isDefaultWallet
|
||||
? () {
|
||||
defaultWallet = wallet;
|
||||
configBox.put('defaultWallet', wallet.id());
|
||||
chestBox.get(currentChest).defaultWallet =
|
||||
wallet.number;
|
||||
_myWalletProvider.readAllWallets(_currentChest);
|
||||
_myWalletProvider.rebuildWidget();
|
||||
}
|
||||
|
@ -370,14 +361,14 @@ class WalletOptions extends StatelessWidget {
|
|||
child: SizedBox(
|
||||
height: 50,
|
||||
child: Row(children: <Widget>[
|
||||
SizedBox(width: 31),
|
||||
const SizedBox(width: 31),
|
||||
CircleAvatar(
|
||||
backgroundColor: Colors.grey[
|
||||
_walletOptions.isDefaultWallet ? 300 : 500],
|
||||
child: Image.asset(
|
||||
'assets/walletOptions/android-checkmark.png',
|
||||
)),
|
||||
SizedBox(width: 12),
|
||||
const SizedBox(width: 22),
|
||||
Text(
|
||||
_walletOptions.isDefaultWallet
|
||||
? 'Ce portefeuille est celui par defaut'
|
||||
|
@ -391,7 +382,7 @@ class WalletOptions extends StatelessWidget {
|
|||
SizedBox(height: 17 * ratio),
|
||||
if (!_walletOptions.isDefaultWallet)
|
||||
InkWell(
|
||||
key: Key('deleteWallet'),
|
||||
key: const Key('deleteWallet'),
|
||||
onTap: !_walletOptions.isDefaultWallet
|
||||
? () async {
|
||||
await _walletOptions.deleteWallet(
|
||||
|
@ -405,12 +396,12 @@ class WalletOptions extends StatelessWidget {
|
|||
}
|
||||
: null,
|
||||
child: Row(children: <Widget>[
|
||||
SizedBox(width: 33),
|
||||
const SizedBox(width: 33),
|
||||
Image.asset(
|
||||
'assets/walletOptions/trash.png',
|
||||
),
|
||||
SizedBox(width: 14),
|
||||
Text('Supprimer ce portefeuille',
|
||||
const SizedBox(width: 24),
|
||||
const Text('Supprimer ce portefeuille',
|
||||
style: TextStyle(
|
||||
fontSize: 20, color: Color(0xffD80000))),
|
||||
])),
|
|
@ -1,252 +0,0 @@
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletData.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/myWallets/walletOptions.dart';
|
||||
import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class WalletsHome extends StatelessWidget {
|
||||
final _derivationKey = GlobalKey<FormState>();
|
||||
int firstWalletDerivation;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
MyWalletsProvider myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
final int _currentChest = myWalletProvider.getCurrentChest();
|
||||
|
||||
myWalletProvider.listWallets =
|
||||
myWalletProvider.readAllWallets(_currentChest);
|
||||
final bool isWalletsExists = myWalletProvider.checkIfWalletExist();
|
||||
|
||||
if (myWalletProvider.listWallets.isEmpty) {
|
||||
firstWalletDerivation = myWalletProvider.listWallets[0].derivation;
|
||||
|
||||
myWalletProvider.getDefaultWallet();
|
||||
}
|
||||
|
||||
log.d("${myWalletProvider.pinCode},${myWalletProvider.pinLenght}");
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
leading: IconButton(
|
||||
icon: Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
}),
|
||||
title: Text('Mes portefeuilles',
|
||||
key: Key('myWallets'),
|
||||
style: TextStyle(color: Colors.grey[850])),
|
||||
backgroundColor: Color(0xffFFD58D),
|
||||
),
|
||||
floatingActionButton: Visibility(
|
||||
visible: (isWalletsExists && firstWalletDerivation != -1),
|
||||
child: Container(
|
||||
height: 80.0,
|
||||
width: 80.0,
|
||||
child: FittedBox(
|
||||
child: FloatingActionButton(
|
||||
key: Key('addDerivation'),
|
||||
heroTag: "buttonGenerateWallet",
|
||||
onPressed: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return addNewDerivation(context, 1);
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
height: 40,
|
||||
width: 40,
|
||||
child: Icon(Icons.person_add_alt_1_rounded,
|
||||
color: Colors.grey[850])),
|
||||
backgroundColor: floattingYellow)))),
|
||||
body: SafeArea(
|
||||
child: !isWalletsExists
|
||||
? NoKeyChainScreen()
|
||||
: myWalletsTiles(context))));
|
||||
}
|
||||
|
||||
Widget myWalletsTiles(BuildContext context) {
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context);
|
||||
|
||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||
|
||||
if (!isWalletsExists) {
|
||||
return Text('');
|
||||
}
|
||||
|
||||
if (_myWalletProvider.listWallets.isEmpty) {
|
||||
return Expanded(
|
||||
child: Column(children: <Widget>[
|
||||
Center(
|
||||
child: Text(
|
||||
'Veuillez générer votre premier portefeuille',
|
||||
style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500),
|
||||
)),
|
||||
]));
|
||||
}
|
||||
|
||||
List _listWallets = _myWalletProvider.listWallets;
|
||||
|
||||
return GridView.count(
|
||||
key: Key('listWallets'),
|
||||
crossAxisCount: 2,
|
||||
childAspectRatio: 1,
|
||||
crossAxisSpacing: 0,
|
||||
mainAxisSpacing: 0,
|
||||
children: <Widget>[
|
||||
for (WalletData _repository in _listWallets)
|
||||
Padding(
|
||||
padding: EdgeInsets.all(16),
|
||||
child: GestureDetector(
|
||||
onTap: () async {
|
||||
await _walletOptions.readLocalWallet(
|
||||
context,
|
||||
_repository,
|
||||
_myWalletProvider.pinCode,
|
||||
_myWalletProvider.pinLenght);
|
||||
Navigator.push(
|
||||
context,
|
||||
SmoothTransition(
|
||||
page: WalletOptions(
|
||||
wallet: _repository,
|
||||
)));
|
||||
|
||||
// Navigator.push(context,
|
||||
// MaterialPageRoute(builder: (context) {
|
||||
// return UnlockingWallet(wallet: _repository);
|
||||
// }));
|
||||
},
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.all(Radius.circular(12)),
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
gradient: RadialGradient(
|
||||
radius: 1,
|
||||
colors: [
|
||||
Colors.green[100],
|
||||
Colors.green[500],
|
||||
],
|
||||
)),
|
||||
child:
|
||||
// SvgPicture.asset('assets/chopp-gecko2.png',
|
||||
// semanticsLabel: 'Gecko', height: 48),
|
||||
Image.asset(
|
||||
'assets/chopp-gecko2.png',
|
||||
),
|
||||
)),
|
||||
ListTile(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
bottom: Radius.circular(12))),
|
||||
// contentPadding: const EdgeInsets.only(left: 7.0),
|
||||
tileColor:
|
||||
_repository.id()[1] == defaultWallet.id()[1]
|
||||
? orangeC
|
||||
: Color(0xffFFD58D),
|
||||
// leading: Text('IMAGE'),
|
||||
|
||||
// subtitle: Text(_repository.split(':')[3],
|
||||
// style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
|
||||
title: Center(
|
||||
child: Padding(
|
||||
padding:
|
||||
EdgeInsets.symmetric(horizontal: 5),
|
||||
child: Text(_repository.name,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 16.0,
|
||||
color: _repository.id()[1] ==
|
||||
defaultWallet.id()[1]
|
||||
? Color(0xffF9F9F1)
|
||||
: Colors.black)))),
|
||||
// dense: true,
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
SmoothTransition(
|
||||
page: WalletOptions(
|
||||
wallet: _repository,
|
||||
)));
|
||||
},
|
||||
)
|
||||
]))))
|
||||
]);
|
||||
}
|
||||
|
||||
Widget addNewDerivation(context, int _walletNbr) {
|
||||
final TextEditingController _newDerivationName = TextEditingController();
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
return AlertDialog(
|
||||
content: Stack(
|
||||
clipBehavior: Clip.hardEdge,
|
||||
children: <Widget>[
|
||||
Form(
|
||||
key: _derivationKey,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
Text('Nom du portefeuille:'),
|
||||
Padding(
|
||||
padding: EdgeInsets.all(8.0),
|
||||
child: TextFormField(
|
||||
key: Key('DerivationNameKey'),
|
||||
controller: _newDerivationName,
|
||||
textAlign: TextAlign.center,
|
||||
autofocus: true,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 20),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ElevatedButton(
|
||||
key: Key('validDerivation'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 1,
|
||||
primary: yellowC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () async {
|
||||
await _myWalletProvider
|
||||
.generateNewDerivation(
|
||||
context, _newDerivationName.text)
|
||||
.then((_) => _newDerivationName.text == '');
|
||||
},
|
||||
child: Text("Créer")),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,479 @@
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
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/cesium_wallet_options.dart';
|
||||
import 'package:gecko/screens/myWallets/chest_options.dart';
|
||||
import 'package:gecko/screens/myWallets/choose_chest.dart';
|
||||
import 'package:gecko/screens/myWallets/wallet_options.dart';
|
||||
import 'package:gecko/screens/onBoarding/0_no_keychain_found.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class WalletsHome extends StatelessWidget {
|
||||
final _derivationKey = GlobalKey<FormState>();
|
||||
|
||||
WalletsHome({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
MyWalletsProvider myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
final int _currentChestNumber = myWalletProvider.getCurrentChest();
|
||||
final ChestData _currentChest = chestBox.get(_currentChestNumber);
|
||||
bool isWalletsExists;
|
||||
|
||||
if (!_currentChest.isCesium) {
|
||||
myWalletProvider.listWallets =
|
||||
myWalletProvider.readAllWallets(_currentChestNumber);
|
||||
}
|
||||
isWalletsExists = myWalletProvider.checkIfWalletExist();
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
return Future<bool>.value(true);
|
||||
},
|
||||
child: Scaffold(
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
leading: IconButton(
|
||||
icon: const Icon(Icons.arrow_back, color: Colors.black),
|
||||
onPressed: () {
|
||||
Navigator.popUntil(
|
||||
context,
|
||||
ModalRoute.withName('/'),
|
||||
);
|
||||
}),
|
||||
title: Text(_currentChest.name,
|
||||
key: const Key('myWallets'),
|
||||
style: TextStyle(color: Colors.grey[850])),
|
||||
backgroundColor: const Color(0xffFFD58D),
|
||||
),
|
||||
body: SafeArea(
|
||||
child: !isWalletsExists
|
||||
? const NoKeyChainScreen()
|
||||
: _currentChest.isCesium
|
||||
? cesiumWalletOptions(
|
||||
context, _currentChest, myWalletProvider)
|
||||
: myWalletsTiles(context),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
// Widget cesiumWalletOptions(BuildContext context) {
|
||||
// return Column(children: const [
|
||||
// Center(child: Text('This is a Cesium wallet')),
|
||||
// ]);
|
||||
// }
|
||||
|
||||
Widget chestOptions(
|
||||
BuildContext context, MyWalletsProvider _myWalletProvider) {
|
||||
return Column(children: [
|
||||
const SizedBox(height: 50),
|
||||
SizedBox(
|
||||
height: 120,
|
||||
width: 445,
|
||||
child: ElevatedButton.icon(
|
||||
icon: Image.asset(
|
||||
'assets/chests/config.png',
|
||||
),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 2,
|
||||
primary: floattingYellow, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return ChestOptions(walletProvider: _myWalletProvider);
|
||||
}),
|
||||
),
|
||||
label: const Text(
|
||||
" Paramétrer ce coffre",
|
||||
style: TextStyle(
|
||||
fontSize: 25,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Color(0xff8a3c0f),
|
||||
),
|
||||
),
|
||||
)),
|
||||
const SizedBox(height: 30),
|
||||
SizedBox(
|
||||
height: 120,
|
||||
width: 445,
|
||||
child: ElevatedButton.icon(
|
||||
icon: Image.asset('assets/chests/miniChests.png'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 2,
|
||||
primary: floattingYellow, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return const ChooseChest();
|
||||
}),
|
||||
),
|
||||
label: const Text(
|
||||
" Changer de coffre",
|
||||
style: TextStyle(
|
||||
fontSize: 25,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Color(0xff8a3c0f),
|
||||
),
|
||||
),
|
||||
)),
|
||||
const SizedBox(height: 30)
|
||||
]);
|
||||
}
|
||||
|
||||
Widget myWalletsTiles(BuildContext context) {
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context);
|
||||
|
||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||
|
||||
if (!isWalletsExists) {
|
||||
return const Text('');
|
||||
}
|
||||
|
||||
if (_myWalletProvider.listWallets.isEmpty) {
|
||||
return Expanded(
|
||||
child: Column(children: const <Widget>[
|
||||
Center(
|
||||
child: Text(
|
||||
'Veuillez générer votre premier portefeuille',
|
||||
style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500),
|
||||
)),
|
||||
]));
|
||||
}
|
||||
|
||||
List _listWallets = _myWalletProvider.listWallets;
|
||||
WalletData defaultWallet =
|
||||
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
||||
|
||||
return CustomScrollView(slivers: <Widget>[
|
||||
const SliverToBoxAdapter(child: SizedBox(height: 20)),
|
||||
SliverGrid.count(
|
||||
key: const Key('listWallets'),
|
||||
crossAxisCount: 2,
|
||||
childAspectRatio: 1,
|
||||
crossAxisSpacing: 0,
|
||||
mainAxisSpacing: 0,
|
||||
children: <Widget>[
|
||||
for (WalletData _repository in _listWallets)
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: GestureDetector(
|
||||
onTap: () async {
|
||||
await _walletOptions.readLocalWallet(
|
||||
context,
|
||||
_repository,
|
||||
_myWalletProvider.pinCode,
|
||||
_myWalletProvider.pinLenght);
|
||||
Navigator.push(
|
||||
context,
|
||||
SmoothTransition(
|
||||
page: WalletOptions(
|
||||
wallet: _repository,
|
||||
)));
|
||||
|
||||
// Navigator.push(context,
|
||||
// MaterialPageRoute(builder: (context) {
|
||||
// return UnlockingWallet(wallet: _repository);
|
||||
// }));
|
||||
},
|
||||
child: ClipOvalShadow(
|
||||
shadow: const Shadow(
|
||||
color: Colors.transparent,
|
||||
offset: Offset(0, 0),
|
||||
blurRadius: 5,
|
||||
),
|
||||
clipper: CustomClipperOval(),
|
||||
child: ClipRRect(
|
||||
borderRadius:
|
||||
const BorderRadius.all(Radius.circular(12)),
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
gradient: RadialGradient(
|
||||
radius: 0.6,
|
||||
colors: [
|
||||
Colors.green[400],
|
||||
const Color(0xFFE7E7A6),
|
||||
],
|
||||
)),
|
||||
child:
|
||||
// SvgPicture.asset('assets/chopp-gecko2.png',
|
||||
// semanticsLabel: 'Gecko', height: 48),
|
||||
_repository.imageFile == null
|
||||
? Image.asset(
|
||||
'assets/avatars/${_repository.imageName}',
|
||||
alignment: Alignment.bottomCenter,
|
||||
scale: 0.5,
|
||||
)
|
||||
: Image.file(
|
||||
_repository.imageFile,
|
||||
alignment: Alignment.bottomCenter,
|
||||
scale: 0.5,
|
||||
),
|
||||
)),
|
||||
// balanceBuilder(context, _walletOptions.pubkey.text),
|
||||
ListTile(
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(
|
||||
bottom: Radius.circular(12))),
|
||||
// contentPadding: const EdgeInsets.only(left: 7.0),
|
||||
tileColor:
|
||||
_repository.id()[1] == defaultWallet.id()[1]
|
||||
? orangeC
|
||||
: const Color(0xffFFD58D),
|
||||
// leading: Text('IMAGE'),
|
||||
|
||||
// subtitle: Text(_repository.split(':')[3],
|
||||
// style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')),
|
||||
title: Center(
|
||||
child: Padding(
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 5),
|
||||
child: Text(
|
||||
_repository.name,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 17.0,
|
||||
color: _repository.id()[1] ==
|
||||
defaultWallet.id()[1]
|
||||
? const Color(0xffF9F9F1)
|
||||
: Colors.black,
|
||||
fontStyle: FontStyle.italic),
|
||||
),
|
||||
),
|
||||
),
|
||||
// dense: true,
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
SmoothTransition(
|
||||
page: WalletOptions(
|
||||
wallet: _repository,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
)
|
||||
]),
|
||||
),
|
||||
),
|
||||
)),
|
||||
addNewDerivation(context),
|
||||
// SizedBox(height: 1),
|
||||
// Padding(
|
||||
// padding: EdgeInsets.symmetric(horizontal: 35),
|
||||
// child: Text(
|
||||
// 'Ajouter un portefeuille',
|
||||
// textAlign: TextAlign.center,
|
||||
// style: TextStyle(fontSize: 18),
|
||||
// ))
|
||||
]),
|
||||
// SliverToBoxAdapter(child: Spacer()),
|
||||
SliverToBoxAdapter(child: chestOptions(context, _myWalletProvider)),
|
||||
]);
|
||||
}
|
||||
|
||||
Widget balanceBuilder(context, String _pubkey) {
|
||||
return Query(
|
||||
options: QueryOptions(
|
||||
document: gql(getBalance),
|
||||
variables: {
|
||||
'pubkey': _pubkey,
|
||||
},
|
||||
// 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');
|
||||
}
|
||||
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 Text(wBalanceUD);
|
||||
});
|
||||
}
|
||||
|
||||
Widget addNewDerivation(context) {
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
String _newDerivationName =
|
||||
'Portefeuille ${_myWalletProvider.listWallets.last.number + 2}';
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: ClipRRect(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(12)),
|
||||
child: Column(children: <Widget>[
|
||||
Expanded(
|
||||
child: InkWell(
|
||||
key: const Key('addDerivation'),
|
||||
onTap: () async {
|
||||
await _myWalletProvider.generateNewDerivation(
|
||||
context, _newDerivationName);
|
||||
},
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
decoration: BoxDecoration(color: floattingYellow),
|
||||
child: const Center(
|
||||
child: Text(
|
||||
'+',
|
||||
style: TextStyle(
|
||||
fontSize: 150,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Color(0xFFFCB437)),
|
||||
)),
|
||||
)),
|
||||
),
|
||||
])));
|
||||
}
|
||||
|
||||
Widget addNewDerivationPopup(context) {
|
||||
final TextEditingController _newDerivationName = TextEditingController();
|
||||
MyWalletsProvider _myWalletProvider =
|
||||
Provider.of<MyWalletsProvider>(context);
|
||||
|
||||
return AlertDialog(
|
||||
content: Stack(
|
||||
clipBehavior: Clip.hardEdge,
|
||||
children: <Widget>[
|
||||
Form(
|
||||
key: _derivationKey,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: <Widget>[
|
||||
const Text('Nom du portefeuille:'),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextFormField(
|
||||
key: const Key('DerivationNameKey'),
|
||||
controller: _newDerivationName,
|
||||
textAlign: TextAlign.center,
|
||||
autofocus: true,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ElevatedButton(
|
||||
key: const Key('validDerivation'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 1,
|
||||
primary: yellowC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () async {
|
||||
await _myWalletProvider
|
||||
.generateNewDerivation(
|
||||
context, _newDerivationName.text)
|
||||
.then((_) => _newDerivationName.text == '');
|
||||
},
|
||||
child: const Text("Créer")),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// extension Range on num {
|
||||
// bool isBetween(num from, num to) {
|
||||
// return from < this && this < to;
|
||||
// }
|
||||
// }
|
||||
|
||||
class CustomClipperOval extends CustomClipper<Rect> {
|
||||
@override
|
||||
Rect getClip(Size size) {
|
||||
return Rect.fromCircle(
|
||||
center: Offset(size.width / 2, size.width / 2),
|
||||
radius: size.width / 2 + 3);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldReclip(CustomClipper<Rect> oldClipper) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
class ClipOvalShadow extends StatelessWidget {
|
||||
final Shadow shadow;
|
||||
final CustomClipper<Rect> clipper;
|
||||
final Widget child;
|
||||
|
||||
const ClipOvalShadow({
|
||||
Key key,
|
||||
@required this.shadow,
|
||||
@required this.clipper,
|
||||
@required this.child,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CustomPaint(
|
||||
painter: _ClipOvalShadowPainter(
|
||||
clipper: clipper,
|
||||
shadow: shadow,
|
||||
),
|
||||
child: ClipRect(child: child, clipper: clipper),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _ClipOvalShadowPainter extends CustomPainter {
|
||||
final Shadow shadow;
|
||||
final CustomClipper<Rect> clipper;
|
||||
|
||||
_ClipOvalShadowPainter({@required this.shadow, @required this.clipper});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
var paint = shadow.toPaint();
|
||||
var clipRect = clipper.getClip(size).shift(const Offset(0, 0));
|
||||
canvas.drawOval(clipRect, paint);
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(CustomPainter oldDelegate) {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,16 +1,14 @@
|
|||
// ignore_for_file: file_names
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/myWallets/importWallet.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/myWallets/import_wallet.dart';
|
||||
import 'package:gecko/screens/onBoarding/1.dart';
|
||||
// import 'package:gecko/models/home.dart';
|
||||
// import 'package:provider/provider.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class NoKeyChainScreen extends StatelessWidget {
|
||||
TextEditingController tplController = TextEditingController();
|
||||
const NoKeyChainScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -25,16 +23,16 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
common.onboardingProgressBar(context, 'Mes portefeuilles', 0),
|
||||
common.bubbleSpeak(
|
||||
"Je ne connais pour l’instant aucun de vos portefeuilles.\n\nVous pouvez en créer un nouveau, ou bien importer un portefeuille Cesium existant.",
|
||||
textKey: Key('textOnboarding')),
|
||||
SizedBox(height: 90),
|
||||
textKey: const Key('textOnboarding')),
|
||||
const SizedBox(height: 90),
|
||||
Container(
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
key: Key('goStep1'),
|
||||
key: const Key('goStep1'),
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
child: const Padding(
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Image(
|
||||
image: AssetImage('assets/onBoarding/wallet.png'),
|
||||
|
@ -47,7 +45,7 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -59,8 +57,8 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 15),
|
||||
Text(
|
||||
const SizedBox(height: 15),
|
||||
const Text(
|
||||
"Créer un nouveau\nportefeuille",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
|
@ -68,15 +66,15 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500),
|
||||
),
|
||||
SizedBox(height: 70),
|
||||
const SizedBox(height: 70),
|
||||
Container(
|
||||
child: ClipOval(
|
||||
child: Material(
|
||||
color: Color(0xffFFD58D), // button color
|
||||
color: const Color(0xffFFD58D), // button color
|
||||
child: InkWell(
|
||||
splashColor: orangeC, // inkwell color
|
||||
child: Padding(
|
||||
padding: EdgeInsets.all(12),
|
||||
padding: const EdgeInsets.all(12),
|
||||
child:
|
||||
// Image(
|
||||
// image: AssetImage('assets/cesium_bw3.png'),
|
||||
|
@ -86,11 +84,11 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
),
|
||||
onTap: () {
|
||||
Navigator.push(context,
|
||||
SlideLeftRoute(page: ImportWalletScreen()));
|
||||
SlideLeftRoute(page: const ImportWalletScreen()));
|
||||
}),
|
||||
),
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Colors.white,
|
||||
boxShadow: [
|
||||
|
@ -102,8 +100,8 @@ class NoKeyChainScreen extends StatelessWidget {
|
|||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
Text(
|
||||
const SizedBox(height: 10),
|
||||
const Text(
|
||||
"Importer un\nportefeuille Cesium",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(color: Colors.black, fontSize: 13),
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/2.dart';
|
||||
// import 'package:gecko/models/home.dart';
|
||||
// import 'package:provider/provider.dart';
|
||||
|
@ -11,6 +13,8 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 1;
|
||||
|
||||
OnboardingStepOne({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -24,8 +28,8 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
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.",
|
||||
textKey: Key('step1')),
|
||||
SizedBox(height: 90),
|
||||
textKey: const Key('step1')),
|
||||
const SizedBox(height: 90),
|
||||
Image.asset(
|
||||
'assets/onBoarding/keys-and-wallets-horizontal.png',
|
||||
height: 200,
|
||||
|
@ -37,7 +41,7 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep2'),
|
||||
key: const Key('goStep2'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -49,10 +53,10 @@ class OnboardingStepOne extends StatelessWidget {
|
|||
FaderTransition(
|
||||
page: OnboardingStepTwo(), isFast: true));
|
||||
},
|
||||
child: Text('Créer mon trousseau',
|
||||
child: const Text('Créer mon trousseau',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/11.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -9,6 +11,8 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 9;
|
||||
|
||||
OnboardingStepTwelve({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -22,9 +26,9 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
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.",
|
||||
textKey: Key('step10'),
|
||||
textKey: const Key('step10'),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
const SizedBox(height: 10),
|
||||
Image.asset(
|
||||
'assets/onBoarding/plusieurs-codes-secrets-un-trousseau.png',
|
||||
height: 410 * ratio,
|
||||
|
@ -36,7 +40,7 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep11'),
|
||||
key: const Key('goStep11'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -49,7 +53,7 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
page: OnboardingStepThirteen(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("Générer le code secret",
|
||||
child: const Text("Générer le code secret",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: isTall ? 80 : 40),
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'dart:ui';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/12.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -13,6 +15,8 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
NewWallet generatedWallet;
|
||||
final int progress = 10;
|
||||
|
||||
OnboardingStepThirteen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -32,43 +36,42 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
// initialData: '...',
|
||||
builder: (context, snapshot) {
|
||||
generatedWallet = snapshot.data;
|
||||
return Visibility(visible: false, child: Text(''));
|
||||
return const Visibility(visible: false, child: Text(''));
|
||||
}),
|
||||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeakRich(
|
||||
<TextSpan>[
|
||||
TextSpan(
|
||||
const TextSpan(
|
||||
text:
|
||||
"Et voilà votre code secret !\n\nMémorisez-le ou notez-le, car il vous sera demandé "),
|
||||
TextSpan(
|
||||
const TextSpan(
|
||||
text: 'à chaque fois',
|
||||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
TextSpan(
|
||||
const TextSpan(
|
||||
text:
|
||||
" que vous voudrez effectuer un paiement sur cet appareil."),
|
||||
],
|
||||
textKey: Key('step11'),
|
||||
textKey: const Key('step11'),
|
||||
),
|
||||
SizedBox(height: 100),
|
||||
Container(
|
||||
child: Stack(
|
||||
const SizedBox(height: 100),
|
||||
Stack(
|
||||
alignment: Alignment.centerRight,
|
||||
children: <Widget>[
|
||||
TextField(
|
||||
key: Key('generatedPin'),
|
||||
key: const Key('generatedPin'),
|
||||
enabled: false,
|
||||
controller: _generateWalletProvider.pin,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(),
|
||||
style: TextStyle(
|
||||
decoration: const InputDecoration(),
|
||||
style: const TextStyle(
|
||||
letterSpacing: 5,
|
||||
fontSize: 35.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.bold)),
|
||||
IconButton(
|
||||
icon: Icon(Icons.replay),
|
||||
icon: const Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () async {
|
||||
generatedWallet = await _generateWalletProvider
|
||||
|
@ -77,7 +80,6 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(
|
||||
child: Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
|
@ -85,25 +87,25 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('changeSecretCode'),
|
||||
key: const Key('changeSecretCode'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: Color(0xffFFD58D),
|
||||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () async {
|
||||
generatedWallet = await _generateWalletProvider
|
||||
.changePinCode(reload: false);
|
||||
},
|
||||
child: Text("Choisir un autre code secret",
|
||||
child: const Text("Choisir un autre code secret",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 25),
|
||||
const SizedBox(height: 25),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep12'),
|
||||
key: const Key('goStep12'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -120,10 +122,10 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai noté mon code secret",
|
||||
child: const Text("J'ai noté mon code secret",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:ui';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/models/walletOptions.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/models/wallet_options.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/13_congratulations.dart';
|
||||
import 'package:pin_code_fields/pin_code_fields.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -22,7 +24,7 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
NewWallet generatedWallet;
|
||||
final int progress = 11;
|
||||
final formKey = GlobalKey<FormState>();
|
||||
var pinColor = Color(0xFFA4B600);
|
||||
var pinColor = const Color(0xFFA4B600);
|
||||
bool hasError = false;
|
||||
|
||||
@override
|
||||
|
@ -43,7 +45,7 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"Avez-vous bien mémorisé votre code secret ?\n\nVérifions ça ensemble !\n\nTapez votre code secret dans le champ ci-dessous (après c’est fini, promis-juré-gecko).",
|
||||
textKey: Key('step12'),
|
||||
textKey: const Key('step12'),
|
||||
),
|
||||
SizedBox(height: isTall ? 80 : 10),
|
||||
pinForm(context, _walletOptions, _pinLenght, 1, 3)
|
||||
|
@ -70,7 +72,7 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 30),
|
||||
child: PinCodeTextField(
|
||||
key: Key('formKey2'),
|
||||
key: const Key('formKey2'),
|
||||
autoFocus: true,
|
||||
appContext: context,
|
||||
pastedTextStyle: TextStyle(
|
||||
|
@ -98,14 +100,14 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
activeFillColor: hasError ? Colors.blueAccent : Colors.black,
|
||||
),
|
||||
cursorColor: Colors.black,
|
||||
animationDuration: Duration(milliseconds: 300),
|
||||
textStyle: TextStyle(fontSize: 20, height: 1.6),
|
||||
backgroundColor: Color(0xffF9F9F1),
|
||||
animationDuration: const Duration(milliseconds: 300),
|
||||
textStyle: const TextStyle(fontSize: 20, height: 1.6),
|
||||
backgroundColor: const Color(0xffF9F9F1),
|
||||
enableActiveFill: false,
|
||||
errorAnimationController: errorController,
|
||||
controller: _enterPin,
|
||||
keyboardType: TextInputType.text,
|
||||
boxShadows: [
|
||||
boxShadows: const [
|
||||
BoxShadow(
|
||||
offset: Offset(0, 1),
|
||||
color: Colors.black12,
|
||||
|
@ -122,7 +124,6 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
_generateWalletProvider.storeHDWChest(
|
||||
generatedWallet, 'Mon portefeuille courant', context);
|
||||
_myWalletProvider.readAllWallets(_currentChest);
|
||||
_myWalletProvider.getDefaultWallet();
|
||||
scheduleMicrotask(() {
|
||||
_walletOptions.reloadBuild();
|
||||
_myWalletProvider.rebuildWidget();
|
||||
|
@ -141,8 +142,8 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
}
|
||||
},
|
||||
onChanged: (value) {
|
||||
if (pinColor != Color(0xFFA4B600)) {
|
||||
pinColor = Color(0xFFA4B600);
|
||||
if (pinColor != const Color(0xFFA4B600)) {
|
||||
pinColor = const Color(0xFFA4B600);
|
||||
}
|
||||
},
|
||||
)),
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class OnboardingStepFiveteen extends StatelessWidget {
|
||||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 12;
|
||||
|
||||
OnboardingStepFiveteen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -21,7 +25,7 @@ class OnboardingStepFiveteen extends StatelessWidget {
|
|||
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 !",
|
||||
textKey: Key('step13'),
|
||||
textKey: const Key('step13'),
|
||||
),
|
||||
SizedBox(height: isTall ? 20 : 10),
|
||||
Image.asset(
|
||||
|
@ -35,7 +39,7 @@ class OnboardingStepFiveteen extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goWalletHome'),
|
||||
key: const Key('goWalletHome'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -51,10 +55,10 @@ class OnboardingStepFiveteen extends StatelessWidget {
|
|||
'/mywallets',
|
||||
);
|
||||
},
|
||||
child: Text("Accéder à mes portefeuilles",
|
||||
child: const Text("Accéder à mes portefeuilles",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/3.dart';
|
||||
// import 'package:gecko/screens/commonElements.dart';
|
||||
// import 'package:gecko/models/home.dart';
|
||||
|
@ -12,6 +14,8 @@ class OnboardingStepTwo extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 2;
|
||||
|
||||
OnboardingStepTwo({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -25,9 +29,9 @@ class OnboardingStepTwo extends StatelessWidget {
|
|||
context, 'Nouveau portefeuilles', progress),
|
||||
common.bubbleSpeak(
|
||||
"Un trousseau est créé à partir d’une phrase de restauration.",
|
||||
textKey: Key('step2'),
|
||||
textKey: const Key('step2'),
|
||||
),
|
||||
SizedBox(height: 70),
|
||||
const SizedBox(height: 70),
|
||||
Image.asset(
|
||||
'assets/onBoarding/keys-and-wallets-horizontal-plus-phrase.png'),
|
||||
Expanded(
|
||||
|
@ -37,7 +41,7 @@ class OnboardingStepTwo extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep3'),
|
||||
key: const Key('goStep3'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -50,10 +54,11 @@ class OnboardingStepTwo extends StatelessWidget {
|
|||
page: OnboardingStepFor(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("D'accord", style: TextStyle(fontSize: 20)),
|
||||
child: const Text("D'accord",
|
||||
style: TextStyle(fontSize: 20)),
|
||||
),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/4.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -9,6 +11,8 @@ class OnboardingStepFor extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 3;
|
||||
|
||||
OnboardingStepFor({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -22,7 +26,7 @@ class OnboardingStepFor extends StatelessWidget {
|
|||
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.",
|
||||
textKey: Key('step3'),
|
||||
textKey: const Key('step3'),
|
||||
),
|
||||
SizedBox(height: isTall ? 15 : 0),
|
||||
// Row(children: <Widget>[
|
||||
|
@ -41,7 +45,7 @@ class OnboardingStepFor extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep4'),
|
||||
key: const Key('goStep4'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -54,10 +58,10 @@ class OnboardingStepFor extends StatelessWidget {
|
|||
page: OnboardingStepFive(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai compris",
|
||||
child: const Text("J'ai compris",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/5.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -9,6 +11,8 @@ class OnboardingStepFive extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 4;
|
||||
|
||||
OnboardingStepFive({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -22,7 +26,7 @@ class OnboardingStepFive extends StatelessWidget {
|
|||
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.",
|
||||
textKey: Key('step4'),
|
||||
textKey: const Key('step4'),
|
||||
),
|
||||
SizedBox(height: isTall ? 30 : 10),
|
||||
Image.asset(
|
||||
|
@ -36,7 +40,7 @@ class OnboardingStepFive extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep5'),
|
||||
key: const Key('goStep5'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -49,10 +53,10 @@ class OnboardingStepFive extends StatelessWidget {
|
|||
page: OnboardingStepSeven(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai compris",
|
||||
child: const Text("J'ai compris",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/6.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -9,6 +11,8 @@ class OnboardingStepSeven extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 5;
|
||||
|
||||
OnboardingStepSeven({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -22,15 +26,15 @@ class OnboardingStepSeven extends StatelessWidget {
|
|||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeakRich(
|
||||
<TextSpan>[
|
||||
TextSpan(text: "Munissez-vous d'"),
|
||||
TextSpan(
|
||||
const TextSpan(text: "Munissez-vous d'"),
|
||||
const TextSpan(
|
||||
text: 'un papier et d’un crayon\n',
|
||||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
TextSpan(
|
||||
const TextSpan(
|
||||
text:
|
||||
"afin de pouvoir noter votre phrase de restauration."),
|
||||
],
|
||||
textKey: Key('step5'),
|
||||
textKey: const Key('step5'),
|
||||
),
|
||||
Expanded(
|
||||
child: Align(
|
||||
|
@ -53,7 +57,7 @@ class OnboardingStepSeven extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep6'),
|
||||
key: const Key('goStep6'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -66,10 +70,10 @@ class OnboardingStepSeven extends StatelessWidget {
|
|||
page: OnboardingStepEight(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai de quoi noter",
|
||||
child: const Text("J'ai de quoi noter",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/7.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -10,6 +12,8 @@ class OnboardingStepEight extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 6;
|
||||
|
||||
OnboardingStepEight({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -23,7 +27,7 @@ class OnboardingStepEight extends StatelessWidget {
|
|||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"J’ai généré votre phrase de restauration !\nTâchez de la garder bien secrète, car elle permet à quiconque la connaît d’accéder à tous vos portefeuilles.",
|
||||
textKey: Key('step6'),
|
||||
textKey: const Key('step6'),
|
||||
),
|
||||
SizedBox(height: isTall ? 61 : 31),
|
||||
// SizedBox(height: 30),
|
||||
|
@ -36,7 +40,7 @@ class OnboardingStepEight extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep7'),
|
||||
key: const Key('goStep7'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -49,10 +53,10 @@ class OnboardingStepEight extends StatelessWidget {
|
|||
page: OnboardingStepNine(), isFast: false),
|
||||
);
|
||||
},
|
||||
child: Text("Afficher ma phrase",
|
||||
child: const Text("Afficher ma phrase",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
@ -60,16 +64,16 @@ class OnboardingStepEight extends StatelessWidget {
|
|||
|
||||
Widget sentanceArray(BuildContext context) {
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 12),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: Colors.black),
|
||||
color: Colors.grey[300],
|
||||
borderRadius: BorderRadius.all(
|
||||
const Radius.circular(10),
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(10),
|
||||
)),
|
||||
// color: Colors.grey[300],
|
||||
padding: EdgeInsets.all(20),
|
||||
padding: const EdgeInsets.all(20),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
|
@ -81,14 +85,14 @@ Widget sentanceArray(BuildContext context) {
|
|||
arrayCell("3:curseur"),
|
||||
arrayCell("4:relatif"),
|
||||
]),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell("5:embellir"),
|
||||
arrayCell("6:cultiver"),
|
||||
arrayCell("7:bureau"),
|
||||
arrayCell("8:ossature"),
|
||||
]),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell("9:labial"),
|
||||
arrayCell("10:science"),
|
||||
|
@ -99,20 +103,20 @@ Widget sentanceArray(BuildContext context) {
|
|||
}
|
||||
|
||||
Widget arrayCell(dataWord) {
|
||||
return Container(
|
||||
return SizedBox(
|
||||
width: 102,
|
||||
child: Column(
|
||||
children: <Widget>[
|
||||
ImageFiltered(
|
||||
imageFilter: ImageFilter.blur(sigmaX: 1, sigmaY: 1),
|
||||
child: Text(dataWord.split(':')[0],
|
||||
style: TextStyle(fontSize: 14, color: Colors.black)),
|
||||
style: const TextStyle(fontSize: 14, color: Colors.black)),
|
||||
),
|
||||
SizedBox(height: 2),
|
||||
const SizedBox(height: 2),
|
||||
ImageFiltered(
|
||||
imageFilter: ImageFilter.blur(sigmaX: 4, sigmaY: 4),
|
||||
child: Text(dataWord.split(':')[1],
|
||||
style: TextStyle(fontSize: 20, color: Colors.black)),
|
||||
style: const TextStyle(fontSize: 20, color: Colors.black)),
|
||||
)
|
||||
],
|
||||
));
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/8.dart';
|
||||
import 'package:printing/printing.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
@ -12,6 +14,8 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 6;
|
||||
|
||||
OnboardingStepNine({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -29,7 +33,7 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeak(
|
||||
"C'est le moment de noter votre phrase !",
|
||||
textKey: Key('step7'),
|
||||
textKey: const Key('step7'),
|
||||
long: 60,
|
||||
),
|
||||
SizedBox(height: isTall ? 100 : 70),
|
||||
|
@ -56,24 +60,24 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('generateMnemonic'),
|
||||
key: const Key('generateMnemonic'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: Color(0xffFFD58D),
|
||||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () {
|
||||
_generateWalletProvider.reloadBuild();
|
||||
},
|
||||
child: Text("Choisir une autre phrase",
|
||||
child: const Text("Choisir une autre phrase",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 25),
|
||||
const SizedBox(height: 25),
|
||||
SizedBox(
|
||||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep8'),
|
||||
key: const Key('goStep8'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -97,10 +101,10 @@ class OnboardingStepNine extends StatelessWidget {
|
|||
isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai noté ma phrase",
|
||||
child: const Text("J'ai noté ma phrase",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
@ -112,7 +116,7 @@ Widget sentanceArray(BuildContext context) {
|
|||
|
||||
return FutureBuilder(
|
||||
future: _generateWalletProvider.generateWordList(),
|
||||
initialData: [
|
||||
initialData: const [
|
||||
'1:...',
|
||||
'2:...',
|
||||
'3:...',
|
||||
|
@ -129,16 +133,16 @@ Widget sentanceArray(BuildContext context) {
|
|||
builder: (context, formatedArray) {
|
||||
// print(formatedArray.data);
|
||||
return Container(
|
||||
padding: EdgeInsets.symmetric(horizontal: 12),
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: Colors.black),
|
||||
color: Colors.grey[300],
|
||||
borderRadius: BorderRadius.all(
|
||||
const Radius.circular(10),
|
||||
borderRadius: const BorderRadius.all(
|
||||
Radius.circular(10),
|
||||
)),
|
||||
// color: Colors.grey[300],
|
||||
padding: EdgeInsets.all(20),
|
||||
padding: const EdgeInsets.all(20),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
mainAxisSize: MainAxisSize.max,
|
||||
|
@ -150,14 +154,14 @@ Widget sentanceArray(BuildContext context) {
|
|||
arrayCell(formatedArray.data[2]),
|
||||
arrayCell(formatedArray.data[3]),
|
||||
]),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(formatedArray.data[4]),
|
||||
arrayCell(formatedArray.data[5]),
|
||||
arrayCell(formatedArray.data[6]),
|
||||
arrayCell(formatedArray.data[7]),
|
||||
]),
|
||||
SizedBox(height: 15),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(formatedArray.data[8]),
|
||||
arrayCell(formatedArray.data[9]),
|
||||
|
@ -169,20 +173,20 @@ Widget sentanceArray(BuildContext context) {
|
|||
}
|
||||
|
||||
Widget arrayCell(dataWord) {
|
||||
return Container(
|
||||
return SizedBox(
|
||||
width: 102,
|
||||
child: Column(children: <Widget>[
|
||||
Text(dataWord.split(':')[0], style: TextStyle(fontSize: 14)),
|
||||
SizedBox(height: 2),
|
||||
Text(dataWord.split(':')[0], style: const TextStyle(fontSize: 14)),
|
||||
const SizedBox(height: 2),
|
||||
Text(dataWord.split(':')[1],
|
||||
key: Key('word${dataWord.split(':')[0]}'),
|
||||
style: TextStyle(fontSize: 19, color: Colors.black)),
|
||||
style: const TextStyle(fontSize: 19, color: Colors.black)),
|
||||
]));
|
||||
}
|
||||
|
||||
// ignore: must_be_immutable
|
||||
class PrintWallet extends StatelessWidget {
|
||||
PrintWallet(this.sentence);
|
||||
const PrintWallet(this.sentence, {Key key}) : super(key: key);
|
||||
|
||||
final String sentence;
|
||||
|
||||
|
@ -192,7 +196,9 @@ class PrintWallet extends StatelessWidget {
|
|||
Provider.of<GenerateWalletsProvider>(context);
|
||||
return MaterialApp(
|
||||
home: Scaffold(
|
||||
appBar: AppBar(title: Text('Imprimer ce trousseau')),
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const Text('Imprimer ce trousseau')),
|
||||
body: PdfPreview(
|
||||
build: (format) => _generateWalletProvider.printWallet(sentence),
|
||||
),
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'dart:ui';
|
||||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/generateWallets.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/models/generate_wallets.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/9.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -21,7 +23,7 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
|
||||
TextEditingController tplController = TextEditingController();
|
||||
TextEditingController wordController = TextEditingController();
|
||||
TextEditingController _mnemonicController = TextEditingController();
|
||||
final TextEditingController _mnemonicController = TextEditingController();
|
||||
|
||||
final int progress = 7;
|
||||
|
||||
|
@ -31,7 +33,7 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context);
|
||||
CommonElements common = CommonElements();
|
||||
this._mnemonicController.text = generatedMnemonic;
|
||||
_mnemonicController.text = generatedMnemonic;
|
||||
|
||||
return WillPopScope(
|
||||
onWillPop: () {
|
||||
|
@ -60,11 +62,11 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
text: " de votre phrase de restauration :",
|
||||
style: TextStyle(fontSize: 16 * ratio)),
|
||||
],
|
||||
textKey: Key('step8'),
|
||||
textKey: const Key('step8'),
|
||||
),
|
||||
SizedBox(height: isTall ? 70 : 10),
|
||||
Text('${_generateWalletProvider.nbrWord + 1}',
|
||||
key: Key('askedWord'),
|
||||
key: const Key('askedWord'),
|
||||
style: TextStyle(
|
||||
fontSize: isTall ? 17 : 10,
|
||||
color: orangeC,
|
||||
|
@ -79,10 +81,10 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
)),
|
||||
width: 430,
|
||||
child: TextFormField(
|
||||
key: Key('inputWord'),
|
||||
key: const Key('inputWord'),
|
||||
autofocus: true,
|
||||
enabled: !_generateWalletProvider.isAskedWordValid,
|
||||
controller: this.wordController,
|
||||
controller: wordController,
|
||||
textInputAction: TextInputAction.next,
|
||||
onChanged: (value) {
|
||||
_generateWalletProvider.checkAskedWord(
|
||||
|
@ -100,7 +102,7 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
: "${_generateWalletProvider.nbrWordAlpha} mot de votre phrase de restauration",
|
||||
fillColor: Colors.grey[300],
|
||||
filled: true,
|
||||
contentPadding: EdgeInsets.all(12),
|
||||
contentPadding: const EdgeInsets.all(12),
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: 40.0,
|
||||
|
@ -115,7 +117,7 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep9'),
|
||||
key: const Key('goStep9'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -129,10 +131,10 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("Continuer",
|
||||
child: const Text("Continuer",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
)))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
)));
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
// ignore_for_file: file_names
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/screens/commonElements.dart';
|
||||
import 'package:gecko/screens/common_elements.dart';
|
||||
import 'package:gecko/screens/onBoarding/10.dart';
|
||||
|
||||
// ignore: must_be_immutable
|
||||
|
@ -9,6 +11,8 @@ class OnboardingStepEleven extends StatelessWidget {
|
|||
TextEditingController tplController = TextEditingController();
|
||||
final int progress = 8;
|
||||
|
||||
OnboardingStepEleven({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
|
@ -22,15 +26,16 @@ class OnboardingStepEleven extends StatelessWidget {
|
|||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeakRich(
|
||||
<TextSpan>[
|
||||
TextSpan(text: "Super !\n\nJe vais maintenant créer votre "),
|
||||
TextSpan(
|
||||
const TextSpan(
|
||||
text: "Super !\n\nJe vais maintenant créer votre "),
|
||||
const TextSpan(
|
||||
text: 'code secret.',
|
||||
style: TextStyle(fontWeight: FontWeight.bold)),
|
||||
TextSpan(
|
||||
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."),
|
||||
],
|
||||
textKey: Key('step9'),
|
||||
textKey: const Key('step9'),
|
||||
),
|
||||
SizedBox(height: isTall ? 50 : 10),
|
||||
Image.asset(
|
||||
|
@ -44,7 +49,7 @@ class OnboardingStepEleven extends StatelessWidget {
|
|||
width: 400,
|
||||
height: 62,
|
||||
child: ElevatedButton(
|
||||
key: Key('goStep10'),
|
||||
key: const Key('goStep10'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: orangeC,
|
||||
|
@ -57,10 +62,10 @@ class OnboardingStepEleven extends StatelessWidget {
|
|||
page: OnboardingStepTwelve(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: Text("J'ai compris",
|
||||
child: const Text("J'ai compris",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
))),
|
||||
SizedBox(height: 80),
|
||||
const SizedBox(height: 80),
|
||||
]),
|
||||
));
|
||||
}
|
||||
|
|
|
@ -2,10 +2,10 @@ import 'package:flutter/material.dart';
|
|||
import 'package:dubp/dubp.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:gecko/models/home.dart';
|
||||
import 'package:gecko/models/myWallets.dart';
|
||||
import 'package:gecko/screens/myWallets/generateWallets.dart';
|
||||
import 'package:gecko/models/my_wallets.dart';
|
||||
import 'package:gecko/screens/myWallets/generate_wallets.dart';
|
||||
import 'dart:io';
|
||||
import 'package:gecko/screens/myWallets/importWallet.dart';
|
||||
import 'package:gecko/screens/myWallets/import_wallet.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
|
@ -22,7 +22,9 @@ class SettingsScreen extends StatelessWidget {
|
|||
var pinColor = Colors.grey[300];
|
||||
Directory appPath;
|
||||
|
||||
MyWalletsProvider _myWallets = MyWalletsProvider();
|
||||
final MyWalletsProvider _myWallets = MyWalletsProvider();
|
||||
|
||||
SettingsScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -32,12 +34,13 @@ class SettingsScreen extends StatelessWidget {
|
|||
// getAppDirectory();
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: SizedBox(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Paramètres'),
|
||||
)),
|
||||
body: Column(children: <Widget>[
|
||||
SizedBox(height: 40),
|
||||
const SizedBox(height: 40),
|
||||
SizedBox(
|
||||
height: 70,
|
||||
width: 500,
|
||||
|
@ -50,35 +53,31 @@ class SettingsScreen extends StatelessWidget {
|
|||
onPressed: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return ImportWalletScreen();
|
||||
return const ImportWalletScreen();
|
||||
}),
|
||||
).then((value) => {
|
||||
if (value == true) {Navigator.pop(context)}
|
||||
}),
|
||||
child: Text("Importer un portefeuille Cesium",
|
||||
child: const Text("Importer un portefeuille Cesium",
|
||||
style: TextStyle(fontSize: 16)))),
|
||||
SizedBox(height: 30),
|
||||
const SizedBox(height: 30),
|
||||
SizedBox(
|
||||
height: 70,
|
||||
width: 500,
|
||||
child: ElevatedButton(
|
||||
key: Key('generateKeychain'),
|
||||
key: const Key('generateKeychain'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: yellowC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: !_myWallets.checkIfWalletExist()
|
||||
? () => Navigator.push(
|
||||
onPressed: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return GenerateWalletsScreen();
|
||||
return GenerateFastChestScreen();
|
||||
}),
|
||||
).then((value) => {
|
||||
if (value == true) {Navigator.pop(context)}
|
||||
})
|
||||
: null,
|
||||
child: Text("Générer un nouveau trousseau",
|
||||
),
|
||||
child: const Text("Générer un nouveau trousseau",
|
||||
style: TextStyle(fontSize: 16)))),
|
||||
Expanded(
|
||||
child: Align(
|
||||
|
@ -87,7 +86,7 @@ class SettingsScreen extends StatelessWidget {
|
|||
height: 100,
|
||||
width: 500,
|
||||
child: ElevatedButton(
|
||||
key: Key('deleteAllWallets'),
|
||||
key: const Key('deleteAllWallets'),
|
||||
style: ElevatedButton.styleFrom(
|
||||
elevation: 5,
|
||||
primary: Colors.redAccent, // background
|
||||
|
@ -99,9 +98,9 @@ class SettingsScreen extends StatelessWidget {
|
|||
.deleteAllWallet(context)
|
||||
.then((v) => _homeProvider.rebuildWidget())
|
||||
},
|
||||
child: Text("EFFACER TOUS MES PORTEFEUILLES",
|
||||
child: const Text("EFFACER TOUS MES PORTEFEUILLES",
|
||||
style: TextStyle(fontSize: 20)))))),
|
||||
SizedBox(height: 50),
|
||||
const SizedBox(height: 50),
|
||||
]));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,17 +9,20 @@ import 'package:flutter/material.dart';
|
|||
class TemplateScreen extends StatelessWidget {
|
||||
TextEditingController tplController = TextEditingController();
|
||||
|
||||
TemplateScreen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
// HomeProvider _homeProvider = Provider.of<HomeProvider>(context);
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: SizedBox(
|
||||
toolbarHeight: 60 * ratio,
|
||||
title: const SizedBox(
|
||||
height: 22,
|
||||
child: Text('Template screen'),
|
||||
)),
|
||||
floatingActionButton: Container(
|
||||
floatingActionButton: SizedBox(
|
||||
height: 80.0,
|
||||
width: 80.0,
|
||||
child: FittedBox(
|
||||
|
@ -28,10 +31,10 @@ class TemplateScreen extends StatelessWidget {
|
|||
onPressed: () => Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return HomeScreen();
|
||||
return const HomeScreen();
|
||||
}),
|
||||
),
|
||||
child: Container(
|
||||
child: SizedBox(
|
||||
height: 40.0,
|
||||
width: 40.0,
|
||||
child: Icon(Icons.home, color: Colors.grey[850]),
|
||||
|
@ -41,20 +44,20 @@ class TemplateScreen extends StatelessWidget {
|
|||
))),
|
||||
body: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
TextField(
|
||||
enabled: true,
|
||||
controller: tplController,
|
||||
maxLines: 1,
|
||||
textAlign: TextAlign.center,
|
||||
decoration: InputDecoration(
|
||||
decoration: const InputDecoration(
|
||||
contentPadding: EdgeInsets.all(15.0),
|
||||
),
|
||||
style: TextStyle(
|
||||
style: const TextStyle(
|
||||
fontSize: 22.0,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w400)),
|
||||
SizedBox(height: 20),
|
||||
const SizedBox(height: 20),
|
||||
ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
primary: yellowC, // background
|
||||
|
@ -64,12 +67,13 @@ class TemplateScreen extends StatelessWidget {
|
|||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(builder: (context) {
|
||||
return HomeScreen();
|
||||
return const HomeScreen();
|
||||
}),
|
||||
);
|
||||
},
|
||||
child: Text('Retour Accueil', style: TextStyle(fontSize: 20))),
|
||||
SizedBox(height: 20),
|
||||
child: const Text('Retour Accueil',
|
||||
style: TextStyle(fontSize: 20))),
|
||||
const SizedBox(height: 20),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.popUntil(
|
||||
|
@ -77,7 +81,7 @@ class TemplateScreen extends StatelessWidget {
|
|||
ModalRoute.withName('/'),
|
||||
);
|
||||
},
|
||||
child: Icon(Icons.home))
|
||||
child: const Icon(Icons.home))
|
||||
]),
|
||||
));
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
# Flutter-related
|
||||
**/Flutter/ephemeral/
|
||||
**/Pods/
|
||||
|
||||
# Xcode-related
|
||||
**/dgph
|
||||
**/xcuserdata/
|
|
@ -0,0 +1 @@
|
|||
#include "ephemeral/Flutter-Generated.xcconfig"
|
|
@ -0,0 +1 @@
|
|||
#include "ephemeral/Flutter-Generated.xcconfig"
|
|
@ -0,0 +1,24 @@
|
|||
//
|
||||
// Generated file. Do not edit.
|
||||
//
|
||||
|
||||
import FlutterMacOS
|
||||
import Foundation
|
||||
|
||||
import connectivity_plus_macos
|
||||
import package_info
|
||||
import package_info_plus_macos
|
||||
import path_provider_macos
|
||||
import printing
|
||||
import sentry_flutter
|
||||
import shared_preferences_macos
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
|
||||
FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin"))
|
||||
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
|
||||
SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
}
|
|
@ -0,0 +1,572 @@
|
|||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 51;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXAggregateTarget section */
|
||||
33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
|
||||
isa = PBXAggregateTarget;
|
||||
buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
|
||||
buildPhases = (
|
||||
33CC111E2044C6BF0003C045 /* ShellScript */,
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = "Flutter Assemble";
|
||||
productName = FLX;
|
||||
};
|
||||
/* End PBXAggregateTarget section */
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
|
||||
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
|
||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 33CC111A2044C6BA0003C045;
|
||||
remoteInfo = FLX;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
33CC110E2044A8840003C045 /* Bundle Framework */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
);
|
||||
name = "Bundle Framework";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
||||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||
33CC10ED2044A3C60003C045 /* gecko.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "gecko.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
||||
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
|
||||
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
|
||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
|
||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
|
||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
|
||||
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
||||
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
33CC10EA2044A3C60003C045 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
33BA886A226E78AF003329D5 /* Configs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33E5194F232828860026EE4D /* AppInfo.xcconfig */,
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
||||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
|
||||
);
|
||||
path = Configs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
33CC10E42044A3C60003C045 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33FAB671232836740065AC1E /* Runner */,
|
||||
33CEB47122A05771004F2AC0 /* Flutter */,
|
||||
33CC10EE2044A3C60003C045 /* Products */,
|
||||
D73912EC22F37F3D000D13A0 /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
33CC10EE2044A3C60003C045 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33CC10ED2044A3C60003C045 /* gecko.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
33CC11242044D66E0003C045 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33CC10F22044A3C60003C045 /* Assets.xcassets */,
|
||||
33CC10F42044A3C60003C045 /* MainMenu.xib */,
|
||||
33CC10F72044A3C60003C045 /* Info.plist */,
|
||||
);
|
||||
name = Resources;
|
||||
path = ..;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
33CEB47122A05771004F2AC0 /* Flutter */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
|
||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
|
||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
|
||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
|
||||
);
|
||||
path = Flutter;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
33FAB671232836740065AC1E /* Runner */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
|
||||
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
|
||||
33E51913231747F40026EE4D /* DebugProfile.entitlements */,
|
||||
33E51914231749380026EE4D /* Release.entitlements */,
|
||||
33CC11242044D66E0003C045 /* Resources */,
|
||||
33BA886A226E78AF003329D5 /* Configs */,
|
||||
);
|
||||
path = Runner;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
33CC10EC2044A3C60003C045 /* Runner */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||
buildPhases = (
|
||||
33CC10E92044A3C60003C045 /* Sources */,
|
||||
33CC10EA2044A3C60003C045 /* Frameworks */,
|
||||
33CC10EB2044A3C60003C045 /* Resources */,
|
||||
33CC110E2044A8840003C045 /* Bundle Framework */,
|
||||
3399D490228B24CF009A79C7 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
33CC11202044C79F0003C045 /* PBXTargetDependency */,
|
||||
);
|
||||
name = Runner;
|
||||
productName = Runner;
|
||||
productReference = 33CC10ED2044A3C60003C045 /* gecko.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
33CC10E52044A3C60003C045 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0920;
|
||||
LastUpgradeCheck = 0930;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
33CC10EC2044A3C60003C045 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
LastSwiftMigration = 1100;
|
||||
ProvisioningStyle = Automatic;
|
||||
SystemCapabilities = {
|
||||
com.apple.Sandbox = {
|
||||
enabled = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
33CC111A2044C6BA0003C045 = {
|
||||
CreatedOnToolsVersion = 9.2;
|
||||
ProvisioningStyle = Manual;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
|
||||
compatibilityVersion = "Xcode 9.3";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 33CC10E42044A3C60003C045;
|
||||
productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
33CC10EC2044A3C60003C045 /* Runner */,
|
||||
33CC111A2044C6BA0003C045 /* Flutter Assemble */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
33CC10EB2044A3C60003C045 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
|
||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
3399D490228B24CF009A79C7 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
|
||||
};
|
||||
33CC111E2044C6BF0003C045 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
Flutter/ephemeral/FlutterInputs.xcfilelist,
|
||||
);
|
||||
inputPaths = (
|
||||
Flutter/ephemeral/tripwire,
|
||||
);
|
||||
outputFileListPaths = (
|
||||
Flutter/ephemeral/FlutterOutputs.xcfilelist,
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
33CC10E92044A3C60003C045 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
|
||||
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
|
||||
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
|
||||
targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
33CC10F52044A3C60003C045 /* Base */,
|
||||
);
|
||||
name = MainMenu.xib;
|
||||
path = Runner;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
338D0CE9231458BD00FA5F75 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
338D0CEA231458BD00FA5F75 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
338D0CEB231458BD00FA5F75 /* Profile */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
33CC10F92044A3C60003C045 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
33CC10FA2044A3C60003C045 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.11;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
33CC10FC2044A3C60003C045 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
33CC10FD2044A3C60003C045 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/../Frameworks",
|
||||
);
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
33CC111C2044C6BA0003C045 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
33CC111D2044C6BA0003C045 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
33CC10F92044A3C60003C045 /* Debug */,
|
||||
33CC10FA2044A3C60003C045 /* Release */,
|
||||
338D0CE9231458BD00FA5F75 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
33CC10FC2044A3C60003C045 /* Debug */,
|
||||
33CC10FD2044A3C60003C045 /* Release */,
|
||||
338D0CEA231458BD00FA5F75 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
33CC111C2044C6BA0003C045 /* Debug */,
|
||||
33CC111D2044C6BA0003C045 /* Release */,
|
||||
338D0CEB231458BD00FA5F75 /* Profile */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 33CC10E52044A3C60003C045 /* Project object */;
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -0,0 +1,89 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1000"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "gecko.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "gecko.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "gecko.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Profile"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "gecko.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Runner.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|