// ignore_for_file: use_build_context_synchronously import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/widgets_keys.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/home.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:flutter/material.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:gecko/widgets/bubble_speak.dart'; import 'package:gecko/widgets/commons/animated_text.dart'; import 'package:gecko/widgets/commons/common_elements.dart'; import 'package:gecko/screens/myWallets/restore_chest.dart'; import 'package:gecko/screens/onBoarding/1.dart'; import 'package:gecko/widgets/drawer.dart'; import 'package:gecko/widgets/buttons/home_buttons.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:provider/provider.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({Key? key}) : super(key: key); @override State createState() => _HomeScreenState(); } class _HomeScreenState extends State { @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) async { final homeProviderInit = Provider.of(context, listen: false); final sub = Provider.of(context, listen: false); final duniterIndexer = Provider.of(context, listen: false); final myWalletProvider = Provider.of(context, listen: false); final csProvider = Provider.of(context, listen: false); final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); // Check if versionData non compatible, drop everything if (configBox.get('dataVersion') == null) { configBox.put('dataVersion', dataVersion); } if (isWalletsExists && (configBox.get('dataVersion')) < dataVersion) { if (!sub.sdkReady && !sub.sdkLoading) sub.initApi(); await infoPopup(context, "chestNotCompatibleMustReinstallGecko".tr()); await Hive.deleteBoxFromDisk('walletBox'); await Hive.deleteBoxFromDisk('chestBox'); chestBox = await Hive.openBox("chestBox"); await configBox.delete('defaultWallet'); if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi(); await sub.deleteAllAccounts(); configBox.put('dataVersion', dataVersion); myWalletProvider.reload(); } else { if (!sub.sdkReady && !sub.sdkLoading) await sub.initApi(); } if (sub.sdkReady && !sub.nodeConnected) { walletBox = await Hive.openBox("walletBox"); await Hive.deleteBoxFromDisk('g1WalletsBox'); await csProvider.deleteAvatarFolder(); g1WalletsBox = await Hive.openBox("g1WalletsBox"); contactsBox = await Hive.openBox("contactsBox"); homeProviderInit.isWalletBoxInit = true; myWalletProvider.reload(); duniterIndexer.getValidIndexerEndpoint(); await homeProviderInit.getValidEndpoints(); if (configBox.get('isCacheChecked') == null) { configBox.put('isCacheChecked', false); } HomeProvider homeProvider = Provider.of(context, listen: false); Connectivity() .onConnectivityChanged .listen((ConnectivityResult result) async { log.d('Network changed: $result'); if (result == ConnectivityResult.none) { sub.nodeConnected = false; await sub.sdk.api.setting.unsubscribeBestNumber(); homeProvider.changeMessage("notConnectedToInternet".tr(), 0); sub.reload(); } else { // Check if the phone is actually connected to the internet var connectivityResult = await (Connectivity().checkConnectivity()); if (connectivityResult != ConnectivityResult.none) { await sub.connectNode(context); } } }); } // _duniterIndexer.checkIndexerEndpointBackground(); }); super.initState(); } @override Widget build(BuildContext context) { homeContext = context; final myWalletProvider = Provider.of(context); Provider.of(context); final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); return Scaffold( resizeToAvoidBottomInset: false, drawer: MainDrawer(isWalletsExists: isWalletsExists), backgroundColor: yellowC, body: isWalletsExists ? geckHome(context) : welcomeHome(context)); } } Widget geckHome(context) { Provider.of(context); final statusBarHeight = MediaQuery.of(context).padding.top; return Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage("assets/home/background.jpg"), fit: BoxFit.cover, ), ), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack(children: [ Positioned( top: statusBarHeight + 10, left: 15, child: Builder( builder: (context) => IconButton( key: keyDrawerMenu, icon: const Icon( Icons.menu, color: Colors.black, size: 35, ), onPressed: () => Scaffold.of(context).openDrawer(), ), ), ), const Align( child: Image(image: AssetImage('assets/home/header.png'), height: 170), ), ]), Padding( padding: const EdgeInsets.only(top: 15), child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ DefaultTextStyle( textAlign: TextAlign.center, style: const TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.w700, shadows: [ Shadow( offset: Offset(0, 0), blurRadius: 20, color: Colors.black, ), Shadow( offset: Offset(0, 0), blurRadius: 20, color: Colors.black, ), ], ), child: Consumer(builder: (context, homeP, _) { return AnimatedFadeOutIn( data: homeP.homeMessage, duration: const Duration(milliseconds: 100), builder: (value) => Text(value), ); }), ), ]), ), const SizedBox(height: 15), Expanded( flex: 1, child: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Colors.transparent, Colors.black.withOpacity(0.9), ], ), ), child: const HomeButtons(), ), ) ]), ); } Widget welcomeHome(context) { final statusBarHeight = MediaQuery.of(context).padding.top; return Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage("assets/home/background.jpg"), fit: BoxFit.cover, ), ), child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ Stack(children: [ Positioned( top: statusBarHeight + 10, left: 15, child: Builder( builder: (context) => IconButton( key: keyDrawerMenu, icon: const Icon( Icons.menu, color: Colors.white, size: 35, ), onPressed: () => Scaffold.of(context).openDrawer(), ), ), ), const Align( child: Image(image: AssetImage('assets/home/header.png'), height: 170), ), ]), Padding( padding: const EdgeInsets.only(top: 1), child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "fastAppDescription".tr(args: [currencyName]), textAlign: TextAlign.center, style: const TextStyle( color: Colors.white, fontSize: 20, fontWeight: FontWeight.w700, shadows: [ Shadow( offset: Offset(0, 0), blurRadius: 20, color: Colors.black, ), Shadow( offset: Offset(0, 0), blurRadius: 20, color: Colors.black, ), ], ), ) ]), ), Expanded( flex: 1, child: Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Colors.transparent, Colors.black.withOpacity(0.9), ], ), ), child: Center( child: ConstrainedBox( constraints: const BoxConstraints(maxWidth: 480), child: Column(children: [ const Spacer(flex: 4), Row(children: [ Expanded( child: Stack(children: [ const Padding( padding: EdgeInsets.only(top: 55), child: Image( image: AssetImage('assets/home/gecko-bienvenue.png'), height: 180, ), ), Positioned( left: 160, top: 10, child: BubbleSpeak(text: "noLizard".tr()), ), const Positioned( left: 180, top: 70, child: Image( image: AssetImage('assets/home/bout_de_bulle.png'), ), ), ]), ), ]), SizedBox( width: 335, height: 60, child: ElevatedButton( key: keyOnboardingNewChest, style: ElevatedButton.styleFrom( foregroundColor: Colors.white, elevation: 4, backgroundColor: orangeC, // foreground ), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) { return const OnboardingStepOne(); }, ), ); }, child: Text( 'createWallet'.tr(), style: const TextStyle( fontSize: 21, fontWeight: FontWeight.w600), ), ), ), const SizedBox(height: 25), SizedBox( width: 335, height: 60, child: OutlinedButton( key: keyRestoreChest, style: OutlinedButton.styleFrom( side: const BorderSide(width: 4, color: orangeC)), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) { return const RestoreChest(); }, ), ); }, child: Text( "restoreWallet".tr(), style: const TextStyle( fontSize: 21, color: orangeC, fontWeight: FontWeight.w600), ), ), ), // const SizedBox(height: 80) const Spacer(flex: 3), ]), ), ), ), ) ]), ); }