forked from axiom-team/gecko
WIP: A few bugs, Dewif unencryption very slow
This commit is contained in:
parent
ca812123a5
commit
2c67307399
20
README.md
20
README.md
|
@ -65,10 +65,28 @@ In a dart file (e.g. `lib/main.dart`), type the `F5` key to build the code. The
|
|||
|
||||
#### Linux
|
||||
|
||||
Build debug for linux:
|
||||
Install dependancies:
|
||||
|
||||
`sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev`
|
||||
|
||||
Then build debug for linux:
|
||||
|
||||
`flutter run -d linux`
|
||||
|
||||
If you get this error:
|
||||
|
||||
```
|
||||
flutter /usr/share/cmake-3.16/Modules/FindPkgConfig.cmake:643 (_pkg_check_modules_internal)
|
||||
```
|
||||
|
||||
Please try:
|
||||
|
||||
`sudo apt install liblzma-dev`
|
||||
|
||||
then
|
||||
|
||||
`flutter clean && flutter run -d linux`
|
||||
|
||||
## Roadmap
|
||||
|
||||
- v0.1.0 (expected date: 21-08-16)
|
||||
|
|
|
@ -38,7 +38,6 @@ import 'package:gecko/screens/search.dart';
|
|||
import 'package:gecko/screens/search_result.dart';
|
||||
import 'package:graphql_flutter/graphql_flutter.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:responsive_framework/responsive_framework.dart';
|
||||
|
@ -51,12 +50,11 @@ Future<void> main() async {
|
|||
WidgetsFlutterBinding.ensureInitialized();
|
||||
|
||||
HomeProvider _homeProvider = HomeProvider();
|
||||
appPath = await getApplicationDocumentsDirectory();
|
||||
appVersion = await _homeProvider.getAppVersion();
|
||||
prefs = await SharedPreferences.getInstance();
|
||||
|
||||
// Configure Hive and open boxes
|
||||
await Hive.initFlutter(appPath.path);
|
||||
await Hive.initFlutter();
|
||||
Hive.registerAdapter(WalletDataAdapter());
|
||||
Hive.registerAdapter(ChestDataAdapter());
|
||||
Hive.registerAdapter(G1WalletsListAdapter());
|
||||
|
@ -185,7 +183,7 @@ class Gecko extends StatelessWidget {
|
|||
home: const HomeScreen(),
|
||||
initialRoute: "/",
|
||||
routes: {
|
||||
'/mywallets': (context) => WalletsHome(),
|
||||
'/mywallets': (context) => const WalletsHome(),
|
||||
'/search': (context) => const SearchScreen(),
|
||||
'/searchResult': (context) => const SearchResultScreen(),
|
||||
},
|
||||
|
|
|
@ -37,7 +37,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
bool isCesiumIDVisible = false;
|
||||
bool isCesiumPWDVisible = false;
|
||||
bool canImport = false;
|
||||
bool isPinChanged = false;
|
||||
|
||||
// Import Chest
|
||||
TextEditingController cellController0 = TextEditingController();
|
||||
|
@ -152,17 +151,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<String> genMnemonic() async {
|
||||
try {
|
||||
generatedMnemonic = generateMnemonic(lang: 'french');
|
||||
actualWallet = await generateWallet(generatedMnemonic, isImport: false);
|
||||
walletIsGenerated = true;
|
||||
} catch (e) {
|
||||
log.e(e);
|
||||
}
|
||||
return generatedMnemonic;
|
||||
}
|
||||
|
||||
Future<NewWallet> generateWallet(String generatedMnemonic,
|
||||
{@required bool isImport}) async {
|
||||
try {
|
||||
|
@ -182,18 +170,13 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
return actualWallet;
|
||||
}
|
||||
|
||||
Future<NewWallet> changePinCode({bool reload}) async {
|
||||
actualWallet = Dewif().changePassword(
|
||||
dewif: actualWallet.dewif,
|
||||
oldPassword: actualWallet.password,
|
||||
);
|
||||
String changePinCode({bool reload}) {
|
||||
|
||||
pin.text = actualWallet.password;
|
||||
isPinChanged = true;
|
||||
pin.text = randomSecretCode(5);
|
||||
if (reload) {
|
||||
notifyListeners();
|
||||
}
|
||||
return actualWallet;
|
||||
return pin.text;
|
||||
}
|
||||
|
||||
Future<Uint8List> printWallet(String _title) async {
|
||||
|
@ -243,7 +226,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
|
||||
cesiumPubkey.text = _walletPubkey;
|
||||
pin.text = actualWallet.password;
|
||||
isPinChanged = true;
|
||||
log.d(_walletPubkey);
|
||||
}
|
||||
|
||||
|
@ -260,7 +242,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
cesiumPWD.text = '';
|
||||
cesiumPubkey.text = '';
|
||||
canImport = false;
|
||||
isPinChanged = false;
|
||||
pin.text = '';
|
||||
isCesiumIDVisible = false;
|
||||
isCesiumPWDVisible = false;
|
||||
|
@ -306,18 +287,18 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
|
||||
void resetCesiumImportView() {
|
||||
cesiumID.text = cesiumPWD.text = cesiumPubkey.text = pin.text = '';
|
||||
canImport = isPinChanged = isCesiumIDVisible = isCesiumPWDVisible = false;
|
||||
canImport = isCesiumIDVisible = isCesiumPWDVisible = false;
|
||||
actualWallet = null;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<List<String>> generateWordList() async {
|
||||
final String _sentance = await genMnemonic();
|
||||
List<String> generateWordList() {
|
||||
generatedMnemonic = generateMnemonic(lang: 'french');
|
||||
List<String> _wordsList = [];
|
||||
String word;
|
||||
int _nbr = 1;
|
||||
|
||||
for (word in _sentance.split(' ')) {
|
||||
for (word in generatedMnemonic.split(' ')) {
|
||||
_wordsList.add("$_nbr:$word");
|
||||
_nbr++;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:gecko/globals.dart';
|
|||
import 'package:gecko/screens/old_history_pay.dart';
|
||||
import 'package:gecko/screens/myWallets/wallets_home.dart';
|
||||
import 'package:package_info/package_info.dart';
|
||||
import 'package:flutter/foundation.dart' show kIsWeb;
|
||||
|
||||
class HomeProvider with ChangeNotifier {
|
||||
int _currentIndex = 0;
|
||||
|
@ -20,7 +21,7 @@ class HomeProvider with ChangeNotifier {
|
|||
Widget appBarExplorer =
|
||||
Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
|
||||
|
||||
List currentTab = [OldHistoryScreen(), WalletsHome()];
|
||||
List currentTab = [OldHistoryScreen(), const WalletsHome()];
|
||||
bool isFirstBuild = true;
|
||||
// AudioCache player = AudioCache(prefix: 'sounds/');
|
||||
|
||||
|
@ -34,7 +35,7 @@ class HomeProvider with ChangeNotifier {
|
|||
Future<String> getAppVersion() async {
|
||||
String version;
|
||||
String buildNumber;
|
||||
if (Platform.isLinux) {
|
||||
if (kIsWeb || Platform.isLinux) {
|
||||
version = "undefined";
|
||||
buildNumber = "undefined";
|
||||
} else {
|
||||
|
|
|
@ -28,8 +28,8 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
|
||||
Future<NewWallet> get badWallet => null;
|
||||
|
||||
Future _getPubkeyFromDewif(
|
||||
String _dewif, _pin, int _pinLenght, int derivation) async {
|
||||
String _getPubkeyFromDewif(
|
||||
String _dewif, _pin, int _pinLenght, int derivation) {
|
||||
String _pubkey;
|
||||
RegExp regExp = RegExp(
|
||||
r'^[A-Z0-9]+$',
|
||||
|
@ -45,6 +45,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
try {
|
||||
final _wallet = HdWallet.fromDewif(_dewif, _pin);
|
||||
_pubkey = _wallet.getPubkey(derivation);
|
||||
log.d(_pubkey);
|
||||
pubkey.text = _pubkey;
|
||||
notifyListeners();
|
||||
|
||||
|
@ -70,14 +71,14 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Future readLocalWallet(
|
||||
context, WalletData _wallet, String _pin, int _pinLenght) async {
|
||||
String readLocalWallet(
|
||||
context, WalletData _wallet, String _pin, int _pinLenght) {
|
||||
isWalletUnlock = false;
|
||||
try {
|
||||
String _localDewif = chestBox.get(_wallet.chest).dewif;
|
||||
String _localPubkey;
|
||||
|
||||
if ((_localPubkey = await _getPubkeyFromDewif(
|
||||
if ((_localPubkey = _getPubkeyFromDewif(
|
||||
_localDewif, _pin, _pinLenght, _wallet.derivation)) !=
|
||||
'false') {
|
||||
pubkey.text = _localPubkey;
|
||||
|
@ -94,21 +95,6 @@ class WalletOptionsProvider with ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
Future checkPinOK(String _createdDewif, String _pin, int _pinLenght) async {
|
||||
isWalletUnlock = false;
|
||||
try {
|
||||
if (await _getPubkeyFromDewif(_createdDewif, _pin, _pinLenght, 3) !=
|
||||
'false') {
|
||||
return true;
|
||||
} else {
|
||||
throw false;
|
||||
}
|
||||
} catch (e) {
|
||||
log.e('ERROR READING FILE: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int getPinLenght(_walletNbr) {
|
||||
// TODO: Get real Dewif lenght
|
||||
// String _localDewif;
|
||||
|
|
|
@ -25,7 +25,6 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context);
|
||||
_generateWalletProvider.genMnemonic();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
|
@ -40,7 +39,7 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
child: FittedBox(
|
||||
child: FloatingActionButton(
|
||||
heroTag: "buttonGenerateWallet",
|
||||
onPressed: () => _generateWalletProvider.genMnemonic(),
|
||||
onPressed: () => _generateWalletProvider.generateWordList(),
|
||||
child: SizedBox(
|
||||
height: 40.0,
|
||||
width: 40.0,
|
||||
|
@ -89,7 +88,7 @@ class GenerateFastChestScreen extends StatelessWidget {
|
|||
color: orangeC,
|
||||
onPressed: () {
|
||||
_generateWalletProvider.changePinCode(
|
||||
reload: false);
|
||||
reload: true);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
|
|
@ -164,8 +164,7 @@ class ImportWalletScreen extends StatelessWidget {
|
|||
primary: yellowC, // background
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: _generateWalletProvider.canImport &&
|
||||
_generateWalletProvider.isPinChanged
|
||||
onPressed: _generateWalletProvider.canImport
|
||||
? () {
|
||||
_generateWalletProvider
|
||||
.importCesiumWallet()
|
||||
|
|
|
@ -92,7 +92,7 @@ class RestoreChest extends StatelessWidget {
|
|||
await Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
page: OnboardingStepThirteen(), isFast: true),
|
||||
page: const OnboardingStepThirteen(), isFast: true),
|
||||
);
|
||||
} else {
|
||||
await badMnemonicPopup(context);
|
||||
|
|
|
@ -180,7 +180,7 @@ class UnlockingWallet extends StatelessWidget {
|
|||
onCompleted: (_pin) async {
|
||||
log.d("Completed");
|
||||
_myWalletProvider.pinCode = _pin;
|
||||
final String resultWallet = await _walletOptions.readLocalWallet(
|
||||
final String resultWallet = _walletOptions.readLocalWallet(
|
||||
context, wallet, _pin.toUpperCase(), _pinLenght);
|
||||
// _myWalletProvider.pinCode = _pin.toUpperCase();
|
||||
_myWalletProvider.pinLenght = _pinLenght;
|
||||
|
|
|
@ -14,9 +14,7 @@ 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);
|
||||
const WalletsHome({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -167,8 +165,8 @@ class WalletsHome extends StatelessWidget {
|
|||
Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: GestureDetector(
|
||||
onTap: () async {
|
||||
await _walletOptions.readLocalWallet(
|
||||
onTap: () {
|
||||
_walletOptions.readLocalWallet(
|
||||
context,
|
||||
_repository,
|
||||
_myWalletProvider.pinCode,
|
||||
|
@ -351,56 +349,6 @@ class WalletsHome extends StatelessWidget {
|
|||
),
|
||||
])));
|
||||
}
|
||||
|
||||
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 {
|
||||
|
|
|
@ -50,7 +50,8 @@ class OnboardingStepTwelve extends StatelessWidget {
|
|||
Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
page: OnboardingStepThirteen(), isFast: true),
|
||||
page: const OnboardingStepThirteen(),
|
||||
isFast: true),
|
||||
);
|
||||
},
|
||||
child: const Text("Générer le code secret",
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// ignore_for_file: file_names
|
||||
import 'package:durt/durt.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
|
@ -10,10 +9,9 @@ import 'package:provider/provider.dart';
|
|||
|
||||
// ignore: must_be_immutable
|
||||
class OnboardingStepThirteen extends StatelessWidget {
|
||||
NewWallet generatedWallet;
|
||||
final int progress = 10;
|
||||
|
||||
OnboardingStepThirteen({Key key}) : super(key: key);
|
||||
const OnboardingStepThirteen({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
@ -23,19 +21,13 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
// MyWalletsProvider myWalletProvider =
|
||||
// Provider.of<MyWalletsProvider>(context);
|
||||
CommonElements common = CommonElements();
|
||||
_generateWalletProvider.pin.text = '';
|
||||
_generateWalletProvider.pin.text =
|
||||
_generateWalletProvider.changePinCode(reload: false);
|
||||
|
||||
return Scaffold(
|
||||
extendBodyBehindAppBar: true,
|
||||
body: SafeArea(
|
||||
child: Column(children: <Widget>[
|
||||
FutureBuilder(
|
||||
future: _generateWalletProvider.changePinCode(reload: false),
|
||||
// initialData: '...',
|
||||
builder: (context, snapshot) {
|
||||
generatedWallet = snapshot.data;
|
||||
return const Visibility(visible: false, child: Text(''));
|
||||
}),
|
||||
common.onboardingProgressBar(
|
||||
context, 'Ma phrase de restauration', progress),
|
||||
common.bubbleSpeakRich(
|
||||
|
@ -71,9 +63,8 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
IconButton(
|
||||
icon: const Icon(Icons.replay),
|
||||
color: orangeC,
|
||||
onPressed: () async {
|
||||
generatedWallet = await _generateWalletProvider
|
||||
.changePinCode(reload: false);
|
||||
onPressed: () {
|
||||
_generateWalletProvider.changePinCode(reload: true);
|
||||
},
|
||||
),
|
||||
],
|
||||
|
@ -91,9 +82,8 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
primary: const Color(0xffFFD58D),
|
||||
onPrimary: Colors.black, // foreground
|
||||
),
|
||||
onPressed: () async {
|
||||
generatedWallet = await _generateWalletProvider
|
||||
.changePinCode(reload: false);
|
||||
onPressed: () {
|
||||
_generateWalletProvider.changePinCode(reload: true);
|
||||
},
|
||||
child: const Text("Choisir un autre code secret",
|
||||
style: TextStyle(fontSize: 20))),
|
||||
|
@ -115,9 +105,7 @@ class OnboardingStepThirteen extends StatelessWidget {
|
|||
Navigator.push(
|
||||
context,
|
||||
FaderTransition(
|
||||
page: OnboardingStepFourteen(
|
||||
generatedWallet: generatedWallet),
|
||||
isFast: true),
|
||||
page: OnboardingStepFourteen(), isFast: true),
|
||||
);
|
||||
},
|
||||
child: const Text("J'ai noté mon code secret",
|
||||
|
|
|
@ -17,10 +17,8 @@ import 'package:provider/provider.dart';
|
|||
class OnboardingStepFourteen extends StatelessWidget {
|
||||
OnboardingStepFourteen({
|
||||
Key validationKey,
|
||||
@required this.generatedWallet,
|
||||
}) : super(key: validationKey);
|
||||
|
||||
NewWallet generatedWallet;
|
||||
final int progress = 11;
|
||||
final formKey = GlobalKey<FormState>();
|
||||
var pinColor = const Color(0xFFA4B600);
|
||||
|
@ -29,12 +27,12 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
|
||||
// GenerateWalletsProvider _generateWalletProvider =
|
||||
// Provider.of<GenerateWalletsProvider>(context);
|
||||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context);
|
||||
WalletOptionsProvider _walletOptions =
|
||||
Provider.of<WalletOptionsProvider>(context);
|
||||
CommonElements common = CommonElements();
|
||||
final int _pinLenght = _walletOptions.getPinLenght(generatedWallet.dewif);
|
||||
final int _pinLenght = _generateWalletProvider.pin.text.length;
|
||||
|
||||
return Scaffold(
|
||||
extendBodyBehindAppBar: true,
|
||||
|
@ -113,13 +111,16 @@ class OnboardingStepFourteen extends StatelessWidget {
|
|||
blurRadius: 10,
|
||||
)
|
||||
],
|
||||
onCompleted: (_pin) async {
|
||||
onCompleted: (_pin) {
|
||||
_myWalletProvider.pinCode = _pin;
|
||||
_myWalletProvider.pinLenght = _pinLenght;
|
||||
final bool resultWallet = await _walletOptions.checkPinOK(
|
||||
generatedWallet.dewif, _pin.toUpperCase(), _pinLenght);
|
||||
if (resultWallet) {
|
||||
log.d(_pin + ' || ' + _generateWalletProvider.pin.text);
|
||||
if (_pin.toUpperCase() == _generateWalletProvider.pin.text) {
|
||||
pinColor = Colors.green[500];
|
||||
NewWallet generatedWallet = Dewif().generateDewif(
|
||||
_generateWalletProvider.generatedMnemonic,
|
||||
_generateWalletProvider.pin.text,
|
||||
lang: 'french');
|
||||
_generateWalletProvider.storeHDWChest(
|
||||
generatedWallet, 'Mon portefeuille courant', context);
|
||||
_myWalletProvider.readAllWallets(_currentChest);
|
||||
|
|
|
@ -113,24 +113,8 @@ Widget sentanceArray(BuildContext context) {
|
|||
GenerateWalletsProvider _generateWalletProvider =
|
||||
Provider.of<GenerateWalletsProvider>(context);
|
||||
|
||||
return FutureBuilder(
|
||||
future: _generateWalletProvider.generateWordList(),
|
||||
initialData: const [
|
||||
'1:...',
|
||||
'2:...',
|
||||
'3:...',
|
||||
'4:...',
|
||||
'5:...',
|
||||
'6:...',
|
||||
'7:...',
|
||||
'8:...',
|
||||
'9:...',
|
||||
'10:...',
|
||||
'11:...',
|
||||
'12:...',
|
||||
],
|
||||
builder: (context, formatedArray) {
|
||||
// print(formatedArray.data);
|
||||
List formatedArray = _generateWalletProvider.generateWordList();
|
||||
|
||||
return Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Container(
|
||||
|
@ -148,29 +132,28 @@ Widget sentanceArray(BuildContext context) {
|
|||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
arrayCell(formatedArray.data[0]),
|
||||
arrayCell(formatedArray.data[1]),
|
||||
arrayCell(formatedArray.data[2]),
|
||||
arrayCell(formatedArray.data[3]),
|
||||
arrayCell(formatedArray[0]),
|
||||
arrayCell(formatedArray[1]),
|
||||
arrayCell(formatedArray[2]),
|
||||
arrayCell(formatedArray[3]),
|
||||
]),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(formatedArray.data[4]),
|
||||
arrayCell(formatedArray.data[5]),
|
||||
arrayCell(formatedArray.data[6]),
|
||||
arrayCell(formatedArray.data[7]),
|
||||
arrayCell(formatedArray[4]),
|
||||
arrayCell(formatedArray[5]),
|
||||
arrayCell(formatedArray[6]),
|
||||
arrayCell(formatedArray[7]),
|
||||
]),
|
||||
const SizedBox(height: 15),
|
||||
Row(children: <Widget>[
|
||||
arrayCell(formatedArray.data[8]),
|
||||
arrayCell(formatedArray.data[9]),
|
||||
arrayCell(formatedArray.data[10]),
|
||||
arrayCell(formatedArray.data[11]),
|
||||
arrayCell(formatedArray[8]),
|
||||
arrayCell(formatedArray[9]),
|
||||
arrayCell(formatedArray[10]),
|
||||
arrayCell(formatedArray[11]),
|
||||
]),
|
||||
]),
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Widget arrayCell(dataWord) {
|
||||
|
|
|
@ -294,7 +294,7 @@ packages:
|
|||
name: durt
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3+3"
|
||||
version: "0.1.4"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
@ -5,7 +5,7 @@ description: Pay with G1.
|
|||
# pub.dev using `pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
version: 0.0.3+14
|
||||
version: 0.0.4+1
|
||||
|
||||
environment:
|
||||
sdk: ">=2.7.0 <3.0.0"
|
||||
|
@ -56,7 +56,7 @@ dependencies:
|
|||
xml: ^5.3.0
|
||||
pull_to_refresh: ^2.0.0
|
||||
dio: ^4.0.4
|
||||
durt: ^0.1.3+3
|
||||
durt: ^0.1.4
|
||||
|
||||
flutter_icons:
|
||||
android: "ic_launcher"
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
MY_PATH="`dirname \"$0\"`"
|
||||
MY_PATH="`( cd \"$MY_PATH\" && pwd )`"
|
||||
|
||||
cd $MY_PATH/..
|
||||
|
||||
cargo bd
|
||||
cargo make android-dev
|
||||
cargo br
|
||||
|
||||
echo -e "\nRust dependencies have been successfully build !"
|
Loading…
Reference in New Issue