This commit is contained in:
poka 2022-12-09 19:55:40 +01:00
parent 79e12eb44b
commit 8b40b706b7
63 changed files with 248 additions and 232 deletions

View File

@ -22,9 +22,9 @@ void main() async {
// Create test5 identity // Create test5 identity
await bkPay( await bkPay(
fromAddress: test1.address, destAddress: test5.address, amount: 30); fromAddress: test1.address, destAddress: test5.address, amount: 30);
sub.reload(); subR.reload();
await bkCertify(fromAddress: test1.address, destAddress: test5.address); await bkCertify(fromAddress: test1.address, destAddress: test5.address);
sub.reload(); subR.reload();
await sleep(); await sleep();
// Certify test5 to become member // Certify test5 to become member

View File

@ -92,8 +92,9 @@ Future restoreChest() async {
} }
Future onboardingNewChest() async { Future onboardingNewChest() async {
final generateWalletProvider = late GenerateWalletsProvider generateWalletsProviderR;
Provider.of<GenerateWalletsProvider>(homeContext, listen: false); // StateProvider((ref) => generateWalletsProviderR = ref.read(generateWalletsProvider));
// Open screen create new wallet // Open screen create new wallet
await tapKey(keyOnboardingNewChest); await tapKey(keyOnboardingNewChest);
@ -122,7 +123,7 @@ Future onboardingNewChest() async {
// Enter asked word // Enter asked word
final askedWordNumber = int.parse(getWidgetText(keyAskedWord)); final askedWordNumber = int.parse(getWidgetText(keyAskedWord));
List mnemonic = generateWalletProvider.generatedMnemonic!.split(' '); List mnemonic = generateWalletsProviderR.generatedMnemonic!.split(' ');
final askedWord = mnemonic[askedWordNumber - 1]; final askedWord = mnemonic[askedWordNumber - 1];
await enterText(keyInputWord, askedWord); await enterText(keyInputWord, askedWord);

View File

@ -16,7 +16,10 @@ final bool isHumanReading =
dotenv.env['isHumanReading'] == 'true' ? true : false; dotenv.env['isHumanReading'] == 'true' ? true : false;
Timeout testTimeout([int seconds = 120]) => Timeout testTimeout([int seconds = 120]) =>
Timeout(Duration(seconds: isHumanReading ? 600 : seconds)); Timeout(Duration(seconds: isHumanReading ? 600 : seconds));
final sub = Provider.of<SubstrateSdk>(homeContext, listen: false); // final subR = Provider.of<SubstrateSdk>(homeContext, listen: false);
late SubstrateSdk subR;
StateProvider(
(ref) => subR = ref.read(sub));
late WidgetTester tester; late WidgetTester tester;
// TEST WALLETS CONSTS // TEST WALLETS CONSTS
@ -177,9 +180,9 @@ Future spawnBlock({int number = 1, int duration = 200, int? until}) async {
await sleep(duration); await sleep(duration);
} }
if (until != null) { if (until != null) {
number = until - sub.blocNumber; number = until - subR.blocNumber;
} }
await sub.spawnBlock(number); await subR.spawnBlock(number);
await sleep(200); await sleep(200);
} }
@ -188,7 +191,7 @@ Future bkPay(
{required String fromAddress, {required String fromAddress,
required String destAddress, required String destAddress,
required double amount}) async { required double amount}) async {
sub.pay( subR.pay(
fromAddress: fromAddress, fromAddress: fromAddress,
destAddress: destAddress, destAddress: destAddress,
amount: amount, amount: amount,
@ -203,7 +206,7 @@ Future bkCertify(
{required String fromAddress, {required String fromAddress,
required String destAddress, required String destAddress,
bool spawnBloc = true}) async { bool spawnBloc = true}) async {
sub.certify(fromAddress, destAddress, 'AAAAA'); subR.certify(fromAddress, destAddress, 'AAAAA');
if (spawnBloc) { if (spawnBloc) {
await sleep(500); await sleep(500);
await spawnBlock(); await spawnBlock();
@ -214,7 +217,7 @@ Future bkCertify(
// Confirm my identity in background // Confirm my identity in background
Future bkConfirmIdentity( Future bkConfirmIdentity(
{required String fromAddress, required String name}) async { {required String fromAddress, required String name}) async {
sub.confirmIdentity(fromAddress, name, 'AAAAA'); subR.confirmIdentity(fromAddress, name, 'AAAAA');
await sleep(500); await sleep(500);
await spawnBlock(); await spawnBlock();
await sleep(500); await sleep(500);
@ -227,7 +230,7 @@ Future bkSetNode([String? endpoint]) async {
endpoint = 'ws://$ipAddress:9944'; endpoint = 'ws://$ipAddress:9944';
} }
configBox.put('customEndpoint', endpoint); configBox.put('customEndpoint', endpoint);
sub.connectNode(homeContext); subR.connectNode(homeContext);
} }
// Restore chest in background // Restore chest in background
@ -256,7 +259,7 @@ Future<WalletData> _addImportAccount(
required int number, required int number,
required String name, required String name,
required int derivation}) async { required int derivation}) async {
final address = await sub.importAccount( final address = await subR.importAccount(
mnemonic: mnemonic, derivePath: '//$derivation', password: 'AAAAA'); mnemonic: mnemonic, derivePath: '//$derivation', password: 'AAAAA');
final myWallet = WalletData( final myWallet = WalletData(
chest: chest, chest: chest,
@ -282,7 +285,7 @@ Future bkDeleteAllWallets() async {
await chestBox.clear(); await chestBox.clear();
await configBox.delete('defaultWallet'); await configBox.delete('defaultWallet');
await configBox.delete('isUdUnit'); await configBox.delete('isUdUnit');
await sub.deleteAllAccounts(); await subR.deleteAllAccounts();
myWalletProvider.pinCode = ''; myWalletProvider.pinCode = '';
myWalletProvider.reload(); myWalletProvider.reload();
} }

View File

@ -22,17 +22,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/chest_data.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/chest_provider.dart';
import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/generate_wallets.dart';
import 'package:gecko/providers/settings_provider.dart';
import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/home.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/search.dart';
import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/screens/home.dart'; import 'package:gecko/screens/home.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/screens/myWallets/wallets_home.dart'; import 'package:gecko/screens/myWallets/wallets_home.dart';
@ -119,66 +109,51 @@ Future<void> main() async {
} }
} }
class Gecko extends StatelessWidget { class Gecko extends ConsumerWidget {
const Gecko({Key? key}) : super(key: key); const Gecko({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
// To configure multi_endpoints GraphQLProvider: https://stackoverflow.com/q/70656513/8301867 // To configure multi_endpoints GraphQLProvider: https://stackoverflow.com/q/70656513/8301867
return MultiProvider( return MaterialApp(
providers: [ localizationsDelegates: context.localizationDelegates,
ChangeNotifierProvider(create: (_) => HomeProvider()), supportedLocales: context.supportedLocales,
ChangeNotifierProvider(create: (_) => WalletsProfilesProvider('')), locale: context.locale,
ChangeNotifierProvider(create: (_) => MyWalletsProvider()), builder: (context, widget) => ResponsiveWrapper.builder(
ChangeNotifierProvider(create: (_) => ChestProvider()), BouncingScrollWrapper.builder(context, widget!),
ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()), maxWidth: 1200,
ChangeNotifierProvider(create: (_) => WalletOptionsProvider()), minWidth: 480,
ChangeNotifierProvider(create: (_) => SearchProvider()), defaultScale: true,
ChangeNotifierProvider(create: (_) => CesiumPlusProvider()), breakpoints: [
ChangeNotifierProvider(create: (_) => SubstrateSdk()), const ResponsiveBreakpoint.resize(480, name: MOBILE),
ChangeNotifierProvider(create: (_) => DuniterIndexer()), const ResponsiveBreakpoint.autoScale(800, name: TABLET),
ChangeNotifierProvider(create: (_) => SettingsProvider()) const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
], ],
child: MaterialApp( background: Container(color: backgroundColor)),
localizationsDelegates: context.localizationDelegates, title: 'Ğecko',
supportedLocales: context.supportedLocales, theme: ThemeData(
locale: context.locale, appBarTheme: const AppBarTheme(
builder: (context, widget) => ResponsiveWrapper.builder( color: Color(0xffFFD58D),
BouncingScrollWrapper.builder(context, widget!), foregroundColor: Color(0xFF000000),
maxWidth: 1200,
minWidth: 480,
defaultScale: true,
breakpoints: [
const ResponsiveBreakpoint.resize(480, name: MOBILE),
const ResponsiveBreakpoint.autoScale(800, name: TABLET),
const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
],
background: Container(color: backgroundColor)),
title: 'Ğecko',
theme: ThemeData(
appBarTheme: const AppBarTheme(
color: Color(0xffFFD58D),
foregroundColor: Color(0xFF000000),
),
primaryColor: const Color(0xffFFD58D),
textTheme: const TextTheme(
bodyText1: TextStyle(fontSize: 16),
bodyText2: TextStyle(fontSize: 18),
).apply(
bodyColor: const Color(0xFF000000),
),
colorScheme:
ColorScheme.fromSwatch().copyWith(secondary: Colors.grey[850]),
), ),
home: const HomeScreen(), primaryColor: const Color(0xffFFD58D),
initialRoute: "/", textTheme: const TextTheme(
routes: { bodyText1: TextStyle(fontSize: 16),
'/mywallets': (context) => const WalletsHome(), bodyText2: TextStyle(fontSize: 18),
'/search': (context) => const SearchScreen(), ).apply(
'/searchResult': (context) => const SearchResultScreen(), bodyColor: const Color(0xFF000000),
}, ),
colorScheme:
ColorScheme.fromSwatch().copyWith(secondary: Colors.grey[850]),
), ),
home: const HomeScreen(),
initialRoute: "/",
routes: {
'/mywallets': (context) => const WalletsHome(),
'/search': (context) => const SearchScreen(),
'/searchResult': (context) => const SearchResultScreen(),
},
); );
} }
} }

View File

@ -2,11 +2,12 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
// import 'package:http/http.dart' as http; // import 'package:http/http.dart' as http;
class CesiumPlusProvider with ChangeNotifier { class CesiumPlusProvider extends ChangeNotifier {
TextEditingController cesiumName = TextEditingController(); TextEditingController cesiumName = TextEditingController();
CancelToken avatarCancelToken = CancelToken(); CancelToken avatarCancelToken = CancelToken();
@ -157,3 +158,8 @@ class CesiumPlusProvider with ChangeNotifier {
Image defaultAvatar(double size) => Image defaultAvatar(double size) =>
Image.asset(('assets/icon_user.png'), height: size); Image.asset(('assets/icon_user.png'), height: size);
final cesiumPlusProvider = ChangeNotifierProvider<CesiumPlusProvider>((ref) {
return CesiumPlusProvider();
});

View File

@ -9,16 +9,16 @@ import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ChestProvider with ChangeNotifier { class ChestProvider extends ChangeNotifier {
void reload() { void reload() {
notifyListeners(); notifyListeners();
} }
Future deleteChest(context, ChestData chest) async { Future deleteChest(context, ChestData chest) async {
final bool? answer = await (_confirmDeletingChest(context, chest.name)); final bool? answer = await (_confirmDeletingChest(context, chest.name));
final sub = Provider.of<SubstrateSdk>(context, listen: false); final subR = Provider.of<SubstrateSdk>(context, listen: false);
if (answer ?? false) { if (answer ?? false) {
await sub.deleteAccounts(getChestWallets(chest)); await subR.deleteAccounts(getChestWallets(chest));
await chestBox.delete(chest.key); await chestBox.delete(chest.key);
final myWalletProvider = final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
@ -77,3 +77,7 @@ class ChestProvider with ChangeNotifier {
); );
} }
} }
final chestProvider = ChangeNotifierProvider<ChestProvider>((ref) {
return ChestProvider();
});

View File

@ -4,12 +4,13 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
class DuniterIndexer with ChangeNotifier { class DuniterIndexer extends ChangeNotifier {
Map<String, String?> walletNameIndexer = {}; Map<String, String?> walletNameIndexer = {};
String? fetchMoreCursor; String? fetchMoreCursor;
Map? pageInfo; Map? pageInfo;
@ -330,3 +331,7 @@ int weekNumber(DateTime date) {
int dayOfYear = int.parse(DateFormat("D").format(date)); int dayOfYear = int.parse(DateFormat("D").format(date));
return ((dayOfYear - date.weekday + 10) / 7).floor(); return ((dayOfYear - date.weekday + 10) / 7).floor();
} }
final duniterIndexer = ChangeNotifierProvider<DuniterIndexer>((ref) {
return DuniterIndexer();
});

View File

@ -14,7 +14,7 @@ import 'package:polkawallet_sdk/api/apiKeyring.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import "package:unorm_dart/unorm_dart.dart" as unorm; import "package:unorm_dart/unorm_dart.dart" as unorm;
class GenerateWalletsProvider with ChangeNotifier { class GenerateWalletsProvider extends ChangeNotifier {
GenerateWalletsProvider(); GenerateWalletsProvider();
// NewWallet generatedWallet; // NewWallet generatedWallet;
durt.NewWallet? actualWallet; durt.NewWallet? actualWallet;
@ -468,3 +468,7 @@ class GenerateWalletsProvider with ChangeNotifier {
} }
} }
} }
final generateWalletsProvider = ChangeNotifierProvider<GenerateWalletsProvider>((ref) {
return GenerateWalletsProvider();
});

View File

@ -20,7 +20,7 @@ import 'package:package_info_plus/package_info_plus.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class HomeProvider with ChangeNotifier { class HomeProvider extends ChangeNotifier {
bool? isSearching; bool? isSearching;
Icon searchIcon = const Icon(Icons.search); Icon searchIcon = const Icon(Icons.search);
final TextEditingController searchQuery = TextEditingController(); final TextEditingController searchQuery = TextEditingController();

View File

@ -234,8 +234,8 @@ class MyWalletsProvider extends ChangeNotifier {
} }
} }
// Finally, we are using StateNotifierProvider to allow the UI to interact with // Finally, we are using StateNotifierProvider to allow the UI to interact with
// our TodosNotifier class. // our MyWalletsProvider class.
final myWalletsProvider = ChangeNotifierProvider<MyWalletsProvider>((ref) { final myWalletsProvider = ChangeNotifierProvider<MyWalletsProvider>((ref) {
return MyWalletsProvider(); return MyWalletsProvider();
}); });

View File

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/providers/wallets_profiles.dart'; import 'package:gecko/providers/wallets_profiles.dart';
class SearchProvider with ChangeNotifier { class SearchProvider extends ChangeNotifier {
TextEditingController searchController = TextEditingController(); TextEditingController searchController = TextEditingController();
List searchResult = []; List searchResult = [];
final cacheDuring = 20 * 60 * 1000; //First number is minutes final cacheDuring = 20 * 60 * 1000; //First number is minutes
@ -80,10 +81,6 @@ class SearchProvider with ChangeNotifier {
} }
} }
// List<G1WalletsList>? _parseG1Wallets(var responseBody) { final searchProvider = ChangeNotifierProvider<SearchProvider>((ref) {
// final parsed = responseBody.cast<Map<String, dynamic>>(); return SearchProvider();
});
// return parsed
// .map<G1WalletsList>((json) => G1WalletsList.fromJson(json))
// .toList();
// }

View File

@ -1,7 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class SettingsProvider with ChangeNotifier { class SettingsProvider extends ChangeNotifier {
void reload() { void reload() {
notifyListeners(); notifyListeners();
} }
} }
final settingsProvider = ChangeNotifierProvider<SettingsProvider>((ref) {
return SettingsProvider();
});

View File

@ -24,7 +24,7 @@ import 'package:truncate/truncate.dart';
import 'package:pointycastle/pointycastle.dart' as pc; import 'package:pointycastle/pointycastle.dart' as pc;
import "package:hex/hex.dart"; import "package:hex/hex.dart";
class SubstrateSdk with ChangeNotifier { class SubstrateSdk extends ChangeNotifier {
final WalletSDK sdk = WalletSDK(); final WalletSDK sdk = WalletSDK();
final Keyring keyring = Keyring(); final Keyring keyring = Keyring();
String generatedMnemonic = ''; String generatedMnemonic = '';
@ -1139,3 +1139,7 @@ Uint8List _int32bytes(int value) =>
double round(double number, [int decimal = 2]) { double round(double number, [int decimal = 2]) {
return double.parse((number.toStringAsFixed(decimal))); return double.parse((number.toStringAsFixed(decimal)));
} }
final sub = ChangeNotifierProvider<SubstrateSdk>((ref) {
return SubstrateSdk();
});

View File

@ -18,7 +18,7 @@ import 'package:image_picker/image_picker.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:image_cropper/image_cropper.dart'; import 'package:image_cropper/image_cropper.dart';
class WalletOptionsProvider with ChangeNotifier { class WalletOptionsProvider extends ChangeNotifier {
TextEditingController address = TextEditingController(); TextEditingController address = TextEditingController();
final TextEditingController _newWalletName = TextEditingController(); final TextEditingController _newWalletName = TextEditingController();
bool isWalletUnlock = false; bool isWalletUnlock = false;
@ -385,3 +385,8 @@ class WalletOptionsProvider with ChangeNotifier {
return addressGet; return addressGet;
} }
} }
final walletOptionsProvider =
ChangeNotifierProvider<WalletOptionsProvider>((ref) {
return WalletOptionsProvider();
});

View File

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/g1_wallets_list.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
@ -9,7 +10,7 @@ import 'package:permission_handler/permission_handler.dart';
// import 'package:qrscan/qrscan.dart' as scanner; // import 'package:qrscan/qrscan.dart' as scanner;
import 'package:barcode_scan2/barcode_scan2.dart'; import 'package:barcode_scan2/barcode_scan2.dart';
class WalletsProfilesProvider with ChangeNotifier { class WalletsProfilesProvider extends ChangeNotifier {
WalletsProfilesProvider(this.address); WalletsProfilesProvider(this.address);
String address = ''; String address = '';
@ -161,3 +162,8 @@ snackCopySeed(context) {
duration: const Duration(seconds: 4)); duration: const Duration(seconds: 4));
ScaffoldMessenger.of(context).showSnackBar(snackBar); ScaffoldMessenger.of(context).showSnackBar(snackBar);
} }
final walletsProfilesProvider =
ChangeNotifierProvider<WalletsProfilesProvider>((ref) {
return WalletsProfilesProvider('');
});

View File

@ -13,31 +13,26 @@ import 'package:gecko/widgets/transaction_tile.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ActivityScreen extends StatefulWidget with ChangeNotifier { class ActivityScreen extends ConsumerWidget {
ActivityScreen({required this.address, required this.avatar, this.username}) ActivityScreen({required this.address, required this.avatar, this.username})
: super(key: keyActivityScreen); : super(key: keyActivityScreen);
final String address; final String address;
final String? username; final String? username;
final Image avatar; final Image avatar;
@override
State<ActivityScreen> createState() => _ActivityScreenState();
}
class _ActivityScreenState extends State<ActivityScreen> {
// @override // @override
// void initState() {
// super.initState();
// }
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
final double avatarsSize = 80; final double avatarsSize = 80;
FetchMore? fetchMore; FetchMore? fetchMore;
FetchMoreOptions? opts; FetchMoreOptions? opts;
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>(); final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: AppBar( appBar: AppBar(
@ -50,13 +45,14 @@ class _ActivityScreenState extends State<ActivityScreen> {
), ),
bottomNavigationBar: const GeckoBottomAppBar(), bottomNavigationBar: const GeckoBottomAppBar(),
body: Column(children: <Widget>[ body: Column(children: <Widget>[
HeaderProfile(address: widget.address, username: widget.username), HeaderProfile(address: address, username: username),
historyQuery(context), historyQuery(ref),
])); ]));
} }
Widget historyQuery(context) { Widget historyQuery(WidgetRef ref) {
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false); final duniterIndexerW = ref.read(duniterIndexer);
int nPage = 1; int nPage = 1;
int nRepositories = 20; int nRepositories = 20;
@ -93,7 +89,7 @@ class _ActivityScreenState extends State<ActivityScreen> {
options: QueryOptions( options: QueryOptions(
document: gql(getHistoryByAddressQ), document: gql(getHistoryByAddressQ),
variables: <String, dynamic>{ variables: <String, dynamic>{
'address': widget.address, 'address': address,
'number': 20, 'number': 20,
'cursor': null 'cursor': null
}, },
@ -129,7 +125,7 @@ class _ActivityScreenState extends State<ActivityScreen> {
} }
if (result.isNotLoading) { if (result.isNotLoading) {
if (duniterIndexer.fetchMoreCursor == null) nPage = 1; if (duniterIndexerW.fetchMoreCursor == null) nPage = 1;
// log.d('nPage: $nPage'); // log.d('nPage: $nPage');
@ -143,8 +139,8 @@ class _ActivityScreenState extends State<ActivityScreen> {
nRepositories = 120; nRepositories = 120;
} }
nPage++; nPage++;
opts = duniterIndexer.mergeQueryResult( opts = duniterIndexerW.mergeQueryResult(
result, opts, widget.address, nRepositories); result, opts, address, nRepositories);
} }
// Build history list // Build history list
@ -154,7 +150,7 @@ class _ActivityScreenState extends State<ActivityScreen> {
child: ListView( child: ListView(
key: keyListTransactions, key: keyListTransactions,
controller: scrollController, controller: scrollController,
children: <Widget>[historyView(context, result)], children: <Widget>[historyView(ref, result)],
), ),
), ),
), ),
@ -162,7 +158,7 @@ class _ActivityScreenState extends State<ActivityScreen> {
if (t is ScrollEndNotification && if (t is ScrollEndNotification &&
scrollController.position.pixels >= scrollController.position.pixels >=
scrollController.position.maxScrollExtent * 0.7 && scrollController.position.maxScrollExtent * 0.7 &&
duniterIndexer.pageInfo!['hasNextPage'] && duniterIndexerW.pageInfo!['hasNextPage'] &&
result.isNotLoading) { result.isNotLoading) {
fetchMore!(opts!); fetchMore!(opts!);
} }
@ -175,15 +171,15 @@ class _ActivityScreenState extends State<ActivityScreen> {
); );
} }
Widget historyView(context, result) { Widget historyView(WidgetRef ref, result) {
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false); final duniterIndexerW = ref.read(duniterIndexer);
int keyID = 0; int keyID = 0;
const double avatarSize = 200; const double avatarSize = 200;
String? lastDateDelimiter; String? lastDateDelimiter;
bool? isDouble; bool? isDouble;
bool isMigrationPassed = false; bool isMigrationPassed = false;
return duniterIndexer.transBC == null return duniterIndexerW.transBC == null
? Column(children: <Widget>[ ? Column(children: <Widget>[
const SizedBox(height: 50), const SizedBox(height: 50),
Text( Text(
@ -193,7 +189,7 @@ class _ActivityScreenState extends State<ActivityScreen> {
]) ])
: Column(children: <Widget>[ : Column(children: <Widget>[
Column( Column(
children: duniterIndexer.transBC!.map((repository) { children: duniterIndexerW.transBC!.map((repository) {
final answer = final answer =
computeHistoryView(repository, lastDateDelimiter, isDouble); computeHistoryView(repository, lastDateDelimiter, isDouble);
isDouble = lastDateDelimiter == answer['dateDelimiter'] || isDouble = lastDateDelimiter == answer['dateDelimiter'] ||
@ -229,24 +225,24 @@ class _ActivityScreenState extends State<ActivityScreen> {
), ),
), ),
TransactionTile( TransactionTile(
widget: widget, username: username ?? '',
keyID: keyID, keyID: keyID,
avatarSize: avatarSize, avatarSize: avatarSize,
repository: repository, repository: repository,
dateForm: answer['dateForm'], dateForm: answer['dateForm'],
finalAmount: answer['finalAmount'], finalAmount: answer['finalAmount'],
duniterIndexer: duniterIndexer, duniterIndexer: duniterIndexerW),
context: context),
]); ]);
}).toList()), }).toList()),
if (result.isLoading && duniterIndexer.pageInfo!['hasPreviousPage']) if (result.isLoading &&
duniterIndexerW.pageInfo!['hasPreviousPage'])
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: const <Widget>[ children: const <Widget>[
CircularProgressIndicator(), CircularProgressIndicator(),
], ],
), ),
if (!duniterIndexer.pageInfo!['hasNextPage']) if (!duniterIndexerW.pageInfo!['hasNextPage'])
Column( Column(
children: const <Widget>[ children: const <Widget>[
SizedBox(height: 15), SizedBox(height: 15),

View File

@ -1,5 +1,6 @@
import 'package:accordion/controllers.dart'; import 'package:accordion/controllers.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/widgets/certs_received.dart'; import 'package:gecko/widgets/certs_received.dart';
@ -7,7 +8,7 @@ import 'package:gecko/widgets/certs_counter.dart';
import 'package:gecko/widgets/certs_sent.dart'; import 'package:gecko/widgets/certs_sent.dart';
import 'package:accordion/accordion.dart'; import 'package:accordion/accordion.dart';
class CertificationsScreen extends StatelessWidget { class CertificationsScreen extends ConsumerWidget {
const CertificationsScreen( const CertificationsScreen(
{Key? key, required this.address, required this.username}) {Key? key, required this.address, required this.username})
: super(key: key); : super(key: key);
@ -15,7 +16,7 @@ class CertificationsScreen extends StatelessWidget {
final String username; final String username;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
return Scaffold( return Scaffold(
backgroundColor: backgroundColor, backgroundColor: backgroundColor,
appBar: AppBar( appBar: AppBar(

View File

@ -13,7 +13,7 @@ import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ChangePinScreen extends StatelessWidget with ChangeNotifier { class ChangePinScreen extends ConsumerWidget extends ChangeNotifier {
ChangePinScreen( ChangePinScreen(
{Key? keyMyWallets, {Key? keyMyWallets,
required this.walletName, required this.walletName,

View File

@ -18,7 +18,7 @@ import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/widgets/bottom_app_bar.dart'; import 'package:gecko/widgets/bottom_app_bar.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ChestOptions extends StatelessWidget { class ChestOptions extends ConsumerWidget {
const ChestOptions({Key? keyMyWallets, required this.walletProvider}) const ChestOptions({Key? keyMyWallets, required this.walletProvider})
: super(key: keyMyWallets); : super(key: keyMyWallets);
final MyWalletsProvider walletProvider; final MyWalletsProvider walletProvider;

View File

@ -16,7 +16,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
// import 'package:gecko/models/home.dart'; // import 'package:gecko/models/home.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart'; // import 'package:flutter_riverpod/flutter_riverpod.dart';
class ChooseWalletScreen extends StatelessWidget { class ChooseWalletScreen extends ConsumerWidget {
ChooseWalletScreen({Key? key, required this.pin}) : super(key: key); ChooseWalletScreen({Key? key, required this.pin}) : super(key: key);
final String pin; final String pin;
WalletData? selectedWallet; WalletData? selectedWallet;

View File

@ -18,7 +18,7 @@ import 'package:gecko/widgets/certifications.dart';
import 'package:gecko/widgets/idty_status.dart'; import 'package:gecko/widgets/idty_status.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ImportG1v1 extends StatelessWidget { class ImportG1v1 extends ConsumerWidget {
const ImportG1v1({Key? key}) : super(key: key); const ImportG1v1({Key? key}) : super(key: key);
@override @override

View File

@ -21,7 +21,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
// import 'package:gecko/screens/transaction_in_progress.dart'; // import 'package:gecko/screens/transaction_in_progress.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart'; // import 'package:flutter_riverpod/flutter_riverpod.dart';
class ManageMembership extends StatelessWidget { class ManageMembership extends ConsumerWidget {
const ManageMembership({Key? key, required this.address}) : super(key: key); const ManageMembership({Key? key, required this.address}) : super(key: key);
final String address; final String address;

View File

@ -15,7 +15,7 @@ import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
import 'package:gecko/screens/transaction_in_progress.dart'; import 'package:gecko/screens/transaction_in_progress.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class MigrateIdentityScreen extends StatelessWidget { class MigrateIdentityScreen extends ConsumerWidget {
const MigrateIdentityScreen({Key? key}) : super(key: key); const MigrateIdentityScreen({Key? key}) : super(key: key);
@override @override

View File

@ -13,7 +13,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
// import 'package:gecko/models/home.dart'; // import 'package:gecko/models/home.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart'; // import 'package:flutter_riverpod/flutter_riverpod.dart';
class RestoreChest extends StatelessWidget { class RestoreChest extends ConsumerWidget {
const RestoreChest({Key? key, this.skipIntro = false}) : super(key: key); const RestoreChest({Key? key, this.skipIntro = false}) : super(key: key);
final bool skipIntro; final bool skipIntro;

View File

@ -14,7 +14,7 @@ import 'package:printing/printing.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:pdf/widgets.dart' as pw; import 'package:pdf/widgets.dart' as pw;
class ShowSeed extends StatelessWidget { class ShowSeed extends ConsumerWidget {
const ShowSeed( const ShowSeed(
{Key? keyMyWallets, {Key? keyMyWallets,
required this.walletName, required this.walletName,
@ -204,7 +204,7 @@ class ShowSeed extends StatelessWidget {
} }
} }
class PrintWallet extends StatelessWidget { class PrintWallet extends ConsumerWidget {
const PrintWallet(this.sentence, {Key? key}) : super(key: key); const PrintWallet(this.sentence, {Key? key}) : super(key: key);
final String? sentence; final String? sentence;

View File

@ -16,7 +16,7 @@ import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
class UnlockingWallet extends StatelessWidget { class UnlockingWallet extends ConsumerWidget {
UnlockingWallet({required this.wallet}) : super(key: keyUnlockWallet); UnlockingWallet({required this.wallet}) : super(key: keyUnlockWallet);
WalletData wallet; WalletData wallet;
late int currentChestNumber; late int currentChestNumber;

View File

@ -26,7 +26,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
class WalletOptions extends StatelessWidget { class WalletOptions extends ConsumerWidget {
const WalletOptions({Key? keyMyWallets, required this.wallet}) const WalletOptions({Key? keyMyWallets, required this.wallet})
: super(key: keyMyWallets); : super(key: keyMyWallets);
final WalletData wallet; final WalletData wallet;

View File

@ -30,13 +30,13 @@ class WalletsHome extends ConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
// final myWalletProvider = Provider.of<MyWalletsProvider>(context); // final myWalletsProviderR = Provider.of<MyWalletsProvider>(context);
final listWallets = ref.watch(myWalletsProvider).listWallets; final myWalletsProviderR = ref.read(myWalletsProvider);
final currentChestNumber = myWalletProvider.getCurrentChest(); final currentChestNumber = myWalletsProviderR.getCurrentChest();
final ChestData currentChest = chestBox.get(currentChestNumber)!; final ChestData currentChest = chestBox.get(currentChestNumber)!;
myWalletProvider.listWallets = myWalletsProviderR.listWallets =
myWalletProvider.readAllWallets(currentChestNumber); myWalletsProviderR.readAllWallets(currentChestNumber);
return WillPopScope( return WillPopScope(
onWillPop: () { onWillPop: () {
@ -72,7 +72,7 @@ class WalletsHome extends ConsumerWidget {
), ),
backgroundColor: const Color(0xffFFD58D), backgroundColor: const Color(0xffFFD58D),
), ),
bottomNavigationBar: myWalletProvider.lastFlyBy == '' bottomNavigationBar: myWalletsProviderR.lastFlyBy == ''
? const GeckoBottomAppBar( ? const GeckoBottomAppBar(
actualRoute: 'safeHome', actualRoute: 'safeHome',
) )
@ -88,16 +88,16 @@ class WalletsHome extends ConsumerWidget {
} }
Widget dragInfo(BuildContext context) { Widget dragInfo(BuildContext context) {
final myWalletProvider = final myWalletsProviderR =
Provider.of<MyWalletsProvider>(context, listen: false); Provider.of<MyWalletsProvider>(context, listen: false);
final walletDataFrom = final walletDataFrom = myWalletsProviderR
myWalletProvider.getWalletDataByAddress(myWalletProvider.dragAddress); .getWalletDataByAddress(myWalletsProviderR.dragAddress);
final walletDataTo = final walletDataTo =
myWalletProvider.getWalletDataByAddress(myWalletProvider.lastFlyBy); myWalletsProviderR.getWalletDataByAddress(myWalletsProviderR.lastFlyBy);
final bool isSameAddress = final bool isSameAddress =
myWalletProvider.dragAddress == myWalletProvider.lastFlyBy; myWalletsProviderR.dragAddress == myWalletsProviderR.lastFlyBy;
final screenWidth = MediaQuery.of(homeContext).size.width; final screenWidth = MediaQuery.of(homeContext).size.width;
return Container( return Container(
@ -118,7 +118,7 @@ class WalletsHome extends ConsumerWidget {
); );
} }
Widget chestOptions(BuildContext context, final myWalletProvider) { Widget chestOptions(BuildContext context, final myWalletsProviderR) {
return Column(children: [ return Column(children: [
const SizedBox(height: 50), const SizedBox(height: 50),
SizedBox( SizedBox(
@ -136,7 +136,7 @@ class WalletsHome extends ConsumerWidget {
onPressed: () => Navigator.push( onPressed: () => Navigator.push(
context, context,
MaterialPageRoute(builder: (context) { MaterialPageRoute(builder: (context) {
return ChestOptions(walletProvider: myWalletProvider); return ChestOptions(walletProvider: myWalletsProviderR);
}), }),
), ),
label: Text( label: Text(
@ -208,10 +208,10 @@ class WalletsHome extends ConsumerWidget {
} }
Widget myWalletsTiles(BuildContext context, int currentChestNumber) { Widget myWalletsTiles(BuildContext context, int currentChestNumber) {
final myWalletProvider = Provider.of<MyWalletsProvider>(context); final myWalletsProviderR = Provider.of<MyWalletsProvider>(context);
final walletOptions = final walletOptions =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); final bool isWalletsExists = myWalletsProviderR.checkIfWalletExist();
final sub = Provider.of<SubstrateSdk>(context, listen: false); final sub = Provider.of<SubstrateSdk>(context, listen: false);
final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false); final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false);
@ -219,7 +219,7 @@ class WalletsHome extends ConsumerWidget {
return const Text(''); return const Text('');
} }
if (myWalletProvider.listWallets.isEmpty) { if (myWalletsProviderR.listWallets.isEmpty) {
return Expanded( return Expanded(
child: Column(children: const <Widget>[ child: Column(children: const <Widget>[
Center( Center(
@ -231,12 +231,12 @@ class WalletsHome extends ConsumerWidget {
} }
// Get wallet list and sort by derivation number // Get wallet list and sort by derivation number
List<WalletData> listWallets = myWalletProvider.listWallets; List<WalletData> listWallets = myWalletsProviderR.listWallets;
listWallets.sort((p1, p2) { listWallets.sort((p1, p2) {
return Comparable.compare(p1.number!, p2.number!); return Comparable.compare(p1.number!, p2.number!);
}); });
WalletData? defaultWallet = myWalletProvider.getDefaultWallet(); WalletData? defaultWallet = myWalletsProviderR.getDefaultWallet();
final screenWidth = MediaQuery.of(context).size.width; final screenWidth = MediaQuery.of(context).size.width;
int nTule = 2; int nTule = 2;
@ -269,11 +269,11 @@ class WalletsHome extends ConsumerWidget {
// feedbackOffset: const Offset(-500, -500), // feedbackOffset: const Offset(-500, -500),
// dragAnchorStrategy: childDragAnchorStrategy, // dragAnchorStrategy: childDragAnchorStrategy,
onDragStarted: () => onDragStarted: () =>
myWalletProvider.dragAddress = repository.address, myWalletsProviderR.dragAddress = repository.address,
onDragEnd: (_) { onDragEnd: (_) {
myWalletProvider.lastFlyBy = ''; myWalletsProviderR.lastFlyBy = '';
myWalletProvider.dragAddress = ''; myWalletsProviderR.dragAddress = '';
myWalletProvider.reload(); myWalletsProviderR.reload();
}, },
feedback: ElevatedButton( feedback: ElevatedButton(
onPressed: () {}, onPressed: () {},
@ -291,16 +291,16 @@ class WalletsHome extends ConsumerWidget {
onAccept: (senderAddress) async { onAccept: (senderAddress) async {
log.d( log.d(
'INTERPAY: sender: $senderAddress --- receiver: ${repository.address}'); 'INTERPAY: sender: $senderAddress --- receiver: ${repository.address}');
final walletData = myWalletProvider final walletData = myWalletsProviderR
.getWalletDataByAddress(senderAddress); .getWalletDataByAddress(senderAddress);
await sub.setCurrentWallet(walletData!); await sub.setCurrentWallet(walletData!);
sub.reload(); sub.reload();
paymentPopup(context, repository.address); paymentPopup(context, repository.address);
}, },
onMove: (details) { onMove: (details) {
if (repository.address != myWalletProvider.lastFlyBy) { if (repository.address != myWalletsProviderR.lastFlyBy) {
myWalletProvider.lastFlyBy = repository.address; myWalletsProviderR.lastFlyBy = repository.address;
myWalletProvider.reload(); myWalletsProviderR.reload();
} }
}, },
onWillAccept: (senderAddress) => onWillAccept: (senderAddress) =>
@ -430,7 +430,7 @@ class WalletsHome extends ConsumerWidget {
: const Text(''); : const Text('');
}), }),
]), ]),
SliverToBoxAdapter(child: chestOptions(context, myWalletProvider)), SliverToBoxAdapter(child: chestOptions(context, myWalletsProviderR)),
]); ]);
} }
@ -458,10 +458,10 @@ class WalletsHome extends ConsumerWidget {
} }
Widget addNewDerivation(context) { Widget addNewDerivation(context) {
final myWalletProvider = Provider.of<MyWalletsProvider>(context); final myWalletsProviderR = Provider.of<MyWalletsProvider>(context);
String newDerivationName = String newDerivationName =
'${'wallet'.tr()} ${myWalletProvider.listWallets.last.number! + 2}'; '${'wallet'.tr()} ${myWalletsProviderR.listWallets.last.number! + 2}';
return Padding( return Padding(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
child: ClipRRect( child: ClipRRect(
@ -471,11 +471,11 @@ class WalletsHome extends ConsumerWidget {
child: InkWell( child: InkWell(
key: keyAddDerivation, key: keyAddDerivation,
onTap: () async { onTap: () async {
if (!myWalletProvider.isNewDerivationLoading) { if (!myWalletsProviderR.isNewDerivationLoading) {
WalletData? defaultWallet = WalletData? defaultWallet =
myWalletProvider.getDefaultWallet(); myWalletsProviderR.getDefaultWallet();
String? pin; String? pin;
if (myWalletProvider.pinCode == '') { if (myWalletsProviderR.pinCode == '') {
pin = await Navigator.push( pin = await Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
@ -485,8 +485,8 @@ class WalletsHome extends ConsumerWidget {
), ),
); );
} }
if (pin != null || myWalletProvider.pinCode != '') { if (pin != null || myWalletsProviderR.pinCode != '') {
await myWalletProvider.generateNewDerivation( await myWalletsProviderR.generateNewDerivation(
context, newDerivationName); context, newDerivationName);
} }
} }
@ -496,7 +496,7 @@ class WalletsHome extends ConsumerWidget {
height: double.infinity, height: double.infinity,
decoration: const BoxDecoration(color: floattingYellow), decoration: const BoxDecoration(color: floattingYellow),
child: Center( child: Center(
child: myWalletProvider.isNewDerivationLoading child: myWalletsProviderR.isNewDerivationLoading
? const SizedBox( ? const SizedBox(
height: 60, height: 60,
width: 60, width: 60,
@ -532,7 +532,7 @@ class CustomClipperOval extends CustomClipper<Rect> {
} }
} }
class ClipOvalShadow extends StatelessWidget { class ClipOvalShadow extends ConsumerWidget {
final Shadow shadow; final Shadow shadow;
final CustomClipper<Rect> clipper; final CustomClipper<Rect> clipper;
final Widget child; final Widget child;

View File

@ -9,7 +9,7 @@ import 'package:gecko/widgets/bottom_app_bar.dart';
import 'package:gecko/widgets/contacts_list.dart'; import 'package:gecko/widgets/contacts_list.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class ContactsScreen extends StatelessWidget { class ContactsScreen extends ConsumerWidget {
const ContactsScreen({Key? key}) : super(key: key); const ContactsScreen({Key? key}) : super(key: key);
@override @override

View File

@ -6,7 +6,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/2.dart'; import 'package:gecko/screens/onBoarding/2.dart';
class OnboardingStepOne extends StatelessWidget { class OnboardingStepOne extends ConsumerWidget {
const OnboardingStepOne({Key? key}) : super(key: key); const OnboardingStepOne({Key? key}) : super(key: key);
@override @override

View File

@ -18,7 +18,7 @@ import 'package:gecko/screens/onBoarding/11_congratulations.dart';
import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class OnboardingStepTen extends StatelessWidget { class OnboardingStepTen extends ConsumerWidget {
OnboardingStepTen({Key? validationKey, this.scanDerivation = false}) OnboardingStepTen({Key? validationKey, this.scanDerivation = false})
: super(key: validationKey); : super(key: validationKey);

View File

@ -7,7 +7,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
class OnboardingStepEleven extends StatelessWidget { class OnboardingStepEleven extends ConsumerWidget {
const OnboardingStepEleven({Key? key}) : super(key: key); const OnboardingStepEleven({Key? key}) : super(key: key);
@override @override

View File

@ -7,7 +7,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/3.dart'; import 'package:gecko/screens/onBoarding/3.dart';
class OnboardingStepTwo extends StatelessWidget { class OnboardingStepTwo extends ConsumerWidget {
const OnboardingStepTwo({Key? key}) : super(key: key); const OnboardingStepTwo({Key? key}) : super(key: key);
@override @override

View File

@ -7,7 +7,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/4.dart'; import 'package:gecko/screens/onBoarding/4.dart';
class OnboardingStepThree extends StatelessWidget { class OnboardingStepThree extends ConsumerWidget {
const OnboardingStepThree({Key? key}) : super(key: key); const OnboardingStepThree({Key? key}) : super(key: key);
@override @override

View File

@ -7,7 +7,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/5.dart'; import 'package:gecko/screens/onBoarding/5.dart';
class OnboardingStepFor extends StatelessWidget { class OnboardingStepFor extends ConsumerWidget {
const OnboardingStepFor({Key? key}) : super(key: key); const OnboardingStepFor({Key? key}) : super(key: key);
@override @override

View File

@ -220,7 +220,7 @@ Widget arrayCell(dataWord) {
); );
} }
class PrintWallet extends StatelessWidget { class PrintWallet extends ConsumerWidget {
const PrintWallet(this.sentence, {Key? key}) : super(key: key); const PrintWallet(this.sentence, {Key? key}) : super(key: key);
final String? sentence; final String? sentence;

View File

@ -12,7 +12,7 @@ import 'package:gecko/screens/onBoarding/7.dart';
import 'package:gecko/screens/onBoarding/9.dart'; import 'package:gecko/screens/onBoarding/9.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class OnboardingStepSix extends StatelessWidget { class OnboardingStepSix extends ConsumerWidget {
OnboardingStepSix( OnboardingStepSix(
{Key? key, required this.skipIntro, required this.generatedMnemonic}) {Key? key, required this.skipIntro, required this.generatedMnemonic})
: super(key: key); : super(key: key);

View File

@ -6,7 +6,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/8.dart'; import 'package:gecko/screens/onBoarding/8.dart';
class OnboardingStepSeven extends StatelessWidget { class OnboardingStepSeven extends ConsumerWidget {
const OnboardingStepSeven({Key? key, this.scanDerivation = false}) const OnboardingStepSeven({Key? key, this.scanDerivation = false})
: super(key: key); : super(key: key);
final bool scanDerivation; final bool scanDerivation;

View File

@ -6,7 +6,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/9.dart'; import 'package:gecko/screens/onBoarding/9.dart';
class OnboardingStepEight extends StatelessWidget { class OnboardingStepEight extends ConsumerWidget {
const OnboardingStepEight({Key? key, this.scanDerivation = false}) const OnboardingStepEight({Key? key, this.scanDerivation = false})
: super(key: key); : super(key: key);
final bool scanDerivation; final bool scanDerivation;

View File

@ -9,7 +9,7 @@ import 'package:gecko/screens/common_elements.dart';
import 'package:gecko/screens/onBoarding/10.dart'; import 'package:gecko/screens/onBoarding/10.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class OnboardingStepNine extends StatelessWidget { class OnboardingStepNine extends ConsumerWidget {
const OnboardingStepNine({Key? key, this.scanDerivation = false}) const OnboardingStepNine({Key? key, this.scanDerivation = false})
: super(key: key); : super(key: key);
final bool scanDerivation; final bool scanDerivation;

View File

@ -1,5 +1,6 @@
// ignore_for_file: must_be_immutable // ignore_for_file: must_be_immutable
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
@ -7,7 +8,7 @@ import 'package:qr_flutter/qr_flutter.dart';
// import 'package:gecko/models/home.dart'; // import 'package:gecko/models/home.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart'; // import 'package:flutter_riverpod/flutter_riverpod.dart';
class QrCodeFullscreen extends StatelessWidget { class QrCodeFullscreen extends ConsumerWidget {
TextEditingController tplController = TextEditingController(); TextEditingController tplController = TextEditingController();
QrCodeFullscreen(this.address, {this.color, Key? key}) : super(key: key); QrCodeFullscreen(this.address, {this.color, Key? key}) : super(key: key);

View File

@ -10,7 +10,7 @@ import 'package:gecko/widgets/bottom_app_bar.dart';
import 'package:gecko/widgets/search_result_list.dart'; import 'package:gecko/widgets/search_result_list.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class SearchResultScreen extends StatelessWidget { class SearchResultScreen extends ConsumerWidget {
const SearchResultScreen({Key? key}) : super(key: key); const SearchResultScreen({Key? key}) : super(key: key);
@override @override

View File

@ -11,13 +11,13 @@ import 'package:gecko/globals.dart';
import 'package:polkawallet_sdk/api/types/networkParams.dart'; import 'package:polkawallet_sdk/api/types/networkParams.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class SettingsScreen extends StatelessWidget { class SettingsScreen extends ConsumerWidget {
final MyWalletsProvider _myWallets = MyWalletsProvider(); final MyWalletsProvider _myWallets = MyWalletsProvider();
SettingsScreen({Key? key}) : super(key: key); SettingsScreen({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
const double buttonHigh = 50; const double buttonHigh = 50;
const double buttonWidth = 240; const double buttonWidth = 240;
const double fontSize = 16; const double fontSize = 16;
@ -77,9 +77,10 @@ class SettingsScreen extends StatelessWidget {
); );
} }
Widget chooseCurrencyUnit(BuildContext context) { Widget chooseCurrencyUnit(BuildContext context, WidgetRef ref) {
HomeProvider homeProvider = // HomeProvider homeProvider =
Provider.of<HomeProvider>(context, listen: false); // Provider.of<HomeProvider>(context, listen: false);
final homeProviderR = ref.read(myWalletsProvider);
return InkWell( return InkWell(
key: keyUdUnit, key: keyUdUnit,
onTap: () async { onTap: () async {

View File

@ -1,11 +1,12 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
class TemplateScreen extends StatelessWidget { class TemplateScreen extends ConsumerWidget {
const TemplateScreen({Key? key}) : super(key: key); const TemplateScreen({Key? key}) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
// final _homeProvider = Provider.of<HomeProvider>(context); // final _homeProvider = Provider.of<HomeProvider>(context);
return Scaffold( return Scaffold(

View File

@ -10,7 +10,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
// import 'package:gecko/models/home.dart'; // import 'package:gecko/models/home.dart';
// import 'package:flutter_riverpod/flutter_riverpod.dart'; // import 'package:flutter_riverpod/flutter_riverpod.dart';
class TransactionInProgress extends StatelessWidget { class TransactionInProgress extends ConsumerWidget {
const TransactionInProgress( const TransactionInProgress(
{Key? key, this.transType = 'pay', this.fromAddress, this.toAddress}) {Key? key, this.transType = 'pay', this.fromAddress, this.toAddress})
: super(key: key); : super(key: key);

View File

@ -27,7 +27,7 @@ import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:qr_flutter/qr_flutter.dart'; import 'package:qr_flutter/qr_flutter.dart';
class WalletViewScreen extends StatelessWidget { class WalletViewScreen extends ConsumerWidget {
const WalletViewScreen( const WalletViewScreen(
{required this.address, required this.username, this.avatar, Key? key}) {required this.address, required this.username, this.avatar, Key? key})
: super(key: key); : super(key: key);

View File

@ -5,7 +5,7 @@ import 'package:gecko/providers/wallet_options.dart';
import 'package:gecko/widgets/ud_unit_display.dart'; import 'package:gecko/widgets/ud_unit_display.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class Balance extends StatelessWidget { class Balance extends ConsumerWidget {
const Balance( const Balance(
{Key? key, {Key? key,
required this.address, required this.address,
@ -20,8 +20,9 @@ class Balance extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final walletOptions = final walletOptionsR =
Provider.of<WalletOptionsProvider>(context, listen: false); Provider.of<WalletOptionsProvider>(context, listen: false);
final homeProviderR = ref.read(myWalletsProvider);
return Column(children: <Widget>[ return Column(children: <Widget>[
Consumer<SubstrateSdk>(builder: (context, sdk, _) { Consumer<SubstrateSdk>(builder: (context, sdk, _) {
return FutureBuilder( return FutureBuilder(
@ -30,10 +31,10 @@ class Balance extends StatelessWidget {
AsyncSnapshot<Map<String, double>> globalBalance) { AsyncSnapshot<Map<String, double>> globalBalance) {
if (globalBalance.connectionState != ConnectionState.done || if (globalBalance.connectionState != ConnectionState.done ||
globalBalance.hasError) { globalBalance.hasError) {
if (walletOptions.balanceCache[address] != null && if (walletOptionsR.balanceCache[address] != null &&
walletOptions.balanceCache[address] != -1) { walletOptionsR.balanceCache[address] != -1) {
return Row(children: [ return Row(children: [
Text(walletOptions.balanceCache[address]!.toString(), Text(walletOptionsR.balanceCache[address]!.toString(),
style: TextStyle( style: TextStyle(
fontSize: isTall ? size : size * 0.9, fontSize: isTall ? size : size * 0.9,
color: color)), color: color)),
@ -51,12 +52,12 @@ class Balance extends StatelessWidget {
); );
} }
} }
walletOptions.balanceCache[address] = walletOptionsR.balanceCache[address] =
globalBalance.data!['transferableBalance']!; globalBalance.data!['transferableBalance']!;
if (walletOptions.balanceCache[address] != -1) { if (walletOptionsR.balanceCache[address] != -1) {
return Row(children: [ return Row(children: [
Text( Text(
walletOptions.balanceCache[address]!.toString(), walletOptionsR.balanceCache[address]!.toString(),
style: TextStyle( style: TextStyle(
fontSize: isTall ? size : size * 0.9, fontSize: isTall ? size : size * 0.9,
color: color, color: color,

View File

@ -12,7 +12,7 @@ import 'package:gecko/screens/myWallets/wallets_home.dart';
import 'package:gecko/screens/search.dart'; import 'package:gecko/screens/search.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class GeckoBottomAppBar extends StatelessWidget { class GeckoBottomAppBar extends ConsumerWidget {
const GeckoBottomAppBar({Key? key, this.actualRoute = ''}) : super(key: key); const GeckoBottomAppBar({Key? key, this.actualRoute = ''}) : super(key: key);
final String actualRoute; final String actualRoute;

View File

@ -5,7 +5,7 @@ import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
class CertTile extends StatelessWidget { class CertTile extends ConsumerWidget {
const CertTile({ const CertTile({
Key? key, Key? key,
required this.listCerts, required this.listCerts,

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class Certifications extends StatelessWidget { class Certifications extends ConsumerWidget {
const Certifications( const Certifications(
{Key? key, {Key? key,
required this.address, required this.address,

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class CertsCounter extends StatelessWidget { class CertsCounter extends ConsumerWidget {
const CertsCounter({Key? key, required this.address, this.isSent = false}) const CertsCounter({Key? key, required this.address, this.isSent = false})
: super(key: key); : super(key: key);
final String address; final String address;

View File

@ -1,12 +1,13 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/widgets/cert_tile.dart'; import 'package:gecko/widgets/cert_tile.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
class CertsReceived extends StatelessWidget { class CertsReceived extends ConsumerWidget {
const CertsReceived({Key? key, required this.address}) : super(key: key); const CertsReceived({Key? key, required this.address}) : super(key: key);
final String address; final String address;

View File

@ -1,12 +1,13 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/queries_indexer.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/widgets/cert_tile.dart'; import 'package:gecko/widgets/cert_tile.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
class CertsSent extends StatelessWidget { class CertsSent extends ConsumerWidget {
const CertsSent({Key? key, required this.address}) : super(key: key); const CertsSent({Key? key, required this.address}) : super(key: key);
final String address; final String address;

View File

@ -12,7 +12,7 @@ import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/name_by_address.dart'; import 'package:gecko/widgets/name_by_address.dart';
class ContactsList extends StatelessWidget { class ContactsList extends ConsumerWidget {
const ContactsList({ const ContactsList({
Key? key, Key? key,
required this.myContacts, required this.myContacts,

View File

@ -15,7 +15,7 @@ import 'package:gecko/widgets/idty_status.dart';
import 'package:gecko/widgets/page_route_no_transition.dart'; import 'package:gecko/widgets/page_route_no_transition.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class HeaderProfile extends StatelessWidget { class HeaderProfile extends ConsumerWidget {
const HeaderProfile({ const HeaderProfile({
Key? key, Key? key,
required this.address, required this.address,

View File

@ -7,7 +7,7 @@ import 'package:gecko/widgets/animated_text.dart';
import 'package:gecko/widgets/name_by_address.dart'; import 'package:gecko/widgets/name_by_address.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class IdentityStatus extends StatelessWidget { class IdentityStatus extends ConsumerWidget {
const IdentityStatus( const IdentityStatus(
{Key? key, {Key? key,
required this.address, required this.address,

View File

@ -9,7 +9,7 @@ import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:truncate/truncate.dart'; import 'package:truncate/truncate.dart';
class NameByAddress extends StatelessWidget { class NameByAddress extends ConsumerWidget {
const NameByAddress( const NameByAddress(
{Key? key, {Key? key,
required this.wallet, required this.wallet,

View File

@ -13,7 +13,7 @@ import 'package:gecko/widgets/balance.dart';
import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class SearchIdentityQuery extends StatelessWidget { class SearchIdentityQuery extends ConsumerWidget {
const SearchIdentityQuery({Key? key, required this.name}) : super(key: key); const SearchIdentityQuery({Key? key, required this.name}) : super(key: key);
final String name; final String name;

View File

@ -13,7 +13,7 @@ import 'package:gecko/widgets/balance.dart';
import 'package:gecko/widgets/name_by_address.dart'; import 'package:gecko/widgets/name_by_address.dart';
import 'package:gecko/widgets/search_identity_query.dart'; import 'package:gecko/widgets/search_identity_query.dart';
class SearchResult extends StatelessWidget { class SearchResult extends ConsumerWidget {
const SearchResult({ const SearchResult({
Key? key, Key? key,
required this.searchProvider, required this.searchProvider,

View File

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
class TemplateWidget extends StatelessWidget { class TemplateWidget extends ConsumerWidget {
const TemplateWidget( const TemplateWidget(
{Key? key, required this.address, this.color = Colors.black}) {Key? key, required this.address, this.color = Colors.black})
: super(key: key); : super(key: key);

View File

@ -1,36 +1,34 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/cesium_plus.dart';
import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/duniter_indexer.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
import 'package:gecko/screens/activity.dart';
import 'package:gecko/screens/wallet_view.dart'; import 'package:gecko/screens/wallet_view.dart';
import 'package:gecko/widgets/page_route_no_transition.dart'; import 'package:gecko/widgets/page_route_no_transition.dart';
class TransactionTile extends StatelessWidget { class TransactionTile extends ConsumerWidget {
const TransactionTile({ const TransactionTile({
Key? key, Key? key,
required this.widget, required this.username,
required this.keyID, required this.keyID,
required this.avatarSize, required this.avatarSize,
required this.repository, required this.repository,
required this.dateForm, required this.dateForm,
required this.finalAmount, required this.finalAmount,
required this.duniterIndexer, required this.duniterIndexer,
required this.context,
}) : super(key: key); }) : super(key: key);
final ActivityScreen widget; final String username;
final int keyID; final int keyID;
final double avatarSize; final double avatarSize;
final List repository; final List repository;
final String dateForm; final String dateForm;
final String finalAmount; final String finalAmount;
final DuniterIndexer duniterIndexer; final DuniterIndexer duniterIndexer;
final BuildContext context;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context, WidgetRef ref) {
final newKey = keyID + 1; final newKey = keyID + 1;
return Padding( return Padding(
padding: const EdgeInsets.only(right: 0), padding: const EdgeInsets.only(right: 0),
@ -85,7 +83,7 @@ class TransactionTile extends StatelessWidget {
PageNoTransit(builder: (context) { PageNoTransit(builder: (context) {
return WalletViewScreen( return WalletViewScreen(
address: repository[1], address: repository[1],
username: widget.username ?? '', username: username,
); );
}), }),
); );

View File

@ -2,7 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
class UdUnitDisplay extends StatelessWidget { class UdUnitDisplay extends ConsumerWidget {
const UdUnitDisplay({ const UdUnitDisplay({
Key? key, Key? key,
required this.size, required this.size,

View File

@ -3,7 +3,7 @@ import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/models/wallet_data.dart';
import 'package:truncate/truncate.dart'; import 'package:truncate/truncate.dart';
class WalletName extends StatelessWidget { class WalletName extends ConsumerWidget {
const WalletName( const WalletName(
{Key? key, {Key? key,
required this.wallet, required this.wallet,