Gecko is now realy multiChest, with slideshow choice
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 |
|
@ -13,9 +13,11 @@ class ChestData extends HiveObject {
|
||||||
@HiveField(3)
|
@HiveField(3)
|
||||||
int defaultWallet;
|
int defaultWallet;
|
||||||
|
|
||||||
ChestData({this.dewif, this.name, this.defaultWallet});
|
@HiveField(4)
|
||||||
|
String imageName;
|
||||||
|
|
||||||
|
ChestData({this.dewif, this.name, this.defaultWallet, this.imageName});
|
||||||
|
|
||||||
// representation of WalletData when debugging
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return this.name;
|
return this.name;
|
||||||
|
|
|
@ -20,19 +20,22 @@ class ChestDataAdapter extends TypeAdapter<ChestData> {
|
||||||
dewif: fields[0] as String,
|
dewif: fields[0] as String,
|
||||||
name: fields[2] as String,
|
name: fields[2] as String,
|
||||||
defaultWallet: fields[3] as int,
|
defaultWallet: fields[3] as int,
|
||||||
|
imageName: fields[4] as String,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void write(BinaryWriter writer, ChestData obj) {
|
void write(BinaryWriter writer, ChestData obj) {
|
||||||
writer
|
writer
|
||||||
..writeByte(3)
|
..writeByte(4)
|
||||||
..writeByte(0)
|
..writeByte(0)
|
||||||
..write(obj.dewif)
|
..write(obj.dewif)
|
||||||
..writeByte(2)
|
..writeByte(2)
|
||||||
..write(obj.name)
|
..write(obj.name)
|
||||||
..writeByte(3)
|
..writeByte(3)
|
||||||
..write(obj.defaultWallet);
|
..write(obj.defaultWallet)
|
||||||
|
..writeByte(4)
|
||||||
|
..write(obj.imageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -57,9 +57,10 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
walletBox.add(myWallet);
|
walletBox.add(myWallet);
|
||||||
ChestData thisChest = ChestData(
|
ChestData thisChest = ChestData(
|
||||||
dewif: _wallet.dewif,
|
dewif: _wallet.dewif,
|
||||||
name: chestName,
|
name: chestName,
|
||||||
);
|
defaultWallet: 0,
|
||||||
|
imageName: '${chestNumber % 8}.png');
|
||||||
chestBox.add(thisChest);
|
chestBox.add(thisChest);
|
||||||
configBox.put('currentChest', chestNumber);
|
configBox.put('currentChest', chestNumber);
|
||||||
// walletBox.get(1)
|
// walletBox.get(1)
|
||||||
|
@ -220,7 +221,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
||||||
log.d(_walletPubkey);
|
log.d(_walletPubkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future importWallet(context, _cesiumID, _cesiumPWD) async {
|
Future importCesiumWallet(context, _cesiumID, _cesiumPWD) async {
|
||||||
// String _walletPubkey = await DubpRust.getLegacyPublicKey(
|
// String _walletPubkey = await DubpRust.getLegacyPublicKey(
|
||||||
// salt: _cesiumID, password: _cesiumPWD);
|
// salt: _cesiumID, password: _cesiumPWD);
|
||||||
// String shortPubkey = truncate(_walletPubkey, 9,
|
// String shortPubkey = truncate(_walletPubkey, 9,
|
||||||
|
|
|
@ -3,6 +3,8 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/home.dart';
|
import 'package:gecko/models/home.dart';
|
||||||
|
import 'package:gecko/models/myWallets.dart';
|
||||||
|
import 'package:gecko/models/walletData.dart';
|
||||||
import 'package:gecko/screens/history.dart';
|
import 'package:gecko/screens/history.dart';
|
||||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||||
import 'package:jdenticon_dart/jdenticon_dart.dart';
|
import 'package:jdenticon_dart/jdenticon_dart.dart';
|
||||||
|
@ -49,8 +51,12 @@ class HistoryProvider with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> pay(BuildContext context, String pinCode) async {
|
Future<String> pay(BuildContext context, String pinCode) async {
|
||||||
// MyWalletsProvider _myWalletProvider = MyWalletsProvider();
|
MyWalletsProvider _myWalletModel = MyWalletsProvider();
|
||||||
String dewif = chestBox.get(configBox.get('currentChest')).dewif;
|
int currentChest = configBox.get('currentChest');
|
||||||
|
WalletData defaultWallet = _myWalletModel.getDefaultWallet(currentChest);
|
||||||
|
|
||||||
|
String dewif = chestBox.get(currentChest).dewif;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await DubpRust.simplePaymentFromTransparentAccount(
|
await DubpRust.simplePaymentFromTransparentAccount(
|
||||||
accountIndex: defaultWallet.derivation,
|
accountIndex: defaultWallet.derivation,
|
||||||
|
|
|
@ -45,7 +45,7 @@ class MyWalletsProvider with ChangeNotifier {
|
||||||
|
|
||||||
WalletData getWalletData(List<int> _id) {
|
WalletData getWalletData(List<int> _id) {
|
||||||
if (_id.isEmpty) return WalletData();
|
if (_id.isEmpty) return WalletData();
|
||||||
int _chest = _id[getCurrentChest()];
|
int _chest = _id[0];
|
||||||
int _nbr = _id[1];
|
int _nbr = _id[1];
|
||||||
var _targetedWallet;
|
var _targetedWallet;
|
||||||
|
|
||||||
|
@ -59,15 +59,13 @@ class MyWalletsProvider with ChangeNotifier {
|
||||||
return _targetedWallet;
|
return _targetedWallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getDefaultWallet(int chest) {
|
WalletData getDefaultWallet(int chest) {
|
||||||
MyWalletsProvider myWalletsProvider = MyWalletsProvider();
|
if (chestBox.isEmpty) {
|
||||||
|
return WalletData(chest: 0, number: 0);
|
||||||
if (configBox.get('defaultWallet')[chest] == null) {
|
} else {
|
||||||
configBox.put('defaultWallet', [chest, 0]);
|
int defaultWalletNumber = chestBox.get(chest).defaultWallet;
|
||||||
|
return getWalletData([chest, defaultWalletNumber]);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultWallet = myWalletsProvider
|
|
||||||
.getWalletData(configBox.get('defaultWallet').cast<int>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<int> deleteAllWallet(context) async {
|
Future<int> deleteAllWallet(context) async {
|
||||||
|
|
|
@ -3,10 +3,12 @@ import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/cesiumPlus.dart';
|
import 'package:gecko/models/cesiumPlus.dart';
|
||||||
import 'package:gecko/models/home.dart';
|
import 'package:gecko/models/home.dart';
|
||||||
|
import 'package:gecko/models/myWallets.dart';
|
||||||
import 'package:gecko/models/queries.dart';
|
import 'package:gecko/models/queries.dart';
|
||||||
import 'package:gecko/models/history.dart';
|
import 'package:gecko/models/history.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:gecko/models/walletData.dart';
|
||||||
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||||
|
@ -330,6 +332,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget payView(context, HistoryProvider _historyProvider) {
|
Widget payView(context, HistoryProvider _historyProvider) {
|
||||||
|
MyWalletsProvider _myWalletProvider = MyWalletsProvider();
|
||||||
|
WalletData defaultWallet =
|
||||||
|
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
||||||
|
|
||||||
return Stack(
|
return Stack(
|
||||||
clipBehavior: Clip.hardEdge,
|
clipBehavior: Clip.hardEdge,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:gecko/models/history.dart';
|
||||||
import 'package:gecko/models/home.dart';
|
import 'package:gecko/models/home.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/models/myWallets.dart';
|
import 'package:gecko/models/myWallets.dart';
|
||||||
|
import 'package:gecko/models/walletData.dart';
|
||||||
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
import 'package:gecko/screens/myWallets/unlockingWallet.dart';
|
||||||
import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart';
|
import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart';
|
||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
@ -22,6 +23,9 @@ class HomeScreen extends StatelessWidget {
|
||||||
Provider.of<MyWalletsProvider>(context);
|
Provider.of<MyWalletsProvider>(context);
|
||||||
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
final bool isWalletsExists = _myWalletProvider.checkIfWalletExist();
|
||||||
|
|
||||||
|
WalletData defaultWallet =
|
||||||
|
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
||||||
|
|
||||||
// walletBox.toMap().forEach((key, value) {
|
// walletBox.toMap().forEach((key, value) {
|
||||||
// if (value.chest == 0) {
|
// if (value.chest == 0) {
|
||||||
// print('$key: ${value.derivation}');
|
// print('$key: ${value.derivation}');
|
||||||
|
|
|
@ -1,17 +1,25 @@
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
import 'package:gecko/models/myWallets.dart';
|
||||||
import 'package:gecko/screens/commonElements.dart';
|
import 'package:gecko/screens/commonElements.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/screens/onBoarding/1.dart';
|
import 'package:gecko/screens/onBoarding/1.dart';
|
||||||
|
import 'package:carousel_slider/carousel_slider.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
// ignore: must_be_immutable
|
// ignore: must_be_immutable
|
||||||
class ChooseChest extends StatelessWidget {
|
class ChooseChest extends StatelessWidget {
|
||||||
TextEditingController tplController = TextEditingController();
|
TextEditingController tplController = TextEditingController();
|
||||||
|
CarouselController buttonCarouselController = CarouselController();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||||
|
MyWalletsProvider _myWalletProvider =
|
||||||
|
Provider.of<MyWalletsProvider>(context);
|
||||||
|
|
||||||
int currentChest = configBox.get('currentChest');
|
int currentChest = configBox.get('currentChest');
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: SizedBox(
|
title: SizedBox(
|
||||||
|
@ -21,17 +29,35 @@ class ChooseChest extends StatelessWidget {
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: Column(children: <Widget>[
|
child: Column(children: <Widget>[
|
||||||
SizedBox(height: 190),
|
SizedBox(height: 190),
|
||||||
Center(
|
CarouselSlider(
|
||||||
child: Image.asset(
|
carouselController: buttonCarouselController,
|
||||||
'assets/chests/$currentChest.png',
|
options: CarouselOptions(
|
||||||
|
height: 210,
|
||||||
|
onPageChanged: (index, reason) {
|
||||||
|
currentChest = index;
|
||||||
|
},
|
||||||
|
enableInfiniteScroll: false,
|
||||||
|
initialPage: currentChest,
|
||||||
|
enlargeCenterPage: true,
|
||||||
|
viewportFraction: 0.6,
|
||||||
),
|
),
|
||||||
|
items: chestBox.toMap().entries.map((i) {
|
||||||
|
return Builder(
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return Column(children: <Widget>[
|
||||||
|
Image.asset(
|
||||||
|
'assets/chests/${i.value.imageName}',
|
||||||
|
),
|
||||||
|
SizedBox(height: 30),
|
||||||
|
Text(
|
||||||
|
i.value.name,
|
||||||
|
style: TextStyle(fontSize: 21),
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
),
|
),
|
||||||
SizedBox(height: 40),
|
|
||||||
Text(
|
|
||||||
chestBox.get(currentChest).name,
|
|
||||||
style: TextStyle(fontSize: 21),
|
|
||||||
),
|
|
||||||
SizedBox(height: 15),
|
|
||||||
Image.asset('assets/chests/vector.png'),
|
Image.asset('assets/chests/vector.png'),
|
||||||
SizedBox(height: 15),
|
SizedBox(height: 15),
|
||||||
Text(
|
Text(
|
||||||
|
@ -49,7 +75,8 @@ class ChooseChest extends StatelessWidget {
|
||||||
onPrimary: Colors.black, // foreground
|
onPrimary: Colors.black, // foreground
|
||||||
),
|
),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
configBox.put('currentChest', 0);
|
configBox.put('currentChest', currentChest);
|
||||||
|
_myWalletProvider.rebuildWidget();
|
||||||
Navigator.popUntil(
|
Navigator.popUntil(
|
||||||
context,
|
context,
|
||||||
ModalRoute.withName('/mywallets'),
|
ModalRoute.withName('/mywallets'),
|
||||||
|
|
|
@ -169,7 +169,7 @@ class ImportWalletScreen extends StatelessWidget {
|
||||||
_generateWalletProvider.isPinChanged
|
_generateWalletProvider.isPinChanged
|
||||||
? () {
|
? () {
|
||||||
_generateWalletProvider
|
_generateWalletProvider
|
||||||
.importWallet(
|
.importCesiumWallet(
|
||||||
context,
|
context,
|
||||||
_generateWalletProvider
|
_generateWalletProvider
|
||||||
.cesiumID.text,
|
.cesiumID.text,
|
||||||
|
|
|
@ -58,14 +58,6 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
pinForm(context, _pinLenght, wallet.number, wallet.derivation),
|
pinForm(context, _pinLenght, wallet.number, wallet.derivation),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
Navigator.popUntil(
|
|
||||||
context,
|
|
||||||
ModalRoute.withName('/'),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
child: Icon(Icons.home))
|
|
||||||
]),
|
]),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,11 @@ class WalletOptions extends StatelessWidget {
|
||||||
|
|
||||||
_walletOptions.walletID = [0, wallet.number];
|
_walletOptions.walletID = [0, wallet.number];
|
||||||
|
|
||||||
|
WalletData defaultWallet =
|
||||||
|
_myWalletProvider.getDefaultWallet(_currentChest);
|
||||||
|
|
||||||
_walletOptions.isDefaultWallet =
|
_walletOptions.isDefaultWallet =
|
||||||
(defaultWallet.id()[1] == _walletOptions.walletID[1]);
|
(defaultWallet.number == _walletOptions.walletID[1]);
|
||||||
|
|
||||||
int currentChest = _myWalletProvider.getCurrentChest();
|
int currentChest = _myWalletProvider.getCurrentChest();
|
||||||
|
|
||||||
|
@ -334,7 +337,8 @@ class WalletOptions extends StatelessWidget {
|
||||||
onTap: !_walletOptions.isDefaultWallet
|
onTap: !_walletOptions.isDefaultWallet
|
||||||
? () {
|
? () {
|
||||||
defaultWallet = wallet;
|
defaultWallet = wallet;
|
||||||
configBox.put('defaultWallet', wallet.id());
|
chestBox.get(currentChest).defaultWallet =
|
||||||
|
wallet.number;
|
||||||
_myWalletProvider.readAllWallets(_currentChest);
|
_myWalletProvider.readAllWallets(_currentChest);
|
||||||
_myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,8 @@ class WalletsHome extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
List _listWallets = _myWalletProvider.listWallets;
|
List _listWallets = _myWalletProvider.listWallets;
|
||||||
|
WalletData defaultWallet =
|
||||||
|
_myWalletProvider.getDefaultWallet(configBox.get('currentChest'));
|
||||||
|
|
||||||
return CustomScrollView(slivers: <Widget>[
|
return CustomScrollView(slivers: <Widget>[
|
||||||
SliverToBoxAdapter(child: SizedBox(height: 20)),
|
SliverToBoxAdapter(child: SizedBox(height: 20)),
|
||||||
|
|
|
@ -68,16 +68,14 @@ class SettingsScreen extends StatelessWidget {
|
||||||
primary: yellowC, // background
|
primary: yellowC, // background
|
||||||
onPrimary: Colors.black, // foreground
|
onPrimary: Colors.black, // foreground
|
||||||
),
|
),
|
||||||
onPressed: !_myWallets.checkIfWalletExist()
|
onPressed: () => Navigator.push(
|
||||||
? () => Navigator.push(
|
context,
|
||||||
context,
|
MaterialPageRoute(builder: (context) {
|
||||||
MaterialPageRoute(builder: (context) {
|
return GenerateWalletsScreen();
|
||||||
return GenerateWalletsScreen();
|
}),
|
||||||
}),
|
).then((value) => {
|
||||||
).then((value) => {
|
if (value == true) {Navigator.pop(context)}
|
||||||
if (value == true) {Navigator.pop(context)}
|
}),
|
||||||
})
|
|
||||||
: null,
|
|
||||||
child: Text("Générer un nouveau trousseau",
|
child: Text("Générer un nouveau trousseau",
|
||||||
style: TextStyle(fontSize: 16)))),
|
style: TextStyle(fontSize: 16)))),
|
||||||
Expanded(
|
Expanded(
|
||||||
|
|
|
@ -120,6 +120,13 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.1.3"
|
version: "8.1.3"
|
||||||
|
carousel_slider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: carousel_slider
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -54,6 +54,7 @@ dependencies:
|
||||||
unorm_dart: ^0.2.0
|
unorm_dart: ^0.2.0
|
||||||
xml: ^5.3.0
|
xml: ^5.3.0
|
||||||
assorted_layout_widgets: ^5.2.1
|
assorted_layout_widgets: ^5.2.1
|
||||||
|
carousel_slider: ^4.0.0
|
||||||
|
|
||||||
flutter_icons:
|
flutter_icons:
|
||||||
android: "ic_launcher"
|
android: "ic_launcher"
|
||||||
|
|