diff --git a/lib/globals.dart b/lib/globals.dart index 70cd2ae..7ba7926 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -8,23 +8,23 @@ import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; // Files paths -Directory appPath; +Directory? appPath; -String appVersion; -SharedPreferences prefs; -String endPointGVA; -int ramSys; -Box walletBox; -Box chestBox; -Box configBox; -Box g1WalletsBox; +String? appVersion; +SharedPreferences? prefs; +String? endPointGVA; +int? ramSys; +late Box walletBox; +late Box chestBox; +late Box configBox; +late Box g1WalletsBox; String cesiumPod = "https://g1.data.le-sou.org"; // String cesiumPod = "https://g1.data.e-is.pro"; // Responsive ratios -bool isTall; -double ratio; +late bool isTall; +late double ratio; // Logger var log = Logger(); diff --git a/lib/main.dart b/lib/main.dart index 74121ce..5ce5d97 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -124,14 +124,14 @@ Future main() async { } class Gecko extends StatelessWidget { - const Gecko(this.randomEndpoint, {Key key}) : super(key: key); - final String randomEndpoint; + const Gecko(this.randomEndpoint, {Key? key}) : super(key: key); + final String? randomEndpoint; @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); final _httpLink = HttpLink( - randomEndpoint, + randomEndpoint!, ); final _client = ValueNotifier( @@ -160,7 +160,7 @@ class Gecko extends StatelessWidget { client: _client, child: MaterialApp( builder: (context, widget) => ResponsiveWrapper.builder( - BouncingScrollWrapper.builder(context, widget), + BouncingScrollWrapper.builder(context, widget!), maxWidth: 1200, minWidth: 480, defaultScale: true, @@ -202,7 +202,7 @@ 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) { + HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context) ..badCertificateCallback = (X509Certificate cert, String host, int port) => true; diff --git a/lib/models/cesium_plus.dart b/lib/models/cesium_plus.dart index d99321c..f52e811 100644 --- a/lib/models/cesium_plus.dart +++ b/lib/models/cesium_plus.dart @@ -8,7 +8,7 @@ import 'package:path_provider/path_provider.dart'; class CesiumPlusProvider with ChangeNotifier { TextEditingController cesiumName = TextEditingController(); - Image defaultAvatar(double size) => + Image defaultAvatar(double? size) => Image.asset(('assets/icon_user.png'), height: size); CancelToken avatarCancelToken = CancelToken(); @@ -60,17 +60,17 @@ class CesiumPlusProvider with ChangeNotifier { return [podRequest, queryGetAvatar, headers]; } - Future getName(String _pubkey) async { - String _name; + Future getName(String? _pubkey) async { + String? _name; - if (g1WalletsBox.get(_pubkey).csName != null) { - return g1WalletsBox.get(_pubkey).csName; + if (g1WalletsBox.get(_pubkey)!.csName != null) { + return g1WalletsBox.get(_pubkey)!.csName; } List queryOptions = await _buildQuery(_pubkey); var dio = Dio(); - Response response; + late Response response; try { response = await dio.post( queryOptions[0], @@ -97,14 +97,14 @@ class CesiumPlusProvider with ChangeNotifier { } _name = response.data['hits']['hits'][0]['_source']['title']; - g1WalletsBox.get(_pubkey).csName = _name; + g1WalletsBox.get(_pubkey)!.csName = _name; return _name; } - Future getAvatar(String _pubkey, double size) async { + Future getAvatar(String? _pubkey, double size) async { if (g1WalletsBox.get(_pubkey)?.avatar != null) { - return g1WalletsBox.get(_pubkey).avatar; + return g1WalletsBox.get(_pubkey)!.avatar; } var dio = Dio(); @@ -112,7 +112,7 @@ class CesiumPlusProvider with ChangeNotifier { List queryOptions = await _buildQuery(_pubkey); - Response response; + late Response response; try { response = await dio .post(queryOptions[0], @@ -150,7 +150,7 @@ class CesiumPlusProvider with ChangeNotifier { fit: BoxFit.fitWidth, ); - g1WalletsBox.get(_pubkey).avatar = finalAvatar; + g1WalletsBox.get(_pubkey)!.avatar = finalAvatar; return finalAvatar; } diff --git a/lib/models/change_pin.dart b/lib/models/change_pin.dart index 20141e7..965c269 100644 --- a/lib/models/change_pin.dart +++ b/lib/models/change_pin.dart @@ -5,13 +5,13 @@ import 'package:gecko/globals.dart'; class ChangePinProvider with ChangeNotifier { bool ischangedPin = false; TextEditingController newPin = TextEditingController(); - String pinToGive; + String? pinToGive; - NewWallet get badWallet => null; + NewWallet? get badWallet => null; - NewWallet changePin(String _oldPin, {String newCustomPin}) { + NewWallet? changePin(String _oldPin, {String? newCustomPin}) { try { - final _dewif = chestBox.get(configBox.get('currentChest')).dewif; + final _dewif = chestBox.get(configBox.get('currentChest'))!.dewif!; // TODO: Durt: Detect if CesiumWallet NewWallet newWalletFile = Dewif().changePassword( @@ -34,7 +34,7 @@ class ChangePinProvider with ChangeNotifier { // currentChest.dewif = _newWalletFile.dewif; // await chestBox.add(currentChest); - chestBox.get(configBox.get('currentChest')).dewif = _newWalletFile.dewif; + chestBox.get(configBox.get('currentChest'))!.dewif = _newWalletFile.dewif; Navigator.pop(context, pinToGive); pinToGive = ''; diff --git a/lib/models/chest_data.dart b/lib/models/chest_data.dart index 9e01d9a..48f5579 100644 --- a/lib/models/chest_data.dart +++ b/lib/models/chest_data.dart @@ -7,22 +7,22 @@ part 'chest_data.g.dart'; @HiveType(typeId: 1) class ChestData extends HiveObject { @HiveField(0) - String dewif; + String? dewif; @HiveField(2) - String name; + String? name; @HiveField(3) - int defaultWallet; + int? defaultWallet; @HiveField(4) - String imageName; + String? imageName; @HiveField(5) - File imageFile; + File? imageFile; @HiveField(6) - bool isCesium; + bool? isCesium; ChestData({ this.dewif, @@ -35,6 +35,6 @@ class ChestData extends HiveObject { @override String toString() { - return name; + return name!; } } diff --git a/lib/models/chest_data.g.dart b/lib/models/chest_data.g.dart index 1d0be58..33cbaf3 100644 --- a/lib/models/chest_data.g.dart +++ b/lib/models/chest_data.g.dart @@ -17,12 +17,12 @@ class ChestDataAdapter extends TypeAdapter { 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, + 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?, ); } diff --git a/lib/models/chest_provider.dart b/lib/models/chest_provider.dart index 9af37a4..142ef4d 100644 --- a/lib/models/chest_provider.dart +++ b/lib/models/chest_provider.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; @@ -8,14 +9,14 @@ class ChestProvider with ChangeNotifier { } Future deleteChest(context, ChestData _chest) async { - final bool _answer = await _confirmDeletingChest(context, _chest.name); + final bool _answer = await (_confirmDeletingChest(context, _chest.name) as FutureOr); if (_answer) { await chestBox.delete(_chest.key); if (chestBox.isEmpty) { await configBox.put('currentChest', 0); } else { - int lastChest = chestBox.toMap().keys.first; + int? lastChest = chestBox.toMap().keys.first; await configBox.put('currentChest', lastChest); } @@ -27,7 +28,7 @@ class ChestProvider with ChangeNotifier { } } - Future _confirmDeletingChest(context, String _walletName) async { + Future _confirmDeletingChest(context, String? _walletName) async { return showDialog( context: context, barrierDismissible: true, // user must tap button! diff --git a/lib/models/g1_wallets_list.dart b/lib/models/g1_wallets_list.dart index 98fef2b..1cc62ab 100644 --- a/lib/models/g1_wallets_list.dart +++ b/lib/models/g1_wallets_list.dart @@ -6,25 +6,25 @@ part 'g1_wallets_list.g.dart'; @HiveType(typeId: 2) class G1WalletsList { @HiveField(0) - String pubkey; + String? pubkey; @HiveField(1) - double balance; + double? balance; @HiveField(3) - Id id; + Id? id; @HiveField(4) - Image avatar; + Image? avatar; @HiveField(5) - String username; + String? username; @HiveField(6) - String csName; + String? csName; @HiveField(7) - bool isMembre; + bool? isMembre; G1WalletsList({ this.pubkey, @@ -47,7 +47,7 @@ class G1WalletsList { data['pubkey'] = pubkey; data['balance'] = balance; if (id != null) { - data['id'] = id.toJson(); + data['id'] = id!.toJson(); } return data; } @@ -55,8 +55,8 @@ class G1WalletsList { @HiveType(typeId: 3) class Id { - bool isMember; - String username; + bool? isMember; + String? username; Id({this.isMember, this.username}); diff --git a/lib/models/g1_wallets_list.g.dart b/lib/models/g1_wallets_list.g.dart index 266daed..bb7c15d 100644 --- a/lib/models/g1_wallets_list.g.dart +++ b/lib/models/g1_wallets_list.g.dart @@ -19,13 +19,13 @@ class G1WalletsListAdapter extends TypeAdapter { for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), }; return G1WalletsList( - pubkey: fields[0] as String, - balance: fields[1] as double, - id: fields[3] as Id, - avatar: fields[4] as Image, - username: fields[5] as String, - csName: fields[6] as String, - isMembre: fields[7] as bool, + pubkey: fields[0] as String?, + balance: fields[1] as double?, + id: fields[3] as Id?, + avatar: fields[4] as Image?, + username: fields[5] as String?, + csName: fields[6] as String?, + isMembre: fields[7] as bool?, ); } diff --git a/lib/models/generate_wallets.dart b/lib/models/generate_wallets.dart index bfdae69..6cefd84 100644 --- a/lib/models/generate_wallets.dart +++ b/lib/models/generate_wallets.dart @@ -15,16 +15,16 @@ import "package:unorm_dart/unorm_dart.dart" as unorm; class GenerateWalletsProvider with ChangeNotifier { GenerateWalletsProvider(); // NewWallet generatedWallet; - NewWallet actualWallet; + NewWallet? actualWallet; FocusNode walletNameFocus = FocusNode(); - Color askedWordColor = Colors.black; + Color? askedWordColor = Colors.black; bool isAskedWordValid = false; - int nbrWord; - String nbrWordAlpha; + late int nbrWord; + String? nbrWordAlpha; - String generatedMnemonic; + String? generatedMnemonic; bool walletIsGenerated = true; TextEditingController mnemonicController = TextEditingController(); @@ -37,7 +37,7 @@ class GenerateWalletsProvider with ChangeNotifier { bool isCesiumIDVisible = false; bool isCesiumPWDVisible = false; bool canImport = false; - CesiumWallet cesiumWallet; + late CesiumWallet cesiumWallet; // Import Chest TextEditingController cellController0 = TextEditingController(); @@ -58,7 +58,7 @@ class GenerateWalletsProvider with ChangeNotifier { NewWallet _wallet, String _name, BuildContext context) async { int chestNumber = 0; chestBox.toMap().forEach((key, value) { - if (!value.isCesium) { + if (!value.isCesium!) { chestNumber++; } }); @@ -77,7 +77,7 @@ class GenerateWalletsProvider with ChangeNotifier { isCesium: false, ); await chestBox.add(thisChest); - int chestKey = chestBox.keys.last; + int? chestKey = chestBox.keys.last; WalletData myWallet = WalletData( chest: chestKey, @@ -128,7 +128,7 @@ class GenerateWalletsProvider with ChangeNotifier { return rng.nextInt(12); } - String intToString(int _nbr) { + String? intToString(int _nbr) { Map nbrToString = {}; nbrToString[1] = 'Premier'; nbrToString[2] = 'Deuxième'; @@ -152,8 +152,8 @@ class GenerateWalletsProvider with ChangeNotifier { notifyListeners(); } - Future generateWallet(String generatedMnemonic, - {@required bool isImport}) async { + Future generateWallet(String generatedMnemonic, + {required bool isImport}) async { try { actualWallet = Dewif().generateDewif( generatedMnemonic, randomSecretCode(5), @@ -164,14 +164,14 @@ class GenerateWalletsProvider with ChangeNotifier { if (!isImport) { mnemonicController.text = generatedMnemonic; - pin.text = actualWallet.password; + pin.text = actualWallet!.password; } // notifyListeners(); return actualWallet; } - String changePinCode({bool reload}) { + String changePinCode({required bool reload}) { pin.text = randomSecretCode(5); if (reload) { notifyListeners(); @@ -179,7 +179,7 @@ class GenerateWalletsProvider with ChangeNotifier { return pin.text; } - Future printWallet(String _title) async { + Future printWallet(String? _title) async { final ByteData fontData = await rootBundle.load("assets/OpenSans-Regular.ttf"); final pw.Font ttf = pw.Font.ttf(fontData.buffer.asByteData()); @@ -197,7 +197,7 @@ class GenerateWalletsProvider with ChangeNotifier { pw.Text("Phrase de restauration:", style: pw.TextStyle(fontSize: 20, font: ttf)), pw.SizedBox(height: 10), - pw.Text(_title, + pw.Text(_title!, style: pw.TextStyle(fontSize: 15, font: ttf), textAlign: pw.TextAlign.center), pw.Expanded( @@ -226,7 +226,7 @@ class GenerateWalletsProvider with ChangeNotifier { log.d(_walletPubkey); } - Future importCesiumWallet() async { + Future importCesiumWallet() async { // String _walletPubkey = await DubpRust.getLegacyPublicKey( // salt: _cesiumID, password: _cesiumPWD); // String shortPubkey = truncate(_walletPubkey, 9, @@ -244,7 +244,7 @@ class GenerateWalletsProvider with ChangeNotifier { int chestNumber = 0; chestBox.toMap().forEach((key, value) { - if (value.isCesium) { + if (value.isCesium!) { chestNumber++; } }); @@ -268,7 +268,7 @@ class GenerateWalletsProvider with ChangeNotifier { isCesium: true); await chestBox.add(cesiumChest).then((value) => null); - int chestKey = await chestBox.toMap().keys.last; + int? chestKey = await chestBox.toMap().keys.last; // chestBox.toMap(). await configBox.put('currentChest', chestKey); @@ -299,7 +299,7 @@ class GenerateWalletsProvider with ChangeNotifier { String word; int _nbr = 1; - for (word in generatedMnemonic.split(' ')) { + for (word in generatedMnemonic!.split(' ')) { _wordsList.add("$_nbr:$word"); _nbr++; } @@ -318,7 +318,7 @@ class GenerateWalletsProvider with ChangeNotifier { bool isBipWordsList(List words) { bool isValid = true; - for (String word in words) { + for (String word in words as Iterable) { // Needed for bad encoding of UTF-8 word = word.replaceAll('é', 'é'); word = word.replaceAll('è', 'è'); @@ -374,7 +374,7 @@ class GenerateWalletsProvider with ChangeNotifier { inputMnemonic = inputMnemonic.replaceAll('é', 'é'); inputMnemonic = inputMnemonic.replaceAll('è', 'è'); - NewWallet generatedWallet = + NewWallet? generatedWallet = await generateWallet(inputMnemonic, isImport: true); if (generatedWallet == null) { diff --git a/lib/models/home.dart b/lib/models/home.dart index 066c239..3160c3c 100644 --- a/lib/models/home.dart +++ b/lib/models/home.dart @@ -13,8 +13,7 @@ import 'package:flutter/foundation.dart' show kIsWeb; import 'package:path_provider/path_provider.dart' as pp; class HomeProvider with ChangeNotifier { - int _currentIndex = 0; - bool isSearching; + bool? isSearching; Icon searchIcon = const Icon(Icons.search); final TextEditingController searchQuery = TextEditingController(); Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850])); @@ -24,15 +23,8 @@ class HomeProvider with ChangeNotifier { bool isFirstBuild = true; // AudioCache player = AudioCache(prefix: 'sounds/'); - get currentIndex => _currentIndex; - - set currentIndex(int index) { - _currentIndex = index; - notifyListeners(); - } - Future initHive() async { - Directory hivePath; + late Directory hivePath; if (!kIsWeb) { if (Platform.isLinux || Platform.isMacOS) { @@ -70,14 +62,14 @@ class HomeProvider with ChangeNotifier { return version + '+' + buildNumber; } - Future getValidEndpoint() async { + Future getValidEndpoint() async { List _listEndpoints = await rootBundle .loadString('config/gva_endpoints.json') .then((jsonStr) => jsonDecode(jsonStr)); _listEndpoints.shuffle(); int i = 0; - String _endpoint; + String? _endpoint; int _statusCode = 0; final _client = HttpClient(); @@ -118,7 +110,7 @@ class HomeProvider with ChangeNotifier { } } while (_statusCode != 400); - log.i('ENDPOINT: ' + _endpoint); + log.i('ENDPOINT: ' + _endpoint!); return _endpoint; } @@ -159,7 +151,7 @@ class HomeProvider with ChangeNotifier { _message = "Aucun noeud Duniter disponible, veuillez réessayer ultérieurement"; } else { - _message = "Vous êtes connecté au noeud\n${endPointGVA.split('/')[2]}"; + _message = "Vous êtes connecté au noeud\n${endPointGVA!.split('/')[2]}"; } final snackBar = SnackBar( content: Text(_message), duration: const Duration(seconds: 2)); diff --git a/lib/models/my_wallets.dart b/lib/models/my_wallets.dart index 8a45bb0..d1d5e7c 100644 --- a/lib/models/my_wallets.dart +++ b/lib/models/my_wallets.dart @@ -5,10 +5,10 @@ import 'package:gecko/models/wallet_data.dart'; class MyWalletsProvider with ChangeNotifier { List listWallets = []; - String pinCode; - int pinLenght; + late String pinCode; + int? pinLenght; - int getCurrentChest() { + int? getCurrentChest() { if (configBox.get('currentChest') == null) { configBox.put('currentChest', 0); } @@ -25,7 +25,7 @@ class MyWalletsProvider with ChangeNotifier { } } - List readAllWallets(int _chest) { + List readAllWallets(int? _chest) { listWallets.clear(); walletBox.toMap().forEach((key, value) { if (value.chest == _chest) { @@ -36,11 +36,11 @@ class MyWalletsProvider with ChangeNotifier { return listWallets; } - WalletData getWalletData(List _id) { + WalletData? getWalletData(List _id) { if (_id.isEmpty) return WalletData(); - int _chest = _id[0]; - int _nbr = _id[1]; - WalletData _targetedWallet; + int? _chest = _id[0]; + int? _nbr = _id[1]; + WalletData? _targetedWallet; walletBox.toMap().forEach((key, value) { if (value.chest == _chest && value.number == _nbr) { @@ -52,11 +52,11 @@ class MyWalletsProvider with ChangeNotifier { return _targetedWallet; } - WalletData getDefaultWallet(int chest) { + WalletData? getDefaultWallet(int? chest) { if (chestBox.isEmpty) { return WalletData(chest: 0, number: 0); } else { - int defaultWalletNumber = chestBox.get(chest).defaultWallet; + int? defaultWalletNumber = chestBox.get(chest)!.defaultWallet; return getWalletData([chest, defaultWalletNumber]); } } @@ -65,7 +65,7 @@ class MyWalletsProvider with ChangeNotifier { try { log.w('DELETE ALL WALLETS ?'); - final bool _answer = await _confirmDeletingAllWallets(context); + final bool _answer = await (_confirmDeletingAllWallets(context) as FutureOr); if (_answer) { await walletBox.clear(); await chestBox.clear(); @@ -84,7 +84,7 @@ class MyWalletsProvider with ChangeNotifier { } } - Future _confirmDeletingAllWallets(context) async { + Future _confirmDeletingAllWallets(context) async { return showDialog( context: context, barrierDismissible: true, // user must tap button! @@ -116,15 +116,15 @@ class MyWalletsProvider with ChangeNotifier { Future generateNewDerivation(context, String _name) async { int _newDerivationNbr; int _newWalletNbr; - int _chest = getCurrentChest(); + int? _chest = getCurrentChest(); List _walletConfig = readAllWallets(_chest); if (_walletConfig.isEmpty) { _newDerivationNbr = 3; _newWalletNbr = 0; } else { - _newDerivationNbr = _walletConfig.last.derivation + 3; - _newWalletNbr = _walletConfig.last.number + 1; + _newDerivationNbr = _walletConfig.last.derivation! + 3; + _newWalletNbr = _walletConfig.last.number! + 1; } WalletData newWallet = WalletData( diff --git a/lib/models/search.dart b/lib/models/search.dart index f17b7e1..d2fd462 100644 --- a/lib/models/search.dart +++ b/lib/models/search.dart @@ -25,7 +25,7 @@ class SearchProvider with ChangeNotifier { // final response = await http.get(url); var dio = Dio(); - Response response; + late Response response; try { response = await dio.get( 'https://g1-stats.axiom-team.fr/data/forbes.json', @@ -40,8 +40,8 @@ class SearchProvider with ChangeNotifier { log.e(e); } - List _listWallets = _parseG1Wallets(response.data); - Map _mapWallets = { + List _listWallets = _parseG1Wallets(response.data)!; + Map _mapWallets = { for (var e in _listWallets) e.pubkey: e }; @@ -51,11 +51,11 @@ class SearchProvider with ChangeNotifier { g1WalletsBox.toMap().forEach((key, value) { if ((value.id != null && - value.id.username != null && - value.id.username + value.id!.username != null && + value.id!.username! .toLowerCase() .contains(searchController.text)) || - value.pubkey.contains(searchController.text)) { + value.pubkey!.contains(searchController.text)) { searchResult.add(value); return; } @@ -70,7 +70,7 @@ class SearchProvider with ChangeNotifier { } } -List _parseG1Wallets(var responseBody) { +List? _parseG1Wallets(var responseBody) { final parsed = responseBody.cast>(); return parsed diff --git a/lib/models/wallet_data.dart b/lib/models/wallet_data.dart index 20ea9ef..fc7cf51 100644 --- a/lib/models/wallet_data.dart +++ b/lib/models/wallet_data.dart @@ -7,22 +7,22 @@ part 'wallet_data.g.dart'; @HiveType(typeId: 0) class WalletData extends HiveObject { @HiveField(0) - int chest; + int? chest; @HiveField(1) - int number; + int? number; @HiveField(2) - String name; + String? name; @HiveField(3) - int derivation; + int? derivation; @HiveField(4) - String imageName; + String? imageName; @HiveField(5) - File imageFile; + File? imageFile; WalletData( {this.chest, @@ -35,7 +35,7 @@ class WalletData extends HiveObject { // representation of WalletData when debugging @override String toString() { - return name; + return name!; } // creates the ':'-separated string from the WalletData @@ -44,7 +44,7 @@ class WalletData extends HiveObject { } // returns only the id part of the ':'-separated string - List id() { + List id() { return [chest, number]; } } diff --git a/lib/models/wallet_data.g.dart b/lib/models/wallet_data.g.dart index 3f8ee52..56f2ce8 100644 --- a/lib/models/wallet_data.g.dart +++ b/lib/models/wallet_data.g.dart @@ -17,12 +17,12 @@ class WalletDataAdapter extends TypeAdapter { for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), }; return WalletData( - chest: fields[0] as int, - 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, + chest: fields[0] as int?, + 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?, ); } diff --git a/lib/models/wallet_options.dart b/lib/models/wallet_options.dart index 20bb30d..9690275 100644 --- a/lib/models/wallet_options.dart +++ b/lib/models/wallet_options.dart @@ -21,12 +21,12 @@ class WalletOptionsProvider with ChangeNotifier { bool isBalanceBlur = true; FocusNode walletNameFocus = FocusNode(); TextEditingController nameController = TextEditingController(); - bool isDefaultWallet; + late bool isDefaultWallet; - Future get badWallet => null; + Future? get badWallet => null; String _getPubkeyFromDewif( - String _dewif, _pin, int _pinLenght, int derivation) { + String? _dewif, _pin, int _pinLenght, int? derivation) { RegExp regExp = RegExp( r'^[A-Z0-9]+$', caseSensitive: false, @@ -39,25 +39,25 @@ class WalletOptionsProvider with ChangeNotifier { } if (derivation != -1) { try { - final _wallet = HdWallet.fromDewif(_dewif, _pin); - pubkey.text = _wallet.getPubkey(derivation); + final _wallet = HdWallet.fromDewif(_dewif!, _pin); + pubkey.text = _wallet.getPubkey(derivation!); log.d(pubkey.text); notifyListeners(); return pubkey.text; } catch (e) { - log.w('Bad PIN code !\n' + e); + log.w('Bad PIN code !\n' + e.toString()); notifyListeners(); return 'false'; } } else { try { - pubkey.text = CesiumWallet.fromDewif(_dewif, _pin).pubkey; + pubkey.text = CesiumWallet.fromDewif(_dewif!, _pin).pubkey; notifyListeners(); return pubkey.text; } catch (e) { - log.w('Bad PIN code !\n' + e); + log.w('Bad PIN code !\n' + e.toString()); notifyListeners(); return 'false'; @@ -65,11 +65,11 @@ class WalletOptionsProvider with ChangeNotifier { } } - String readLocalWallet( + String? readLocalWallet( context, WalletData _wallet, String _pin, int _pinLenght) { isWalletUnlock = false; try { - String _localDewif = chestBox.get(_wallet.chest).dewif; + String? _localDewif = chestBox.get(_wallet.chest)!.dewif; String _localPubkey; if ((_localPubkey = _getPubkeyFromDewif( @@ -108,15 +108,15 @@ class WalletOptionsProvider with ChangeNotifier { return 5; } - void _renameWallet(List _walletID, _newName, {bool isCesium}) async { + void _renameWallet(List _walletID, _newName, {required bool isCesium}) async { if (isCesium) { - ChestData _chestTarget = chestBox.get(_walletID[0]); + ChestData _chestTarget = chestBox.get(_walletID[0])!; _chestTarget.name = _newName; await chestBox.put(_chestTarget.key, _chestTarget); } else { MyWalletsProvider myWalletClass = MyWalletsProvider(); - WalletData _walletTarget = myWalletClass.getWalletData(_walletID); + WalletData _walletTarget = myWalletClass.getWalletData(_walletID)!; _walletTarget.name = _newName; await walletBox.put(_walletTarget.key, _walletTarget); } @@ -124,12 +124,12 @@ class WalletOptionsProvider with ChangeNotifier { _newWalletName.text = ''; } - bool editWalletName(List _wID, {bool isCesium}) { + bool editWalletName(List _wID, {bool? isCesium}) { bool nameState; if (isEditing) { if (!nameController.text.contains(':') && nameController.text.length <= 39) { - _renameWallet(_wID, nameController.text, isCesium: isCesium); + _renameWallet(_wID, nameController.text, isCesium: isCesium!); nameState = true; } else { nameState = false; @@ -144,7 +144,7 @@ class WalletOptionsProvider with ChangeNotifier { } Future deleteWallet(context, WalletData wallet) async { - final bool _answer = await _confirmDeletingWallet(context, wallet.name); + final bool _answer = await (_confirmDeletingWallet(context, wallet.name) as FutureOr); if (_answer) { walletBox.delete(wallet.key); @@ -157,7 +157,7 @@ class WalletOptionsProvider with ChangeNotifier { return 0; } - Future _confirmDeletingWallet(context, _walletName) async { + Future _confirmDeletingWallet(context, _walletName) async { return showDialog( context: context, barrierDismissible: true, // user must tap button! @@ -224,7 +224,7 @@ class WalletOptionsProvider with ChangeNotifier { File _image; final picker = ImagePicker(); - XFile pickedFile = await picker.pickImage(source: ImageSource.gallery); + XFile? pickedFile = await picker.pickImage(source: ImageSource.gallery); if (pickedFile != null) { _image = File(pickedFile.path); diff --git a/lib/models/wallets_profiles.dart b/lib/models/wallets_profiles.dart index 85879e4..562b094 100644 --- a/lib/models/wallets_profiles.dart +++ b/lib/models/wallets_profiles.dart @@ -19,18 +19,18 @@ import 'package:fast_base58/fast_base58.dart'; class WalletsProfilesProvider with ChangeNotifier { WalletsProfilesProvider(this.pubkey); - String pubkey = ''; + String? pubkey = ''; String pubkeyShort = ''; final TextEditingController outputPubkey = TextEditingController(); - List transBC; - String fetchMoreCursor; - Map pageInfo; + List? transBC; + String? fetchMoreCursor; + Map? pageInfo; bool isHistoryScreen = false; String historySwitchButtun = "Voir l'historique"; - String rawSvg; + String? rawSvg; TextEditingController payAmount = TextEditingController(); TextEditingController payComment = TextEditingController(); - num balance; + num? balance; int nRepositories = 20; int nPage = 1; @@ -38,7 +38,7 @@ class WalletsProfilesProvider with ChangeNotifier { if (Platform.isAndroid || Platform.isIOS) { await Permission.camera.request(); } - String barcode; + String? barcode; try { barcode = await scanner.scan(); } catch (e) { @@ -61,20 +61,20 @@ class WalletsProfilesProvider with ChangeNotifier { Future pay(BuildContext context, String pinCode) async { MyWalletsProvider _myWalletModel = MyWalletsProvider(); - int currentChest = configBox.get('currentChest'); - WalletData defaultWallet = _myWalletModel.getDefaultWallet(currentChest); + int? currentChest = configBox.get('currentChest'); + WalletData? defaultWallet = _myWalletModel.getDefaultWallet(currentChest); - String dewif = chestBox.get(currentChest).dewif; - int derivation; + String dewif = chestBox.get(currentChest)!.dewif!; + int? derivation; - if (chestBox.get(currentChest).isCesium) { + if (chestBox.get(currentChest)!.isCesium!) { derivation = -1; } else { - derivation = defaultWallet.derivation; + derivation = defaultWallet!.derivation; } - String result = await Gva(node: endPointGVA).pay( - recipient: pubkey, + String result = await Gva(node: endPointGVA!).pay( + recipient: pubkey!, amount: double.parse(payAmount.text), dewif: dewif, password: pinCode, @@ -147,7 +147,7 @@ class WalletsProfilesProvider with ChangeNotifier { for (final trans in txs) { var direction = trans['direction']; final transaction = trans['node']; - String output; + String? output; if (direction == "RECEIVED") { for (String line in transaction['outputs']) { if (line.contains(_pubkey)) { @@ -194,14 +194,14 @@ class WalletsProfilesProvider with ChangeNotifier { return transBC; } - FetchMoreOptions checkQueryResult(result, opts, _pubkey) { - final List blockchainTX = - (result.data['txsHistoryBc']['both']['edges'] as List); + FetchMoreOptions? checkQueryResult(result, opts, _pubkey) { + final List? blockchainTX = + (result.data['txsHistoryBc']['both']['edges'] as List?); // final List mempoolTX = // (result.data['txsHistoryMp']['receiving'] as List); pageInfo = result.data['txsHistoryBc']['both']['pageInfo']; - fetchMoreCursor = pageInfo['endCursor']; + fetchMoreCursor = pageInfo!['endCursor']; if (fetchMoreCursor == null) nPage = 1; if (nPage == 1) { @@ -216,9 +216,9 @@ class WalletsProfilesProvider with ChangeNotifier { variables: {'cursor': fetchMoreCursor, 'number': nRepositories}, updateQuery: (previousResultData, fetchMoreResultData) { final List repos = [ - ...previousResultData['txsHistoryBc']['both']['edges'] + ...previousResultData!['txsHistoryBc']['both']['edges'] as List, - ...fetchMoreResultData['txsHistoryBc']['both']['edges'] + ...fetchMoreResultData!['txsHistoryBc']['both']['edges'] as List ]; @@ -287,7 +287,7 @@ class WalletsProfilesProvider with ChangeNotifier { // return balance; // } - Future getBalance(String _pubkey) async { + Future getBalance(String? _pubkey) async { while (balance == null) { await Future.delayed(const Duration(milliseconds: 50)); } diff --git a/lib/screens/avatar_fullscreen.dart b/lib/screens/avatar_fullscreen.dart index 8f833dc..682e290 100644 --- a/lib/screens/avatar_fullscreen.dart +++ b/lib/screens/avatar_fullscreen.dart @@ -8,11 +8,11 @@ import 'package:flutter/material.dart'; class AvatarFullscreen extends StatelessWidget { TextEditingController tplController = TextEditingController(); - AvatarFullscreen(this.avatar, {this.title, this.color, Key key}) + AvatarFullscreen(this.avatar, {this.title, this.color, Key? key}) : super(key: key); - final Image avatar; - final String title; - final Color color; + final Image? avatar; + final String? title; + final Color? color; @override Widget build(BuildContext context) { @@ -43,8 +43,8 @@ class AvatarFullscreen extends StatelessWidget { // height: MediaQuery.of(context).size.height, // width: MediaQuery.of(context).size.width, child: Image( - image: avatar.image, - height: avatar.height, + image: avatar!.image, + height: avatar!.height, fit: BoxFit.fitWidth), ), ), diff --git a/lib/screens/common_elements.dart b/lib/screens/common_elements.dart index bb36379..c9e040b 100644 --- a/lib/screens/common_elements.dart +++ b/lib/screens/common_elements.dart @@ -8,7 +8,7 @@ class CommonElements { return const Text('Coucou'); } - Widget bubbleSpeak(String text, {double long, Key textKey}) { + Widget bubbleSpeak(String text, {double? long, Key? textKey}) { return Bubble( padding: long == null ? const BubbleEdges.all(18) @@ -26,7 +26,7 @@ class CommonElements { ); } - Widget bubbleSpeakRich(List text, {Key textKey}) { + Widget bubbleSpeakRich(List text, {Key? textKey}) { return Bubble( padding: const BubbleEdges.all(18), elevation: 5, @@ -130,7 +130,7 @@ class CommonElements { } class SmoothTransition extends PageRouteBuilder { - final Widget page; + final Widget? page; SmoothTransition({this.page}) : super( pageBuilder: ( @@ -141,8 +141,8 @@ class SmoothTransition extends PageRouteBuilder { TweenAnimationBuilder( duration: const Duration(seconds: 5), tween: Tween(begin: 200, end: 200), - builder: (BuildContext context, dynamic value, Widget child) { - return page; + builder: (BuildContext context, dynamic value, Widget? child) { + return page!; }, ), ); @@ -152,7 +152,7 @@ class FaderTransition extends PageRouteBuilder { final Widget page; final bool isFast; - FaderTransition({@required this.page, @required this.isFast}) + FaderTransition({required this.page, required this.isFast}) : super( pageBuilder: ( BuildContext context, @@ -175,7 +175,7 @@ class FaderTransition extends PageRouteBuilder { } class SlideLeftRoute extends PageRouteBuilder { - final Widget page; + final Widget? page; SlideLeftRoute({this.page}) : super( pageBuilder: ( @@ -183,7 +183,7 @@ class SlideLeftRoute extends PageRouteBuilder { Animation animation, Animation secondaryAnimation, ) => - page, + page!, transitionsBuilder: ( BuildContext context, Animation animation, @@ -207,7 +207,7 @@ class GeckoSpeechAppBar extends StatelessWidget with PreferredSizeWidget { GeckoSpeechAppBar( this.title, { - Key key, + Key? key, }) : preferredSize = const Size.fromHeight(105.4), super(key: key); diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 7a1de5a..8ed13fd 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -12,16 +12,16 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class HistoryScreen extends StatelessWidget with ChangeNotifier { - HistoryScreen({@required this.pubkey, this.avatar, this.username, Key key}) + HistoryScreen({required this.pubkey, this.avatar, this.username, Key? key}) : super(key: key); final ScrollController scrollController = ScrollController(); final double avatarsSize = 80; - final String pubkey; - final String username; - final Image avatar; + final String? pubkey; + final String? username; + final Image? avatar; - FetchMore fetchMore; - FetchMoreOptions opts; + FetchMore? fetchMore; + FetchMoreOptions? opts; final GlobalKey _scaffoldKey = GlobalKey(); @@ -32,8 +32,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Provider.of(context, listen: false); CesiumPlusProvider _cesiumPlusProvider = Provider.of(context, listen: false); - log.i('Build pubkey : ' + pubkey); - WidgetsBinding.instance.addPostFrameCallback((_) {}); + log.i('Build pubkey : ' + pubkey!); + WidgetsBinding.instance!.addPostFrameCallback((_) {}); _historyProvider.balance = _historyProvider.transBC = null; @@ -72,7 +72,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }, ), builder: (QueryResult result, {fetchMore, refetch}) { - if (result.isLoading && result?.data == null) { + if (result.isLoading && result.data == null) { return const Center( child: CircularProgressIndicator(), ); @@ -87,7 +87,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { style: TextStyle(fontSize: 18), ) ]); - } else if (result?.data == null) { + } else if (result.data == null) { return Column(children: const [ SizedBox(height: 50), Text( @@ -97,11 +97,11 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { ]); } - if (result?.data['balance'] == null) { + if (result.data!['balance'] == null) { _historyProvider.balance = 0.0; } else { _historyProvider.balance = _historyProvider - .removeDecimalZero(result.data['balance']['amount'] / 100); + .removeDecimalZero(result.data!['balance']['amount'] / 100); } if (result.isNotLoading) { @@ -120,13 +120,13 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { ), ), ), - onNotification: (t) { + onNotification: (dynamic t) { if (t is ScrollEndNotification && scrollController.position.pixels >= scrollController.position.maxScrollExtent * 0.7 && - _historyProvider.pageInfo['hasPreviousPage'] && + _historyProvider.pageInfo!['hasPreviousPage'] && result.isNotLoading) { - fetchMore(opts); + fetchMore!(opts!); } return true; }); @@ -151,14 +151,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { : Column(children: [ getTransactionTile(context, _historyProvider), if (result.isLoading && - _historyProvider.pageInfo['hasPreviousPage']) + _historyProvider.pageInfo!['hasPreviousPage']) Row( mainAxisAlignment: MainAxisAlignment.center, children: const [ CircularProgressIndicator(), ], ), - if (!_historyProvider.pageInfo['hasPreviousPage']) + if (!_historyProvider.pageInfo!['hasPreviousPage']) Column( children: const [ SizedBox(height: 15), @@ -176,8 +176,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { CesiumPlusProvider _cesiumPlusProvider = Provider.of(context, listen: false); int keyID = 0; - String dateDelimiter; - String lastDateDelimiter; + String? dateDelimiter; + String? lastDateDelimiter; const double _avatarSize = 200; bool isTody = false; @@ -200,15 +200,15 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }; return Column( - children: _historyProvider.transBC.map((repository) { + children: _historyProvider.transBC!.map((repository) { DateTime now = DateTime.now(); DateTime date = DateTime.fromMillisecondsSinceEpoch(repository[0] * 1000); String dateForm; if ({4, 10, 11, 12}.contains(date.month)) { - dateForm = "${date.day} ${monthsInYear[date.month].substring(0, 3)}."; + dateForm = "${date.day} ${monthsInYear[date.month]!.substring(0, 3)}."; } else if ({1, 2, 7, 9}.contains(date.month)) { - dateForm = "${date.day} ${monthsInYear[date.month].substring(0, 4)}."; + dateForm = "${date.day} ${monthsInYear[date.month]!.substring(0, 4)}."; } else { dateForm = "${date.day} ${monthsInYear[date.month]}"; } @@ -258,7 +258,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Padding( padding: const EdgeInsets.symmetric(vertical: 30), child: Text( - dateDelimiter, + dateDelimiter!, style: TextStyle( fontSize: 23, color: orangeC, fontWeight: FontWeight.w300), ), @@ -276,7 +276,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { future: _cesiumPlusProvider.getAvatar( repository[2], _avatarSize), builder: (BuildContext context, - AsyncSnapshot _avatar) { + AsyncSnapshot _avatar) { if (_avatar.connectionState != ConnectionState.done || _avatar.hasError) { @@ -295,11 +295,11 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { ]); } if (_avatar.hasData) { - g1WalletsBox.get(repository[2]).avatar = - _avatar?.data; - return ClipOval(child: _avatar?.data); + g1WalletsBox.get(repository[2])!.avatar = + _avatar.data; + return ClipOval(child: _avatar.data); } else { - g1WalletsBox.get(repository[2]).avatar = + g1WalletsBox.get(repository[2])!.avatar = _cesiumPlusProvider .defaultAvatar(repository[2]); return _cesiumPlusProvider @@ -308,7 +308,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }) : ClipOval( child: Image( - image: g1WalletsBox.get(repository[2]).avatar.image, + image: g1WalletsBox.get(repository[2])!.avatar!.image, height: _avatarSize, ), ), @@ -407,7 +407,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { _historyProvider.snackCopyKey(context); }, child: Text( - _historyProvider.getShortPubkey(pubkey), + _historyProvider.getShortPubkey(pubkey!), style: const TextStyle( fontSize: 30, fontWeight: FontWeight.w800, @@ -425,17 +425,17 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }, ), builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { + {VoidCallback? refetch, FetchMore? fetchMore}) { if (result.isLoading || result.hasException) { return const Text('...'); - } else if (result?.data['idty'] == null || - result?.data['idty']['username'] == null) { + } else if (result.data!['idty'] == null || + result.data!['idty']['username'] == null) { return const Text(''); } else { return SizedBox( width: 230, child: Text( - result?.data['idty']['username'] ?? '', + result.data!['idty']['username'] ?? '', style: const TextStyle( fontSize: 27, color: Color(0xff814C00), @@ -449,7 +449,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { SizedBox( width: 230, child: Text( - username, + username!, style: const TextStyle( fontSize: 27, color: Color(0xff814C00), @@ -461,13 +461,13 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { FutureBuilder( future: _historyProvider.getBalance(pubkey), builder: - (BuildContext context, AsyncSnapshot _balance) { + (BuildContext context, AsyncSnapshot _balance) { if (_balance.connectionState != ConnectionState.done || _balance.hasError) { return const Text('...'); } return Text( - "${_balance?.data.toString()} Ğ1", + "${_balance.data.toString()} Ğ1", textAlign: TextAlign.center, style: const TextStyle( fontSize: 22, fontWeight: FontWeight.w500), @@ -481,7 +481,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { FutureBuilder( future: _cesiumPlusProvider.getAvatar(pubkey, _avatarSize), builder: - (BuildContext context, AsyncSnapshot _avatar) { + (BuildContext context, AsyncSnapshot _avatar) { if (_avatar.connectionState != ConnectionState.done) { return Stack(children: [ ClipOval( @@ -507,13 +507,13 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Navigator.push( context, MaterialPageRoute(builder: (context) { - return AvatarFullscreen(_avatar?.data); + return AvatarFullscreen(_avatar.data); }), ); }, child: ClipOval( child: Image( - image: _avatar?.data?.image, + image: _avatar.data!.image, height: _avatarSize, fit: BoxFit.cover, ), @@ -537,7 +537,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }, child: ClipOval( child: Image( - image: avatar.image, + image: avatar!.image, height: _avatarSize, fit: BoxFit.cover, ), diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 4c65be5..0523d23 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -15,7 +15,7 @@ import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; class HomeScreen extends StatelessWidget { - const HomeScreen({Key key}) : super(key: key); + const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -84,7 +84,7 @@ class HomeScreen extends StatelessWidget { body: Builder( builder: (ctx) => StatefulWrapper( onInit: () { - WidgetsBinding.instance.addPostFrameCallback((_) { + WidgetsBinding.instance!.addPostFrameCallback((_) { if (isWalletsExists) homeClass.snackNode(ctx); }); }, @@ -254,7 +254,7 @@ Widget geckHome(context) { image: AssetImage('assets/home/wallet.png'), height: 75)), onTap: () { - WalletData defaultWallet = + WalletData? defaultWallet = _myWalletProvider.getDefaultWallet( configBox.get('currentChest')); Navigator.push( @@ -513,7 +513,7 @@ Widget welcomeHome(context) { class StatefulWrapper extends StatefulWidget { final Function onInit; final Widget child; - const StatefulWrapper({Key key, @required this.onInit, @required this.child}) + const StatefulWrapper({Key? key, required this.onInit, required this.child}) : super(key: key); @override _StatefulWrapperState createState() => _StatefulWrapperState(); @@ -522,9 +522,7 @@ class StatefulWrapper extends StatefulWidget { class _StatefulWrapperState extends State { @override void initState() { - if (widget.onInit != null) { - widget.onInit(); - } + widget.onInit(); super.initState(); } @@ -534,7 +532,7 @@ class _StatefulWrapperState extends State { } } -Widget bubbleSpeak(String text, {double long, Key textKey}) { +Widget bubbleSpeak(String text, {double? long, Key? textKey}) { return Bubble( padding: long == null ? const BubbleEdges.all(20) diff --git a/lib/screens/myWallets/cesium_wallet_options.dart b/lib/screens/myWallets/cesium_wallet_options.dart index a6509f5..d71bd46 100644 --- a/lib/screens/myWallets/cesium_wallet_options.dart +++ b/lib/screens/myWallets/cesium_wallet_options.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io'; import 'dart:ui'; import 'package:flutter/material.dart'; @@ -20,7 +21,7 @@ bool _isNewNameValid = false; class CesiumWalletOptions extends StatelessWidget { const CesiumWalletOptions( - {Key key, Key keyMyWallets, @required this.cesiumWallet}) + {Key? key, Key? keyMyWallets, required this.cesiumWallet}) : super(key: key); final ChestData cesiumWallet; @@ -40,9 +41,8 @@ class CesiumWalletOptions extends StatelessWidget { final String shortPubkey = _walletOptions.getShortPubkey(_walletOptions.pubkey.text); - if (_walletOptions.nameController.text == null || - _isNewNameValid == false) { - _walletOptions.nameController.text = cesiumWallet.name; + if (_isNewNameValid == false) { + _walletOptions.nameController.text = cesiumWallet.name!; } else { cesiumWallet.name = _walletOptions.nameController.text; } @@ -106,10 +106,8 @@ class CesiumWalletOptions extends StatelessWidget { const SizedBox(width: 25), InkWell( onTap: () async { - File newAvatar = await _walletOptions.changeAvatar(); - if (newAvatar != null) { + File newAvatar = await (_walletOptions.changeAvatar() as FutureOr); cesiumWallet.imageFile = newAvatar; - } _walletOptions.reloadBuild(); }, child: cesiumWallet.imageFile == null @@ -117,14 +115,12 @@ class CesiumWalletOptions extends StatelessWidget { 'assets/chests/${cesiumWallet.imageName}', width: 110, ) - : Image.file(cesiumWallet.imageFile, width: 110), + : Image.file(cesiumWallet.imageFile!, width: 110), ), InkWell( onTap: () async { - File newAvatar = await _walletOptions.changeAvatar(); - if (newAvatar != null) { + File newAvatar = await (_walletOptions.changeAvatar() as FutureOr); cesiumWallet.imageFile = newAvatar; - } _walletOptions.reloadBuild(); }, child: Column(children: [ @@ -170,7 +166,7 @@ class CesiumWalletOptions extends StatelessWidget { // pollInterval: Duration(seconds: 1), ), builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { + {VoidCallback? refetch, FetchMore? fetchMore}) { if (result.hasException) { return Text(result.exception.toString()); } @@ -181,13 +177,13 @@ class CesiumWalletOptions extends StatelessWidget { // List repositories = result.data['viewer']['repositories']['nodes']; String wBalanceUD; - if (result.data['balance'] == null) { + if (result.data!['balance'] == null) { wBalanceUD = '0.0'; } else { int wBalanceG1 = - result.data['balance']['amount']; + result.data!['balance']['amount']; int currentUD = - result.data['currentUd']['amount']; + result.data!['currentUd']['amount']; double wBalanceUDBrut = wBalanceG1 / currentUD; // .toString(); wBalanceUD = double.parse( @@ -357,7 +353,7 @@ class CesiumWalletOptions extends StatelessWidget { key: const Key('changePin'), onTap: () async { // await _chestProvider.changePin(context, cesiumWallet); - String newPin = await Navigator.push( + String? newPin = await Navigator.push( context, MaterialPageRoute( builder: (context) { diff --git a/lib/screens/myWallets/change_pin.dart b/lib/screens/myWallets/change_pin.dart index be4e011..17b1a82 100644 --- a/lib/screens/myWallets/change_pin.dart +++ b/lib/screens/myWallets/change_pin.dart @@ -10,13 +10,13 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class ChangePinScreen extends StatelessWidget with ChangeNotifier { ChangePinScreen( - {Key keyMyWallets, - @required this.walletName, - @required this.walletProvider}) + {Key? keyMyWallets, + required this.walletName, + required this.walletProvider}) : super(key: keyMyWallets); - final String walletName; + final String? walletName; final MyWalletsProvider walletProvider; - Directory appPath; + Directory? appPath; @override Widget build(BuildContext context) { @@ -41,7 +41,7 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier { }), title: SizedBox( height: 22, - child: Text(walletName), + child: Text(walletName!), ), ), body: Center( @@ -98,7 +98,7 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier { onPressed: () { NewWallet _newWalletFile = _changePin.changePin( walletProvider.pinCode, - newCustomPin: _changePin.newPin.text); + newCustomPin: _changePin.newPin.text)!; _changePin.newPin.text = ''; _changePin.storeNewPinChest(context, _newWalletFile); walletProvider.pinCode = _changePin.newPin.text; @@ -120,7 +120,7 @@ class ChangePinScreen extends StatelessWidget with ChangeNotifier { class StatefulWrapper extends StatefulWidget { final Function onInit; final Widget child; - const StatefulWrapper({Key key, @required this.onInit, @required this.child}) + const StatefulWrapper({Key? key, required this.onInit, required this.child}) : super(key: key); @override _StatefulWrapperState createState() => _StatefulWrapperState(); @@ -129,9 +129,7 @@ class StatefulWrapper extends StatefulWidget { class _StatefulWrapperState extends State { @override void initState() { - if (widget.onInit != null) { - widget.onInit(); - } + widget.onInit(); super.initState(); } diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart index 95f5ea7..3941562 100644 --- a/lib/screens/myWallets/chest_options.dart +++ b/lib/screens/myWallets/chest_options.dart @@ -8,7 +8,7 @@ import 'package:gecko/screens/myWallets/change_pin.dart'; import 'package:provider/provider.dart'; class ChestOptions extends StatelessWidget { - const ChestOptions({Key keyMyWallets, @required this.walletProvider}) + const ChestOptions({Key? keyMyWallets, required this.walletProvider}) : super(key: keyMyWallets); final MyWalletsProvider walletProvider; @@ -18,7 +18,7 @@ class ChestOptions extends StatelessWidget { ChestProvider _chestProvider = Provider.of(context, listen: false); - ChestData currentChest = chestBox.get(configBox.get('currentChest')); + ChestData currentChest = chestBox.get(configBox.get('currentChest'))!; return Scaffold( resizeToAvoidBottomInset: false, @@ -34,7 +34,7 @@ class ChestOptions extends StatelessWidget { }), title: SizedBox( height: 22, - child: Text(currentChest.name), + child: Text(currentChest.name!), )), body: Builder( builder: (ctx) => SafeArea( @@ -44,7 +44,7 @@ class ChestOptions extends StatelessWidget { key: const Key('changePin'), onTap: () async { // await _chestProvider.changePin(context, cesiumWallet); - String pinResult = await Navigator.push( + String? pinResult = await Navigator.push( context, MaterialPageRoute( builder: (context) { diff --git a/lib/screens/myWallets/choose_chest.dart b/lib/screens/myWallets/choose_chest.dart index 7179903..1d2622f 100644 --- a/lib/screens/myWallets/choose_chest.dart +++ b/lib/screens/myWallets/choose_chest.dart @@ -9,8 +9,8 @@ import 'package:carousel_slider/carousel_slider.dart'; import 'package:provider/provider.dart'; class ChooseChest extends StatefulWidget { - const ChooseChest({this.action, Key key}) : super(key: key); - final String action; + const ChooseChest({this.action, Key? key}) : super(key: key); + final String? action; @override State createState() { @@ -22,7 +22,7 @@ class ChooseChest extends StatefulWidget { class _ChooseChestState extends State { TextEditingController tplController = TextEditingController(); CarouselController buttonCarouselController = CarouselController(); - int currentChest = configBox.get('currentChest'); + int? currentChest = configBox.get('currentChest'); @override Widget build(BuildContext context) { @@ -51,7 +51,7 @@ class _ChooseChestState extends State { setState(() {}); }, enableInfiniteScroll: false, - initialPage: currentChest, + initialPage: currentChest!, enlargeCenterPage: true, viewportFraction: 0.6, ), @@ -65,12 +65,12 @@ class _ChooseChestState extends State { height: 150, ) : Image.file( - i.value.imageFile, + i.value.imageFile!, height: 150, ), const SizedBox(height: 30), Text( - i.value.name, + i.value.name!, style: const TextStyle(fontSize: 21), ), ]); @@ -113,7 +113,7 @@ class _ChooseChestState extends State { ), onPressed: () { configBox.put('currentChest', currentChest); - WalletData defaultWallet = + WalletData? defaultWallet = _myWalletProvider.getDefaultWallet(currentChest); _myWalletProvider.rebuildWidget(); Navigator.pushAndRemoveUntil( diff --git a/lib/screens/myWallets/confirm_wallet_storage.dart b/lib/screens/myWallets/confirm_wallet_storage.dart index 0cab27f..5e86205 100644 --- a/lib/screens/myWallets/confirm_wallet_storage.dart +++ b/lib/screens/myWallets/confirm_wallet_storage.dart @@ -11,13 +11,13 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { ConfirmStoreWallet({ - Key validationKey, - @required this.generatedMnemonic, - @required this.generatedWallet, + Key? validationKey, + required this.generatedMnemonic, + required this.generatedWallet, }) : super(key: validationKey); - String generatedMnemonic; - NewWallet generatedWallet; + String? generatedMnemonic; + NewWallet? generatedWallet; final TextEditingController _mnemonicController = TextEditingController(); final TextEditingController _inputRestoreWord = TextEditingController(); @@ -31,9 +31,9 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); - final int _currentChest = _myWalletProvider.getCurrentChest(); + final int? _currentChest = _myWalletProvider.getCurrentChest(); - _mnemonicController.text = generatedMnemonic; + _mnemonicController.text = generatedMnemonic!; return WillPopScope( onWillPop: () { _generateWalletProvider.isAskedWordValid = false; @@ -135,7 +135,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { walletName.text != '') ? () async { _generateWalletProvider.storeHDWChest( - generatedWallet, + generatedWallet!, walletName.text, context); _generateWalletProvider.isAskedWordValid = diff --git a/lib/screens/myWallets/generate_wallets.dart b/lib/screens/myWallets/generate_wallets.dart index bad81b3..74eafeb 100644 --- a/lib/screens/myWallets/generate_wallets.dart +++ b/lib/screens/myWallets/generate_wallets.dart @@ -10,7 +10,7 @@ import 'package:super_tooltip/super_tooltip.dart'; // ignore: must_be_immutable class GenerateFastChestScreen extends StatelessWidget { - SuperTooltip tooltip; + SuperTooltip? tooltip; bool hasError = false; String validPin = 'NO PIN'; String currentText = ""; @@ -19,7 +19,7 @@ class GenerateFastChestScreen extends StatelessWidget { final GlobalKey _toolTipSentence = GlobalKey(); final GlobalKey _toolTipSecret = GlobalKey(); - GenerateFastChestScreen({Key key}) : super(key: key); + GenerateFastChestScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -30,7 +30,7 @@ class GenerateFastChestScreen extends StatelessWidget { if (_generateWalletProvider.mnemonicController.text == '') { _generateWalletProvider.generateWordList(); _generateWalletProvider.mnemonicController.text = - _generateWalletProvider.generatedMnemonic; + _generateWalletProvider.generatedMnemonic!; _generateWalletProvider.pin.text = randomSecretCode(5); } @@ -50,7 +50,7 @@ class GenerateFastChestScreen extends StatelessWidget { onPressed: () { _generateWalletProvider.generateWordList(); _generateWalletProvider.mnemonicController.text = - _generateWalletProvider.generatedMnemonic; + _generateWalletProvider.generatedMnemonic!; }, child: SizedBox( height: 40.0, @@ -118,7 +118,7 @@ class GenerateFastChestScreen extends StatelessWidget { _generateWalletProvider.actualWallet = Dewif() .generateDewif( _generateWalletProvider - .generatedMnemonic, + .generatedMnemonic!, _generateWalletProvider.pin.text, lang: 'french'); await Navigator.push( @@ -189,9 +189,9 @@ class GenerateFastChestScreen extends StatelessWidget { // ignore: must_be_immutable class PrintWallet extends StatelessWidget { - const PrintWallet(this.sentence, {Key key}) : super(key: key); + const PrintWallet(this.sentence, {Key? key}) : super(key: key); - final String sentence; + final String? sentence; @override Widget build(BuildContext context) { diff --git a/lib/screens/myWallets/import_cesium_wallet.dart b/lib/screens/myWallets/import_cesium_wallet.dart index e4c56b2..84a1052 100644 --- a/lib/screens/myWallets/import_cesium_wallet.dart +++ b/lib/screens/myWallets/import_cesium_wallet.dart @@ -11,13 +11,13 @@ import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:provider/provider.dart'; class ImportWalletScreen extends StatelessWidget { - const ImportWalletScreen({Key key}) : super(key: key); + const ImportWalletScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); GlobalKey _toolTipSecret = GlobalKey(); - Timer _debounce; + Timer? _debounce; GenerateWalletsProvider _generateWalletProvider = Provider.of(context, listen: false); WalletOptionsProvider _walletOptions = @@ -54,7 +54,7 @@ class ImportWalletScreen extends StatelessWidget { autofocus: true, onChanged: (text) { if (_debounce?.isActive ?? false) { - _debounce.cancel(); + _debounce!.cancel(); } _debounce = Timer(const Duration(milliseconds: 600), () { walletProvider @@ -92,7 +92,7 @@ class ImportWalletScreen extends StatelessWidget { return TextFormField( onChanged: (text) { if (_debounce?.isActive ?? false) { - _debounce.cancel(); + _debounce!.cancel(); } _debounce = Timer(const Duration(milliseconds: 600), () { walletProvider diff --git a/lib/screens/myWallets/restore_chest.dart b/lib/screens/myWallets/restore_chest.dart index a63a653..2e1f477 100644 --- a/lib/screens/myWallets/restore_chest.dart +++ b/lib/screens/myWallets/restore_chest.dart @@ -10,7 +10,7 @@ import 'package:provider/provider.dart'; // import 'package:provider/provider.dart'; class RestoreChest extends StatelessWidget { - const RestoreChest({Key key}) : super(key: key); + const RestoreChest({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -160,7 +160,7 @@ class RestoreChest extends StatelessWidget { ); } - Future badMnemonicPopup(BuildContext context) async { + Future badMnemonicPopup(BuildContext context) async { return showDialog( context: context, barrierDismissible: true, // user must tap button! diff --git a/lib/screens/myWallets/unlocking_wallet.dart b/lib/screens/myWallets/unlocking_wallet.dart index 9370d25..3e3f71a 100644 --- a/lib/screens/myWallets/unlocking_wallet.dart +++ b/lib/screens/myWallets/unlocking_wallet.dart @@ -15,17 +15,17 @@ import 'package:gecko/globals.dart'; // ignore: must_be_immutable class UnlockingWallet extends StatelessWidget { UnlockingWallet( - {Key keyUnlockWallet, @required this.wallet, @required this.action}) + {Key? keyUnlockWallet, required this.wallet, required this.action}) : super(key: keyUnlockWallet); - WalletData wallet; + WalletData? wallet; String action; // ignore: close_sinks - StreamController errorController; + StreamController? errorController; final formKey = GlobalKey(); - var pinColor = const Color(0xffF9F9F1); + Color? pinColor = const Color(0xffF9F9F1); var walletPin = ''; - String resultPay; + String? resultPay; @override Widget build(BuildContext context) { @@ -35,13 +35,13 @@ class UnlockingWallet extends StatelessWidget { final double statusBarHeight = MediaQuery.of(context).padding.top; int _pinLenght; - ChestData currentChest = chestBox.get(configBox.get('currentChest')); + ChestData currentChest = chestBox.get(configBox.get('currentChest'))!; - if (currentChest.isCesium) { + if (currentChest.isCesium!) { _pinLenght = _walletOptions.getPinLenght(currentChest.dewif); wallet = WalletData(derivation: -1, chest: currentChest.key); } else { - _pinLenght = _walletOptions.getPinLenght(wallet.number); + _pinLenght = _walletOptions.getPinLenght(wallet!.number); } errorController = StreamController(); @@ -77,14 +77,14 @@ class UnlockingWallet extends StatelessWidget { width: isTall ? 130 : 100, ) : Image.file( - currentChest.imageFile, + currentChest.imageFile!, width: isTall ? 130 : 100, ), const SizedBox(width: 5), SizedBox( width: 250, child: Text( - currentChest.name, + currentChest.name!, textAlign: TextAlign.center, style: const TextStyle( fontSize: 25, @@ -165,7 +165,7 @@ class UnlockingWallet extends StatelessWidget { obscuringCharacter: '*', animationType: AnimationType.fade, validator: (v) { - if (v.length < _pinLenght) { + if (v!.length < _pinLenght) { return "Votre code PIN fait $_pinLenght caractères"; } else { return null; @@ -198,8 +198,8 @@ class UnlockingWallet extends StatelessWidget { onCompleted: (_pin) async { log.d("Completed"); _myWalletProvider.pinCode = _pin; - final String resultWallet = _walletOptions.readLocalWallet( - context, wallet, _pin.toUpperCase(), _pinLenght); + final String? resultWallet = _walletOptions.readLocalWallet( + context, wallet!, _pin.toUpperCase(), _pinLenght); // _myWalletProvider.pinCode = _pin.toUpperCase(); _myWalletProvider.pinLenght = _pinLenght; @@ -213,7 +213,7 @@ class UnlockingWallet extends StatelessWidget { pinColor = Colors.green[400]; // await Future.delayed(Duration(milliseconds: 50)); if (action == "mywallets") { - currentChest.isCesium + currentChest.isCesium! ? Navigator.push( context, MaterialPageRoute(builder: (context) { @@ -222,7 +222,7 @@ class UnlockingWallet extends StatelessWidget { }), ) : Navigator.pushNamed( - formKey.currentContext, '/mywallets'); + formKey.currentContext!, '/mywallets'); } else if (action == "pay") { resultPay = await _historyProvider.pay(context, _pin.toUpperCase()); @@ -239,7 +239,7 @@ class UnlockingWallet extends StatelessWidget { ); } - Future _paymentsResult(context) { + Future _paymentsResult(context) { if (resultPay != "success") log.i(resultPay); return showDialog( context: context, diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index 62650e2..9585b44 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io'; import 'dart:ui'; import 'package:flutter/material.dart'; @@ -15,7 +16,7 @@ import 'package:qr_flutter/qr_flutter.dart'; // ignore: must_be_immutable class WalletOptions extends StatelessWidget { - WalletOptions({Key keyMyWallets, @required this.wallet}) + WalletOptions({Key? keyMyWallets, required this.wallet}) : super(key: keyMyWallets); WalletData wallet; int _nbrLinesName = 1; @@ -33,13 +34,12 @@ class WalletOptions extends StatelessWidget { log.d(_walletOptions.pubkey.text); - final int _currentChest = _myWalletProvider.getCurrentChest(); + final int? _currentChest = _myWalletProvider.getCurrentChest(); final String shortPubkey = _walletOptions.getShortPubkey(_walletOptions.pubkey.text); - if (_walletOptions.nameController.text == null || - _isNewNameValid == false) { - _walletOptions.nameController.text = wallet.name; + if (_isNewNameValid == false) { + _walletOptions.nameController.text = wallet.name!; } else { wallet.name = _walletOptions.nameController.text; } @@ -52,11 +52,11 @@ class WalletOptions extends StatelessWidget { } WalletData defaultWallet = - _myWalletProvider.getDefaultWallet(_currentChest); + _myWalletProvider.getDefaultWallet(_currentChest)!; _walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]); - int currentChest = _myWalletProvider.getCurrentChest(); + int? currentChest = _myWalletProvider.getCurrentChest(); log.d("Wallet options: $currentChest:${wallet.number}"); @@ -116,10 +116,8 @@ class WalletOptions extends StatelessWidget { const SizedBox(width: 25), InkWell( onTap: () async { - File newAvatar = await walletProvider.changeAvatar(); - if (newAvatar != null) { + File newAvatar = await (walletProvider.changeAvatar() as FutureOr); wallet.imageFile = newAvatar; - } walletProvider.reloadBuild(); }, child: wallet.imageFile == null @@ -128,16 +126,14 @@ class WalletOptions extends StatelessWidget { width: 110, ) : Image.file( - wallet.imageFile, + wallet.imageFile!, width: 110, ), ), InkWell( onTap: () async { - File newAvatar = await walletProvider.changeAvatar(); - if (newAvatar != null) { + File newAvatar = await (walletProvider.changeAvatar() as FutureOr); wallet.imageFile = newAvatar; - } walletProvider.reloadBuild(); }, child: Column(children: [ @@ -183,7 +179,7 @@ class WalletOptions extends StatelessWidget { // pollInterval: Duration(seconds: 1), ), builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { + {VoidCallback? refetch, FetchMore? fetchMore}) { if (result.hasException) { return Text(result.exception.toString()); } @@ -194,15 +190,15 @@ class WalletOptions extends StatelessWidget { // List repositories = result.data['viewer']['repositories']['nodes']; String wBalanceUD; - if (result.data['balance'] == null) { + if (result.data!['balance'] == null) { wBalanceUD = '0.0'; } else if (result.hasException) { wBalanceUD = '?'; } else { int wBalanceG1 = - result.data['balance']['amount']; + result.data!['balance']['amount']; int currentUD = - result.data['currentUd']['amount']; + result.data!['currentUd']['amount']; double wBalanceUDBrut = wBalanceG1 / currentUD; // .toString(); wBalanceUD = double.parse( @@ -366,7 +362,7 @@ class WalletOptions extends StatelessWidget { width: 110, ) : Image.file( - wallet.imageFile, + wallet.imageFile!, width: 110, )); }), @@ -393,7 +389,7 @@ class WalletOptions extends StatelessWidget { onTap: !walletProvider.isDefaultWallet ? () { defaultWallet = wallet; - chestBox.get(currentChest).defaultWallet = + chestBox.get(currentChest)!.defaultWallet = wallet.number; _myWalletProvider.readAllWallets(_currentChest); _myWalletProvider.rebuildWidget(); @@ -432,7 +428,7 @@ class WalletOptions extends StatelessWidget { ? () async { await walletProvider.deleteWallet( context, wallet); - WidgetsBinding.instance.addPostFrameCallback((_) { + WidgetsBinding.instance!.addPostFrameCallback((_) { _myWalletProvider.listWallets = _myWalletProvider .readAllWallets(_currentChest); diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index 74025c8..f3057c9 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -13,7 +13,7 @@ import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; class WalletsHome extends StatelessWidget { - const WalletsHome({Key key}) : super(key: key); + const WalletsHome({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -21,8 +21,8 @@ class WalletsHome extends StatelessWidget { MyWalletsProvider myWalletProvider = Provider.of(context); - final int _currentChestNumber = myWalletProvider.getCurrentChest(); - final ChestData _currentChest = chestBox.get(_currentChestNumber); + final int? _currentChestNumber = myWalletProvider.getCurrentChest(); + final ChestData _currentChest = chestBox.get(_currentChestNumber)!; myWalletProvider.listWallets = myWalletProvider.readAllWallets(_currentChestNumber); @@ -45,7 +45,7 @@ class WalletsHome extends StatelessWidget { ModalRoute.withName('/'), ); }), - title: Text(_currentChest.name, + title: Text(_currentChest.name!, key: const Key('myWallets'), style: TextStyle(color: Colors.grey[850])), backgroundColor: const Color(0xffFFD58D), @@ -146,7 +146,7 @@ class WalletsHome extends StatelessWidget { } List _listWallets = _myWalletProvider.listWallets; - WalletData defaultWallet = + WalletData? defaultWallet = _myWalletProvider.getDefaultWallet(configBox.get('currentChest')); return CustomScrollView(slivers: [ @@ -158,7 +158,7 @@ class WalletsHome extends StatelessWidget { crossAxisSpacing: 0, mainAxisSpacing: 0, children: [ - for (WalletData _repository in _listWallets) + for (WalletData _repository in _listWallets as Iterable) Padding( padding: const EdgeInsets.all(16), child: GestureDetector( @@ -196,7 +196,7 @@ class WalletsHome extends StatelessWidget { gradient: RadialGradient( radius: 0.6, colors: [ - Colors.green[400], + Colors.green[400]!, const Color(0xFFE7E7A6), ], )), @@ -210,7 +210,7 @@ class WalletsHome extends StatelessWidget { scale: 0.5, ) : Image.file( - _repository.imageFile, + _repository.imageFile!, alignment: Alignment.bottomCenter, scale: 0.5, ), @@ -222,7 +222,7 @@ class WalletsHome extends StatelessWidget { bottom: Radius.circular(12))), // contentPadding: const EdgeInsets.only(left: 7.0), tileColor: - _repository.id()[1] == defaultWallet.id()[1] + _repository.id()[1] == defaultWallet!.id()[1] ? orangeC : const Color(0xffFFD58D), // leading: Text('IMAGE'), @@ -234,7 +234,7 @@ class WalletsHome extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 5), child: Text( - _repository.name, + _repository.name!, textAlign: TextAlign.center, style: TextStyle( fontSize: 17.0, @@ -287,7 +287,7 @@ class WalletsHome extends StatelessWidget { // pollInterval: Duration(seconds: 1), ), builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { + {VoidCallback? refetch, FetchMore? fetchMore}) { if (result.hasException) { return Text(result.exception.toString()); } @@ -296,11 +296,11 @@ class WalletsHome extends StatelessWidget { return const Text('Loading'); } String wBalanceUD; - if (result.data['balance'] == null) { + if (result.data!['balance'] == null) { wBalanceUD = '0.0'; } else { - int wBalanceG1 = result.data['balance']['amount']; - int currentUD = result.data['currentUd']['amount']; + int wBalanceG1 = result.data!['balance']['amount']; + int currentUD = result.data!['currentUd']['amount']; double wBalanceUDBrut = wBalanceG1 / currentUD; // .toString(); wBalanceUD = double.parse((wBalanceUDBrut).toStringAsFixed(2)).toString(); @@ -314,7 +314,7 @@ class WalletsHome extends StatelessWidget { Provider.of(context); String _newDerivationName = - 'Portefeuille ${_myWalletProvider.listWallets.last.number + 2}'; + 'Portefeuille ${_myWalletProvider.listWallets.last.number! + 2}'; return Padding( padding: const EdgeInsets.all(16), child: ClipRRect( @@ -371,10 +371,10 @@ class ClipOvalShadow extends StatelessWidget { final Widget child; const ClipOvalShadow({ - Key key, - @required this.shadow, - @required this.clipper, - @required this.child, + Key? key, + required this.shadow, + required this.clipper, + required this.child, }) : super(key: key); @override @@ -393,7 +393,7 @@ class _ClipOvalShadowPainter extends CustomPainter { final Shadow shadow; final CustomClipper clipper; - _ClipOvalShadowPainter({@required this.shadow, @required this.clipper}); + _ClipOvalShadowPainter({required this.shadow, required this.clipper}); @override void paint(Canvas canvas, Size size) { diff --git a/lib/screens/onBoarding/0_no_keychain_found.dart b/lib/screens/onBoarding/0_no_keychain_found.dart index 685bc27..12fe699 100644 --- a/lib/screens/onBoarding/0_no_keychain_found.dart +++ b/lib/screens/onBoarding/0_no_keychain_found.dart @@ -8,7 +8,7 @@ import 'package:gecko/screens/myWallets/import_cesium_wallet.dart'; import 'package:gecko/screens/onBoarding/1.dart'; class NoKeyChainScreen extends StatelessWidget { - const NoKeyChainScreen({Key key}) : super(key: key); + const NoKeyChainScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/1.dart b/lib/screens/onBoarding/1.dart index 6cbd97c..9bd7cc5 100644 --- a/lib/screens/onBoarding/1.dart +++ b/lib/screens/onBoarding/1.dart @@ -13,7 +13,7 @@ class OnboardingStepOne extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 1; - OnboardingStepOne({Key key}) : super(key: key); + OnboardingStepOne({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/10.dart b/lib/screens/onBoarding/10.dart index e90f72d..8392644 100644 --- a/lib/screens/onBoarding/10.dart +++ b/lib/screens/onBoarding/10.dart @@ -11,7 +11,7 @@ class OnboardingStepTwelve extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 9; - OnboardingStepTwelve({Key key}) : super(key: key); + OnboardingStepTwelve({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/11.dart b/lib/screens/onBoarding/11.dart index ecc5f4b..9c670eb 100644 --- a/lib/screens/onBoarding/11.dart +++ b/lib/screens/onBoarding/11.dart @@ -11,7 +11,7 @@ import 'package:provider/provider.dart'; class OnboardingStepThirteen extends StatelessWidget { final int progress = 10; - const OnboardingStepThirteen({Key key}) : super(key: key); + const OnboardingStepThirteen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index 3e6b7f6..05345e2 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -16,12 +16,12 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class OnboardingStepFourteen extends StatelessWidget { OnboardingStepFourteen({ - Key validationKey, + Key? validationKey, }) : super(key: validationKey); final int progress = 11; final formKey = GlobalKey(); - var pinColor = const Color(0xFFA4B600); + Color? pinColor = const Color(0xFFA4B600); bool hasError = false; @override @@ -62,7 +62,7 @@ class OnboardingStepFourteen extends StatelessWidget { GenerateWalletsProvider _generateWalletProvider = Provider.of(context); - final int _currentChest = _myWalletProvider.getCurrentChest(); + final int? _currentChest = _myWalletProvider.getCurrentChest(); return Form( key: formKey, @@ -81,7 +81,7 @@ class OnboardingStepFourteen extends StatelessWidget { obscuringCharacter: '*', animationType: AnimationType.fade, validator: (v) { - if (v.length < _pinLenght) { + if (v!.length < _pinLenght) { return "Votre code PIN fait $_pinLenght caractères"; } else { return null; @@ -118,7 +118,7 @@ class OnboardingStepFourteen extends StatelessWidget { if (_pin.toUpperCase() == _generateWalletProvider.pin.text) { pinColor = Colors.green[500]; NewWallet generatedWallet = Dewif().generateDewif( - _generateWalletProvider.generatedMnemonic, + _generateWalletProvider.generatedMnemonic!, _generateWalletProvider.pin.text, lang: 'french'); _generateWalletProvider.storeHDWChest( diff --git a/lib/screens/onBoarding/13_congratulations.dart b/lib/screens/onBoarding/13_congratulations.dart index ae2ec6f..4428bdd 100644 --- a/lib/screens/onBoarding/13_congratulations.dart +++ b/lib/screens/onBoarding/13_congratulations.dart @@ -10,7 +10,7 @@ class OnboardingStepFiveteen extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 12; - OnboardingStepFiveteen({Key key}) : super(key: key); + OnboardingStepFiveteen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/2.dart b/lib/screens/onBoarding/2.dart index 19e2cbf..04c3495 100644 --- a/lib/screens/onBoarding/2.dart +++ b/lib/screens/onBoarding/2.dart @@ -14,7 +14,7 @@ class OnboardingStepTwo extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 2; - OnboardingStepTwo({Key key}) : super(key: key); + OnboardingStepTwo({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/3.dart b/lib/screens/onBoarding/3.dart index 815741b..41b9ec3 100644 --- a/lib/screens/onBoarding/3.dart +++ b/lib/screens/onBoarding/3.dart @@ -11,7 +11,7 @@ class OnboardingStepFor extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 3; - OnboardingStepFor({Key key}) : super(key: key); + OnboardingStepFor({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/4.dart b/lib/screens/onBoarding/4.dart index bd0317b..a064231 100644 --- a/lib/screens/onBoarding/4.dart +++ b/lib/screens/onBoarding/4.dart @@ -11,7 +11,7 @@ class OnboardingStepFive extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 4; - OnboardingStepFive({Key key}) : super(key: key); + OnboardingStepFive({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/5.dart b/lib/screens/onBoarding/5.dart index dbe5ee7..7ca67f6 100644 --- a/lib/screens/onBoarding/5.dart +++ b/lib/screens/onBoarding/5.dart @@ -11,7 +11,7 @@ class OnboardingStepSeven extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 5; - OnboardingStepSeven({Key key}) : super(key: key); + OnboardingStepSeven({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/6.dart b/lib/screens/onBoarding/6.dart index 741947d..0c677a5 100644 --- a/lib/screens/onBoarding/6.dart +++ b/lib/screens/onBoarding/6.dart @@ -12,7 +12,7 @@ class OnboardingStepEight extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 6; - OnboardingStepEight({Key key}) : super(key: key); + OnboardingStepEight({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/7.dart b/lib/screens/onBoarding/7.dart index b49e759..cda32c8 100644 --- a/lib/screens/onBoarding/7.dart +++ b/lib/screens/onBoarding/7.dart @@ -14,7 +14,7 @@ class OnboardingStepNine extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 6; - OnboardingStepNine({Key key}) : super(key: key); + OnboardingStepNine({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -176,9 +176,9 @@ Widget arrayCell(dataWord) { // ignore: must_be_immutable class PrintWallet extends StatelessWidget { - const PrintWallet(this.sentence, {Key key}) : super(key: key); + const PrintWallet(this.sentence, {Key? key}) : super(key: key); - final String sentence; + final String? sentence; @override Widget build(BuildContext context) { diff --git a/lib/screens/onBoarding/8.dart b/lib/screens/onBoarding/8.dart index 06de8dd..cca1310 100644 --- a/lib/screens/onBoarding/8.dart +++ b/lib/screens/onBoarding/8.dart @@ -10,11 +10,11 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class OnboardingStepTen extends StatelessWidget { OnboardingStepTen({ - Key validationKey, - @required this.generatedMnemonic, + Key? validationKey, + required this.generatedMnemonic, }) : super(key: validationKey); - String generatedMnemonic; + String? generatedMnemonic; TextEditingController tplController = TextEditingController(); TextEditingController wordController = TextEditingController(); final TextEditingController _mnemonicController = TextEditingController(); @@ -27,7 +27,7 @@ class OnboardingStepTen extends StatelessWidget { GenerateWalletsProvider _generateWalletProvider = Provider.of(context); CommonElements common = CommonElements(); - _mnemonicController.text = generatedMnemonic; + _mnemonicController.text = generatedMnemonic!; return WillPopScope( onWillPop: () { @@ -70,7 +70,7 @@ class OnboardingStepTen extends StatelessWidget { decoration: BoxDecoration( borderRadius: BorderRadius.circular(7), border: Border.all( - color: Colors.grey[600], + color: Colors.grey[600]!, width: 3, )), width: 430, diff --git a/lib/screens/onBoarding/9.dart b/lib/screens/onBoarding/9.dart index 35b285e..bf0d938 100644 --- a/lib/screens/onBoarding/9.dart +++ b/lib/screens/onBoarding/9.dart @@ -11,7 +11,7 @@ class OnboardingStepEleven extends StatelessWidget { TextEditingController tplController = TextEditingController(); final int progress = 8; - OnboardingStepEleven({Key key}) : super(key: key); + OnboardingStepEleven({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/search.dart b/lib/screens/search.dart index 39e4337..5357a24 100644 --- a/lib/screens/search.dart +++ b/lib/screens/search.dart @@ -8,7 +8,7 @@ import 'package:provider/provider.dart'; // import 'package:provider/provider.dart'; class SearchScreen extends StatelessWidget { - const SearchScreen({Key key}) : super(key: key); + const SearchScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -59,11 +59,11 @@ class SearchScreen extends StatelessWidget { ), border: OutlineInputBorder( borderSide: - BorderSide(color: Colors.grey[500], width: 2), + BorderSide(color: Colors.grey[500]!, width: 2), borderRadius: BorderRadius.circular(8)), focusedBorder: OutlineInputBorder( borderSide: - BorderSide(color: Colors.grey[500], width: 2.5), + BorderSide(color: Colors.grey[500]!, width: 2.5), borderRadius: BorderRadius.circular(8), ), contentPadding: const EdgeInsets.all(20), diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart index bcaa6c0..fabf899 100644 --- a/lib/screens/search_result.dart +++ b/lib/screens/search_result.dart @@ -9,7 +9,7 @@ import 'package:gecko/screens/wallet_view.dart'; import 'package:provider/provider.dart'; class SearchResultScreen extends StatelessWidget { - const SearchResultScreen({Key key}) : super(key: key); + const SearchResultScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -64,11 +64,11 @@ class SearchResultScreen extends StatelessWidget { const SizedBox(height: 20), FutureBuilder( future: _searchProvider.searchBlockchain(), - builder: (context, snapshot) { + builder: (context, AsyncSnapshot snapshot) { if (snapshot.connectionState == ConnectionState.done) { return Expanded( child: ListView(children: [ - for (G1WalletsList g1Wallet in snapshot.data) + for (G1WalletsList g1Wallet in snapshot.data ?? []) Padding( padding: const EdgeInsets.symmetric(horizontal: 5), child: ListTile( @@ -81,13 +81,13 @@ class SearchResultScreen extends StatelessWidget { null ? ClipOval( child: g1WalletsBox - .get(g1Wallet.pubkey) + .get(g1Wallet.pubkey)! .avatar) : FutureBuilder( future: _cesiumPlusProvider.getAvatar( g1Wallet.pubkey, _avatarSize), builder: (BuildContext context, - AsyncSnapshot _avatar) { + AsyncSnapshot _avatar) { if (_avatar.connectionState != ConnectionState.done || _avatar.hasError) { @@ -108,12 +108,12 @@ class SearchResultScreen extends StatelessWidget { } if (_avatar.hasData) { g1WalletsBox - .get(g1Wallet.pubkey) + .get(g1Wallet.pubkey)! .avatar = _avatar.data; return ClipOval(child: _avatar.data); } else { g1WalletsBox - .get(g1Wallet.pubkey) + .get(g1Wallet.pubkey)! .avatar = _cesiumPlusProvider .defaultAvatar(_avatarSize); @@ -124,7 +124,7 @@ class SearchResultScreen extends StatelessWidget { title: Row(children: [ Text( _walletsProfilesClass - .getShortPubkey(g1Wallet.pubkey), + .getShortPubkey(g1Wallet.pubkey!), style: const TextStyle( fontSize: 18, fontFamily: 'Monospace', @@ -132,7 +132,7 @@ class SearchResultScreen extends StatelessWidget { textAlign: TextAlign.center), ]), subtitle: Row(children: [ - Text(g1Wallet?.id?.username ?? '', + Text(g1Wallet.id?.username ?? '', style: const TextStyle( fontSize: 18, fontWeight: FontWeight.w500), diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 9b6699c..8e69cdb 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -9,20 +9,20 @@ import 'package:gecko/globals.dart'; // ignore: must_be_immutable class SettingsScreen extends StatelessWidget { - String generatedMnemonic; + String? generatedMnemonic; bool walletIsGenerated = false; - NewWallet actualWallet; - String newWalletName; + NewWallet? actualWallet; + String? newWalletName; bool hasError = false; String validPin = 'NO PIN'; String currentText = ""; var pinColor = Colors.grey[300]; - Directory appPath; + Directory? appPath; final MyWalletsProvider _myWallets = MyWalletsProvider(); - SettingsScreen({Key key}) : super(key: key); + SettingsScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/template_screen.dart b/lib/screens/template_screen.dart index e8858c7..faa92ec 100644 --- a/lib/screens/template_screen.dart +++ b/lib/screens/template_screen.dart @@ -8,7 +8,7 @@ import 'package:flutter/material.dart'; class TemplateScreen extends StatelessWidget { TextEditingController tplController = TextEditingController(); - TemplateScreen({Key key}) : super(key: key); + TemplateScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart index e474236..f272948 100644 --- a/lib/screens/wallet_view.dart +++ b/lib/screens/wallet_view.dart @@ -15,11 +15,11 @@ import 'package:provider/provider.dart'; class WalletViewScreen extends StatelessWidget { const WalletViewScreen( - {@required this.pubkey, this.username, this.avatar, Key key}) + {required this.pubkey, this.username, this.avatar, Key? key}) : super(key: key); - final String pubkey; - final String username; - final Image avatar; + final String? pubkey; + final String? username; + final Image? avatar; final double buttonSize = 100; final double buttonFontSize = 18; @@ -186,7 +186,7 @@ class WalletViewScreen extends StatelessWidget { // Provider.of(context); const double shapeSize = 20; MyWalletsProvider _myWalletProvider = MyWalletsProvider(); - WalletData defaultWallet = + WalletData? defaultWallet = _myWalletProvider.getDefaultWallet(configBox.get('currentChest')); showModalBottomSheet( @@ -257,7 +257,7 @@ class WalletViewScreen extends StatelessWidget { // borderRadius: BorderRadius.circular(8)), focusedBorder: OutlineInputBorder( borderSide: BorderSide( - color: Colors.grey[500], width: 2), + color: Colors.grey[500]!, width: 2), borderRadius: BorderRadius.circular(8), ), contentPadding: const EdgeInsets.all(20), @@ -342,7 +342,7 @@ class WalletViewScreen extends StatelessWidget { _historyProvider.snackCopyKey(context); }, child: Text( - _historyProvider.getShortPubkey(pubkey), + _historyProvider.getShortPubkey(pubkey!), style: const TextStyle( fontSize: 30, fontWeight: FontWeight.w800, @@ -361,20 +361,20 @@ class WalletViewScreen extends StatelessWidget { }, ), builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { + {VoidCallback? refetch, FetchMore? fetchMore}) { if (result.isLoading || result.hasException) { return const Text('...'); - } else if (result.data['idty'] == null || - result.data['idty']['username'] == null) { + } else if (result.data!['idty'] == null || + result.data!['idty']['username'] == null) { g1WalletsBox.get(pubkey)?.username = ''; return const Text(''); } else { g1WalletsBox.get(pubkey)?.username = - result?.data['idty']['username'] ?? ''; + result.data!['idty']['username'] ?? ''; return SizedBox( width: 230, child: Text( - result?.data['idty']['username'] ?? '', + result.data!['idty']['username'] ?? '', style: const TextStyle( fontSize: 27, color: Color(0xff814C00), @@ -389,7 +389,7 @@ class WalletViewScreen extends StatelessWidget { SizedBox( width: 230, child: Text( - g1WalletsBox.get(pubkey)?.username, + g1WalletsBox.get(pubkey)?.username ?? '', style: const TextStyle( fontSize: 27, color: Color(0xff814C00), @@ -400,7 +400,7 @@ class WalletViewScreen extends StatelessWidget { SizedBox( width: 230, child: Text( - username, + username!, style: const TextStyle( fontSize: 27, color: Color(0xff814C00), @@ -415,7 +415,7 @@ class WalletViewScreen extends StatelessWidget { return SizedBox( width: 230, child: Text( - snapshot.data ?? '-', + snapshot.data.toString(), style: const TextStyle( fontSize: 18, color: Colors.black), ), @@ -429,7 +429,7 @@ class WalletViewScreen extends StatelessWidget { FutureBuilder( future: _cesiumPlusProvider.getAvatar(pubkey, _avatarSize), builder: - (BuildContext context, AsyncSnapshot _avatar) { + (BuildContext context, AsyncSnapshot _avatar) { if (_avatar.connectionState != ConnectionState.done) { return Stack(children: [ ClipOval( @@ -461,7 +461,7 @@ class WalletViewScreen extends StatelessWidget { }, child: ClipOval( child: Image( - image: _avatar.data.image, + image: _avatar.data!.image, height: _avatarSize, fit: BoxFit.cover, ), @@ -485,7 +485,7 @@ class WalletViewScreen extends StatelessWidget { }, child: ClipOval( child: Image( - image: avatar.image, + image: avatar!.image, height: _avatarSize, fit: BoxFit.cover, ), diff --git a/pubspec.yaml b/pubspec.yaml index 1a8101d..a240afe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 0.0.4+4 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: '>=2.12.0 <3.0.0' dependencies: flutter: diff --git a/test_driver/app_test.dart b/test_driver/app_test.dart index 0efe479..029b13a 100644 --- a/test_driver/app_test.dart +++ b/test_driver/app_test.dart @@ -15,19 +15,19 @@ void main() { final manageWalletsFinder = find.byValueKey('manageWallets'); // final buttonFinder = find.byValueKey('increment'); - FlutterDriver driver; - String pinCode; + FlutterDriver? driver; + String? pinCode; // Connect to the Flutter driver before running any tests. setUpAll(() async { driver = await FlutterDriver.connect(); - await driver.waitUntilFirstFrameRasterized(); + await driver!.waitUntilFirstFrameRasterized(); }); // Close the connection to the driver after the tests have completed. tearDownAll(() async { if (driver != null) { - driver.close(); + driver!.close(); } }); @@ -35,12 +35,12 @@ void main() { // Function to tap the widget by key Future tapOn(String key) async { - await driver.tap(find.byValueKey(key)); + await driver!.tap(find.byValueKey(key)); } // Easy get text Future getText(String text) async { - return await driver.getText(find.byValueKey( + return await driver!.getText(find.byValueKey( text, )); } @@ -63,7 +63,7 @@ void main() { Future isPresent(SerializableFinder byValueKey, {Duration timeout = const Duration(seconds: 1)}) async { try { - await driver.waitFor(byValueKey, timeout: timeout); + await driver!.waitFor(byValueKey, timeout: timeout); return true; } catch (exception) { return false; @@ -97,7 +97,7 @@ void main() { } // Fast creation of new Keychain - Future createNewKeychain(String name) async { + Future createNewKeychain(String name) async { await tapOn('drawerMenu'); await sleep(300); await tapOn('parameters'); @@ -110,9 +110,9 @@ void main() { pinCode = await getText('generatedPin'); await tapOn('storeKeychain'); await sleep(100); - await driver.enterText('triche'); + await driver!.enterText('triche'); await tapOn('walletName'); - await driver.enterText(name); + await driver!.enterText(name); await sleep(50); await tapOn('confirmStorage'); await sleep(300); @@ -124,7 +124,7 @@ void main() { test('OnBoarding - Open wallets management', ( {timeout = Timeout.none}) async { // await driver.runUnsynchronized(() async { // Needed if we want to manage async drivers - await driver.tap(manageWalletsFinder); + await driver!.tap(manageWalletsFinder); // If a wallet exist, go to delete theme all if (!await isPresent(find.byValueKey('goStep1'))) { @@ -132,7 +132,7 @@ void main() { await deleteAllWallets(); - await driver.tap(manageWalletsFinder); + await driver!.tap(manageWalletsFinder); } // Get the SerializableFinder for text widget with key 'textOnboarding' @@ -143,7 +143,7 @@ void main() { await sleep(100); // Verify onboarding is starting, with text - expect(await driver.getText(textOnboarding), + expect(await driver!.getText(textOnboarding), "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."); }); @@ -157,7 +157,7 @@ void main() { await tapOn('goStep6'); expect( - await driver.getText(find.byValueKey( + await driver!.getText(find.byValueKey( 'step6', )), "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."); @@ -189,10 +189,10 @@ void main() { )]; // Enter the expected word - await driver.enterText(goodWord); + await driver!.enterText(goodWord); // Check if word is valid - await driver.waitFor(find.text("C'est le bon mot !")); + await driver!.waitFor(find.text("C'est le bon mot !")); // Continue onboarding workflow await tapOn('goStep9'); @@ -245,7 +245,7 @@ void main() { // await tapOn('formKey2'); //Enter good secret code - await driver.enterText(pinCode); + await driver!.enterText(pinCode!); expect(await getText('step13'), "Top !\n\nVotre trousseau de clef et votre portefeuille ont été créés avec un immense succès.\n\nFélicitations !"); @@ -259,29 +259,29 @@ void main() { await sleep(300); // Go to first derivation and rename it - await driver.tap(find.text('Mon portefeuille courant')); + await driver!.tap(find.text('Mon portefeuille courant')); await sleep(300); await tapOn('renameWallet'); await sleep(100); await tapOn('walletName'); await sleep(100); - await driver.enterText('Renommage wallet 1'); + await driver!.enterText('Renommage wallet 1'); await sleep(300); await tapOn('renameWallet'); await sleep(400); - await driver.waitFor(find.text('Renommage wallet 1'), timeout: timeout); + await driver!.waitFor(find.text('Renommage wallet 1'), timeout: timeout); // expect(await getText('walletName'), "Renommage wallet 1"); await goBack(); }); test('My wallets - Create a derivations, open thems, tap all buttons', ( {timeout = const Duration(seconds: 2)}) async { - await driver.waitFor(find.text('Renommage wallet 1'), timeout: timeout); + await driver!.waitFor(find.text('Renommage wallet 1'), timeout: timeout); // Add a second derivation await createDerivation(); // Go to second derivation options - await driver.tap(find.text('Portefeuille 2')); + await driver!.tap(find.text('Portefeuille 2')); await sleep(100); // Test options @@ -297,7 +297,7 @@ void main() { await tapOn('setDefaultWallet'); await sleep(50); await tapOn('copyPubkey'); - await driver.waitFor(find + await driver!.waitFor(find .text('Cette clé publique a été copié dans votre presse-papier.')); await goBack(); @@ -309,7 +309,7 @@ void main() { await sleep(50); // Go to third derivation options - await driver.tap(find.text('Portefeuille 3')); + await driver!.tap(find.text('Portefeuille 3')); await sleep(100); await tapOn('displayBalance'); @@ -320,7 +320,7 @@ void main() { test('My wallets - Extra tests', ( {timeout = const Duration(seconds: 2)}) async { // Add derivation 5,6 and 7 - await driver.waitFor(find.text('Portefeuille 4'), timeout: timeout); + await driver!.waitFor(find.text('Portefeuille 4'), timeout: timeout); await createDerivation(); await createDerivation(); await createDerivation(); @@ -331,27 +331,27 @@ void main() { await tapOn('manageWallets'); await sleep(200); //Enter secret code - await driver.enterText(pinCode); + await driver!.enterText(pinCode!); await sleep(200); // Go to derivation 6 and delete it - await driver.tap(find.text('Portefeuille 6')); + await driver!.tap(find.text('Portefeuille 6')); await sleep(100); await deleteWallet(true); // Go to 2nd derivation and check if it's de default - await driver.tap(find.text('Portefeuille 2')); - await driver.waitFor(find.text('Ce portefeuille est celui par defaut')); + await driver!.tap(find.text('Portefeuille 2')); + await driver!.waitFor(find.text('Ce portefeuille est celui par defaut')); await tapOn('setDefaultWallet'); await sleep(100); - await driver.waitFor(find.text('Ce portefeuille est celui par defaut')); + await driver!.waitFor(find.text('Ce portefeuille est celui par defaut')); await sleep(300); // Display history, copy pubkey, go back and rename wallet name await tapOn('displayHistory'); await sleep(400); await tapOn('copyPubkey'); - await driver.waitFor(find + await driver!.waitFor(find .text('Cette clé publique a été copié dans votre presse-papier.')); await sleep(800); await goBack(); @@ -360,70 +360,70 @@ void main() { await sleep(100); await tapOn('walletName'); await sleep(100); - await driver.enterText('Renommage wallet 2'); + await driver!.enterText('Renommage wallet 2'); await sleep(300); await tapOn('renameWallet'); await sleep(400); await goBack(); - await driver.waitFor(find.text('Renommage wallet 2')); - await driver.scrollIntoView(find.text('+')); + await driver!.waitFor(find.text('Renommage wallet 2')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await createDerivation(); - await driver.scrollIntoView(find.text('+')); + await driver!.scrollIntoView(find.text('+')); await createDerivation(); await sleep(400); // Scroll the wallet screen until Derivation 20 and open it - await driver.scrollUntilVisible( + await driver!.scrollUntilVisible( find.byValueKey('listWallets'), find.text('Portefeuille 20'), dyScroll: -300.0, ); - await driver.waitFor(find.text('Portefeuille 20')); + await driver!.waitFor(find.text('Portefeuille 20')); await sleep(400); - await driver.tap(find.text('Portefeuille 20')); + await driver!.tap(find.text('Portefeuille 20')); await tapOn('copyPubkey'); }); test('Search - Search Pi profile, navigate in history transactions', ( {timeout = const Duration(seconds: 2)}) async { - await driver.waitFor(find.text('Portefeuille 20'), timeout: timeout); + await driver!.waitFor(find.text('Portefeuille 20'), timeout: timeout); await goBack(); await goBack(); await sleep(200); await tapOn('searchIcon'); await sleep(400); - await driver.enterText('D2meevcAHFTS2gQMvmRW5Hzi25jDdikk4nC4u1FkwRaU'); + await driver!.enterText('D2meevcAHFTS2gQMvmRW5Hzi25jDdikk4nC4u1FkwRaU'); await sleep(100); await tapOn('copyPubkey'); await sleep(500); await tapOn('switchPayHistory'); await sleep(1200); // await driver.scrollIntoView(find.byValueKey('listTransactions')); - await driver.scrollUntilVisible( + await driver!.scrollUntilVisible( find.byValueKey('listTransactions'), find.byValueKey('transaction35'), dyScroll: -600.0, ); await sleep(100); await tapOn('transaction33'); - await driver.waitFor(find.text('Commentaire:')); + await driver!.waitFor(find.text('Commentaire:')); // Want to paste pubkey copied, but doesn't work actualy with flutter driver: https://github.com/flutter/flutter/issues/47448 // final ClipboardData pubkeyCopied = @@ -435,19 +435,19 @@ void main() { test('Wallet generation - Fast wallets generations', ( {timeout = const Duration(seconds: 2)}) async { - await driver.waitFor(find.text('Commentaire:'), timeout: timeout); + await driver!.waitFor(find.text('Commentaire:'), timeout: timeout); await goBack(); await goBack(); await deleteAllWallets(); await sleep(100); - final String pincode = await createNewKeychain('Fast wallet'); + final String pincode = await (createNewKeychain('Fast wallet') as FutureOr); await sleep(200); - await driver.enterText(pincode); + await driver!.enterText(pincode); await sleep(100); await createDerivation(); await sleep(100); - await driver.tap(find.text('Fast wallet')); - await driver.waitFor(find.text('Fast wallet')); + await driver!.tap(find.text('Fast wallet')); + await driver!.waitFor(find.text('Fast wallet')); // Wait 3 seconds at the end await sleep(3000); });