Check network state, try to reconnect if network up, display message if offline
This commit is contained in:
parent
29505ad1be
commit
7c11146278
|
@ -27,7 +27,7 @@ class HomeProvider with ChangeNotifier {
|
||||||
Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
|
Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850]));
|
||||||
Widget appBarExplorer =
|
Widget appBarExplorer =
|
||||||
Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
|
Text('Explorateur', style: TextStyle(color: Colors.grey[850]));
|
||||||
String homeMessage = "y'a pas de lézard ;-)";
|
String homeMessage = "Chargement en cours ...";
|
||||||
String defaultMessage = "y'a pas de lézard ;-)";
|
String defaultMessage = "y'a pas de lézard ;-)";
|
||||||
|
|
||||||
Future<void> initHive() async {
|
Future<void> initHive() async {
|
||||||
|
|
|
@ -50,6 +50,12 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
List<NetworkParams> node = [];
|
List<NetworkParams> node = [];
|
||||||
HomeProvider _homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
|
HomeProvider _homeProvider = Provider.of<HomeProvider>(ctx, listen: false);
|
||||||
|
|
||||||
|
// var connectivityResult = await (Connectivity().checkConnectivity());
|
||||||
|
// if (connectivityResult == ConnectivityResult.mobile ||
|
||||||
|
// connectivityResult == ConnectivityResult.wifi) {
|
||||||
|
// _homeProvider.changeMessage("Vous n'êtes pas connecté à internet", 0);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
_homeProvider.changeMessage("Connexion en cours...", 0);
|
_homeProvider.changeMessage("Connexion en cours...", 0);
|
||||||
|
|
||||||
for (String _endpoint in configBox.get('endpoint')) {
|
for (String _endpoint in configBox.get('endpoint')) {
|
||||||
|
@ -100,12 +106,17 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
// Subscribe bloc number
|
// Subscribe bloc number
|
||||||
sdk.api.setting.subscribeBestNumber((res) {
|
sdk.api.setting.subscribeBestNumber((res) {
|
||||||
blocNumber = int.parse(res.toString());
|
blocNumber = int.parse(res.toString());
|
||||||
|
// log.d(sdk.api.connectedNode?.endpoint);
|
||||||
if (sdk.api.connectedNode?.endpoint == null) {
|
if (sdk.api.connectedNode?.endpoint == null) {
|
||||||
|
nodeConnected = false;
|
||||||
_homeProvider.changeMessage("Le réseau a été perdu...", 0);
|
_homeProvider.changeMessage("Le réseau a été perdu...", 0);
|
||||||
|
} else {
|
||||||
|
nodeConnected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
});
|
});
|
||||||
|
|
||||||
// currencyName = await getCurencyName();
|
// currencyName = await getCurencyName();
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
_homeProvider.changeMessage(
|
_homeProvider.changeMessage(
|
||||||
|
@ -250,9 +261,12 @@ class SubstrateSdk with ChangeNotifier {
|
||||||
|
|
||||||
Future<double> getBalance(String address, {bool isUd = false}) async {
|
Future<double> getBalance(String address, {bool isUd = false}) async {
|
||||||
double balance = 0.0;
|
double balance = 0.0;
|
||||||
|
// log.d('nodeConnected: ' + nodeConnected.toString());
|
||||||
if (nodeConnected) {
|
if (nodeConnected) {
|
||||||
final brutBalance = await sdk.api.account.queryBalance(address);
|
final brutBalance = await sdk.api.account.queryBalance(address);
|
||||||
balance = int.parse(brutBalance!.freeBalance) / 100;
|
balance = int.parse(brutBalance!.freeBalance) / 100;
|
||||||
|
} else {
|
||||||
|
balance = -1;
|
||||||
}
|
}
|
||||||
return balance;
|
return balance;
|
||||||
}
|
}
|
||||||
|
|
|
@ -318,7 +318,8 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
Map<String, double> balanceCache = {};
|
Map<String, double> balanceCache = {};
|
||||||
|
|
||||||
Widget balance(BuildContext context, String address, double size,
|
Widget balance(BuildContext context, String address, double size,
|
||||||
[Color _color = Colors.black]) {
|
[Color _color = Colors.black,
|
||||||
|
Color _loadingColor = const Color(0xffd07316)]) {
|
||||||
return Column(children: <Widget>[
|
return Column(children: <Widget>[
|
||||||
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
|
Consumer<SubstrateSdk>(builder: (context, _sdk, _) {
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
|
@ -326,7 +327,8 @@ Widget balance(BuildContext context, String address, double size,
|
||||||
builder: (BuildContext context, AsyncSnapshot<double> _balance) {
|
builder: (BuildContext context, AsyncSnapshot<double> _balance) {
|
||||||
if (_balance.connectionState != ConnectionState.done ||
|
if (_balance.connectionState != ConnectionState.done ||
|
||||||
_balance.hasError) {
|
_balance.hasError) {
|
||||||
if (balanceCache[address] != null) {
|
if (balanceCache[address] != null &&
|
||||||
|
balanceCache[address] != -1) {
|
||||||
return Text(
|
return Text(
|
||||||
"${balanceCache[address]!.toString()} $currencyName",
|
"${balanceCache[address]!.toString()} $currencyName",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
@ -336,20 +338,24 @@ Widget balance(BuildContext context, String address, double size,
|
||||||
height: 15,
|
height: 15,
|
||||||
width: 15,
|
width: 15,
|
||||||
child: CircularProgressIndicator(
|
child: CircularProgressIndicator(
|
||||||
color: orangeC,
|
color: _loadingColor,
|
||||||
strokeWidth: 2,
|
strokeWidth: 2,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
balanceCache[address] = _balance.data!;
|
balanceCache[address] = _balance.data!;
|
||||||
return Text(
|
if (balanceCache[address] != -1) {
|
||||||
"${balanceCache[address]!.toString()} $currencyName",
|
return Text(
|
||||||
style: TextStyle(
|
"${balanceCache[address]!.toString()} $currencyName",
|
||||||
fontSize: isTall ? size : size * 0.9,
|
style: TextStyle(
|
||||||
color: _color,
|
fontSize: isTall ? size : size * 0.9,
|
||||||
),
|
color: _color,
|
||||||
);
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const Text('');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
@ -362,9 +368,9 @@ Widget getCerts(BuildContext context, String address, double size,
|
||||||
return FutureBuilder(
|
return FutureBuilder(
|
||||||
future: _sdk.getCerts(address),
|
future: _sdk.getCerts(address),
|
||||||
builder: (BuildContext context, AsyncSnapshot<List<int>> _certs) {
|
builder: (BuildContext context, AsyncSnapshot<List<int>> _certs) {
|
||||||
// log.d(_certs.data);
|
log.d(_certs.data);
|
||||||
|
|
||||||
return _certs.data?[0] != 0
|
return _certs.data?[0] != 0 && _certs.data != null
|
||||||
? Row(
|
? Row(
|
||||||
children: [
|
children: [
|
||||||
Image.asset('assets/medal.png', height: 20),
|
Image.asset('assets/medal.png', height: 20),
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import 'package:dots_indicator/dots_indicator.dart';
|
import 'package:dots_indicator/dots_indicator.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class CommonElements {
|
class CommonElements {
|
||||||
// Exemple de Widget
|
// Exemple de Widget
|
||||||
|
@ -145,6 +147,33 @@ class CommonElements {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget offlineInfo(BuildContext context) {
|
||||||
|
// SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
final double screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
return Consumer<SubstrateSdk>(builder: (context, _sub, _) {
|
||||||
|
return Visibility(
|
||||||
|
visible: !_sub.nodeConnected,
|
||||||
|
child: Positioned(
|
||||||
|
top: 0,
|
||||||
|
child: Container(
|
||||||
|
height: 30,
|
||||||
|
width: screenWidth,
|
||||||
|
color: Colors.grey[800],
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Vous êtes hors ligne...",
|
||||||
|
style: TextStyle(color: Colors.grey[50]),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SmoothTransition extends PageRouteBuilder {
|
class SmoothTransition extends PageRouteBuilder {
|
||||||
|
@ -277,6 +306,7 @@ Future<void> infoPopup(BuildContext context, String title) async {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Widget geckoAppBar() {
|
// Widget geckoAppBar() {
|
||||||
// return AppBar(
|
// return AppBar(
|
||||||
// toolbarHeight: 60 * ratio,
|
// toolbarHeight: 60 * ratio,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:bubble/bubble.dart';
|
import 'package:bubble/bubble.dart';
|
||||||
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/stateful_wrapper.dart';
|
import 'package:gecko/models/stateful_wrapper.dart';
|
||||||
import 'package:gecko/providers/chest_provider.dart';
|
import 'package:gecko/providers/chest_provider.dart';
|
||||||
|
@ -118,7 +119,24 @@ class HomeScreen extends StatelessWidget {
|
||||||
_myWalletProvider.rebuildWidget();
|
_myWalletProvider.rebuildWidget();
|
||||||
}
|
}
|
||||||
|
|
||||||
await _sub.connectNode(ctx); //kopa
|
var connectivityResult =
|
||||||
|
await (Connectivity().checkConnectivity());
|
||||||
|
if (connectivityResult != ConnectivityResult.mobile &&
|
||||||
|
connectivityResult != ConnectivityResult.wifi) {
|
||||||
|
HomeProvider _homeProvider =
|
||||||
|
Provider.of<HomeProvider>(ctx, listen: false);
|
||||||
|
_homeProvider.changeMessage(
|
||||||
|
"Vous n'êtes pas connecté à internet", 0);
|
||||||
|
_sub.nodeConnected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Connectivity()
|
||||||
|
.onConnectivityChanged
|
||||||
|
.listen((ConnectivityResult result) async {
|
||||||
|
log.d('Network changed: $result');
|
||||||
|
|
||||||
|
await _sub.connectNode(ctx);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,6 +20,7 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
WalletData? wallet;
|
WalletData? wallet;
|
||||||
late int currentChestNumber;
|
late int currentChestNumber;
|
||||||
late ChestData currentChest;
|
late ChestData currentChest;
|
||||||
|
bool canUnlock = true;
|
||||||
|
|
||||||
// ignore: close_sinks
|
// ignore: close_sinks
|
||||||
StreamController<ErrorAnimationType>? errorController;
|
StreamController<ErrorAnimationType>? errorController;
|
||||||
|
@ -101,52 +102,54 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
SizedBox(height: 40 * ratio),
|
SizedBox(height: 40 * ratio),
|
||||||
pinForm(context, _pinLenght),
|
pinForm(context, _pinLenght),
|
||||||
SizedBox(height: 3 * ratio),
|
SizedBox(height: 3 * ratio),
|
||||||
InkWell(
|
if (canUnlock)
|
||||||
onTap: () {
|
InkWell(
|
||||||
_walletOptions.changePinCacheChoice();
|
|
||||||
},
|
|
||||||
child: Row(children: [
|
|
||||||
const SizedBox(height: 30),
|
|
||||||
const Spacer(),
|
|
||||||
Icon(
|
|
||||||
configBox.get('isCacheChecked')
|
|
||||||
? Icons.check_box
|
|
||||||
: Icons.check_box_outline_blank,
|
|
||||||
color: orangeC,
|
|
||||||
),
|
|
||||||
const SizedBox(width: 8),
|
|
||||||
Text(
|
|
||||||
'Garder ce code en mémoire 15 minutes',
|
|
||||||
style:
|
|
||||||
TextStyle(fontSize: 16, color: Colors.grey[700]),
|
|
||||||
),
|
|
||||||
const Spacer()
|
|
||||||
]),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 10),
|
|
||||||
InkWell(
|
|
||||||
key: const Key('chooseChest'),
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navigator.push(
|
_walletOptions.changePinCacheChoice();
|
||||||
context,
|
|
||||||
MaterialPageRoute(builder: (context) {
|
|
||||||
return const ChooseChest();
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
child: SizedBox(
|
child: Row(children: [
|
||||||
width: 400,
|
const SizedBox(height: 30),
|
||||||
height: 50,
|
const Spacer(),
|
||||||
child: Center(
|
Icon(
|
||||||
child: Text(
|
configBox.get('isCacheChecked')
|
||||||
'Changer de coffre',
|
? Icons.check_box
|
||||||
style: TextStyle(
|
: Icons.check_box_outline_blank,
|
||||||
fontSize: 22,
|
color: orangeC,
|
||||||
color: orangeC,
|
|
||||||
fontWeight: FontWeight.w600),
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
)),
|
const SizedBox(width: 8),
|
||||||
|
Text(
|
||||||
|
'Garder ce code en mémoire 15 minutes',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16, color: Colors.grey[700]),
|
||||||
|
),
|
||||||
|
const Spacer()
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 10),
|
||||||
|
if (canUnlock)
|
||||||
|
InkWell(
|
||||||
|
key: const Key('chooseChest'),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) {
|
||||||
|
return const ChooseChest();
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 400,
|
||||||
|
height: 50,
|
||||||
|
child: Center(
|
||||||
|
child: Text(
|
||||||
|
'Changer de coffre',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 22,
|
||||||
|
color: orangeC,
|
||||||
|
fontWeight: FontWeight.w600),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
|
@ -164,11 +167,21 @@ class UnlockingWallet extends StatelessWidget {
|
||||||
MyWalletsProvider _myWalletProvider =
|
MyWalletsProvider _myWalletProvider =
|
||||||
Provider.of<MyWalletsProvider>(context);
|
Provider.of<MyWalletsProvider>(context);
|
||||||
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
|
|
||||||
WalletData? defaultWallet = _myWalletProvider.getDefaultWallet();
|
|
||||||
|
|
||||||
FocusNode pinFocus = FocusNode();
|
FocusNode pinFocus = FocusNode();
|
||||||
|
|
||||||
|
WalletData defaultWallet = _myWalletProvider.getDefaultWallet();
|
||||||
|
|
||||||
|
// defaultWallet.address = null;
|
||||||
|
if (defaultWallet.address == null) {
|
||||||
|
canUnlock = false;
|
||||||
|
return Text(
|
||||||
|
'Impossible de retrouver votre\nportefeuille par défaut.\nID: ${defaultWallet.id()}',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: Colors.redAccent, fontWeight: FontWeight.w500),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Form(
|
return Form(
|
||||||
key: formKey,
|
key: formKey,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:gecko/models/wallet_data.dart';
|
||||||
import 'package:gecko/providers/substrate_sdk.dart';
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
import 'package:gecko/providers/wallet_options.dart';
|
import 'package:gecko/providers/wallet_options.dart';
|
||||||
import 'package:gecko/providers/wallets_profiles.dart';
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
|
import 'package:gecko/screens/common_elements.dart';
|
||||||
import 'package:gecko/screens/myWallets/manage_membership.dart';
|
import 'package:gecko/screens/myWallets/manage_membership.dart';
|
||||||
import 'package:gecko/screens/qrcode_fullscreen.dart';
|
import 'package:gecko/screens/qrcode_fullscreen.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
@ -70,122 +71,127 @@ class WalletOptions extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
||||||
body: Builder(
|
body: Stack(children: [
|
||||||
builder: (ctx) => SafeArea(
|
Builder(
|
||||||
child: Column(children: <Widget>[
|
builder: (ctx) => SafeArea(
|
||||||
Container(
|
child: Column(children: <Widget>[
|
||||||
height: isTall ? 5 : 0,
|
Container(
|
||||||
color: yellowC,
|
height: isTall ? 5 : 0,
|
||||||
),
|
color: yellowC,
|
||||||
Consumer<WalletOptionsProvider>(
|
|
||||||
builder: (context, walletProvider, _) {
|
|
||||||
return Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
gradient: LinearGradient(
|
|
||||||
begin: Alignment.topCenter,
|
|
||||||
end: Alignment.bottomCenter,
|
|
||||||
colors: [
|
|
||||||
yellowC,
|
|
||||||
backgroundColor,
|
|
||||||
],
|
|
||||||
)),
|
|
||||||
child: Row(
|
|
||||||
// mainAxisAlignment: MainAxisAlignment.end,
|
|
||||||
children: <Widget>[
|
|
||||||
const Spacer(flex: 1),
|
|
||||||
avatar(walletProvider),
|
|
||||||
const Spacer(flex: 1),
|
|
||||||
Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
walletName(walletProvider, _walletOptions),
|
|
||||||
SizedBox(height: isTall ? 5 : 0),
|
|
||||||
// SizedBox(height: isTall ? 5 : 0),
|
|
||||||
balance(context, walletProvider.address.text, 21),
|
|
||||||
const SizedBox(width: 30),
|
|
||||||
Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
_walletOptions.idtyStatus(
|
|
||||||
context, _walletOptions.address.text,
|
|
||||||
isOwner: true, color: orangeC),
|
|
||||||
getCerts(context,
|
|
||||||
walletProvider.address.text, 15),
|
|
||||||
]),
|
|
||||||
SizedBox(height: 10 * ratio),
|
|
||||||
]),
|
|
||||||
const Spacer(flex: 2),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
Expanded(
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
InkWell(
|
|
||||||
onTap: () {
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(builder: (context) {
|
|
||||||
return QrCodeFullscreen(
|
|
||||||
_walletOptions.address.text,
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
child: QrImageWidget(
|
|
||||||
data: _walletOptions.address.text,
|
|
||||||
version: QrVersions.auto,
|
|
||||||
size: isTall ? 150 : 80,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 15 * ratio),
|
|
||||||
Consumer<WalletOptionsProvider>(
|
|
||||||
builder: (context, walletProvider, _) {
|
|
||||||
return Column(children: [
|
|
||||||
pubkeyWidget(walletProvider, ctx),
|
|
||||||
SizedBox(height: 10 * ratio),
|
|
||||||
historyWidget(
|
|
||||||
context, _historyProvider, walletProvider),
|
|
||||||
SizedBox(height: 12 * ratio),
|
|
||||||
setDefaultWalletWidget(
|
|
||||||
context,
|
|
||||||
walletProvider,
|
|
||||||
_myWalletProvider,
|
|
||||||
_walletOptions,
|
|
||||||
_currentChest),
|
|
||||||
SizedBox(height: 17 * ratio),
|
|
||||||
// walletProvider.isMember(context, _walletOptions.address.text)
|
|
||||||
FutureBuilder(
|
|
||||||
future: walletProvider.isMember(
|
|
||||||
context, _walletOptions.address.text),
|
|
||||||
builder: (BuildContext context,
|
|
||||||
AsyncSnapshot<bool> _isMember) {
|
|
||||||
if (_isMember.connectionState !=
|
|
||||||
ConnectionState.done ||
|
|
||||||
_isMember.hasError) {
|
|
||||||
return const Text('');
|
|
||||||
}
|
|
||||||
return Column(children: [
|
|
||||||
if (!walletProvider.isDefaultWallet &&
|
|
||||||
!_isMember.data!)
|
|
||||||
deleteWallet(context, walletProvider,
|
|
||||||
_currentChest)
|
|
||||||
else
|
|
||||||
const SizedBox(),
|
|
||||||
if (_isMember.data!)
|
|
||||||
manageMemberStatus(context)
|
|
||||||
]);
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
}),
|
|
||||||
]),
|
|
||||||
),
|
),
|
||||||
),
|
Consumer<WalletOptionsProvider>(
|
||||||
]),
|
builder: (context, walletProvider, _) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
gradient: LinearGradient(
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
colors: [
|
||||||
|
yellowC,
|
||||||
|
backgroundColor,
|
||||||
|
],
|
||||||
|
)),
|
||||||
|
child: Row(
|
||||||
|
// mainAxisAlignment: MainAxisAlignment.end,
|
||||||
|
children: <Widget>[
|
||||||
|
const Spacer(flex: 1),
|
||||||
|
avatar(walletProvider),
|
||||||
|
const Spacer(flex: 1),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
walletName(walletProvider, _walletOptions),
|
||||||
|
SizedBox(height: isTall ? 5 : 0),
|
||||||
|
// SizedBox(height: isTall ? 5 : 0),
|
||||||
|
balance(
|
||||||
|
context, walletProvider.address.text, 21),
|
||||||
|
const SizedBox(width: 30),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment:
|
||||||
|
CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
_walletOptions.idtyStatus(
|
||||||
|
context, _walletOptions.address.text,
|
||||||
|
isOwner: true, color: orangeC),
|
||||||
|
getCerts(context,
|
||||||
|
walletProvider.address.text, 15),
|
||||||
|
]),
|
||||||
|
SizedBox(height: 10 * ratio),
|
||||||
|
]),
|
||||||
|
const Spacer(flex: 2),
|
||||||
|
]),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
Expanded(
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) {
|
||||||
|
return QrCodeFullscreen(
|
||||||
|
_walletOptions.address.text,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: QrImageWidget(
|
||||||
|
data: _walletOptions.address.text,
|
||||||
|
version: QrVersions.auto,
|
||||||
|
size: isTall ? 150 : 80,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 15 * ratio),
|
||||||
|
Consumer<WalletOptionsProvider>(
|
||||||
|
builder: (context, walletProvider, _) {
|
||||||
|
return Column(children: [
|
||||||
|
pubkeyWidget(walletProvider, ctx),
|
||||||
|
SizedBox(height: 10 * ratio),
|
||||||
|
historyWidget(
|
||||||
|
context, _historyProvider, walletProvider),
|
||||||
|
SizedBox(height: 12 * ratio),
|
||||||
|
setDefaultWalletWidget(
|
||||||
|
context,
|
||||||
|
walletProvider,
|
||||||
|
_myWalletProvider,
|
||||||
|
_walletOptions,
|
||||||
|
_currentChest),
|
||||||
|
SizedBox(height: 17 * ratio),
|
||||||
|
// walletProvider.isMember(context, _walletOptions.address.text)
|
||||||
|
FutureBuilder(
|
||||||
|
future: walletProvider.isMember(
|
||||||
|
context, _walletOptions.address.text),
|
||||||
|
builder: (BuildContext context,
|
||||||
|
AsyncSnapshot<bool> _isMember) {
|
||||||
|
if (_isMember.connectionState !=
|
||||||
|
ConnectionState.done ||
|
||||||
|
_isMember.hasError) {
|
||||||
|
return const Text('');
|
||||||
|
}
|
||||||
|
return Column(children: [
|
||||||
|
if (!walletProvider.isDefaultWallet &&
|
||||||
|
!_isMember.data!)
|
||||||
|
deleteWallet(context, walletProvider,
|
||||||
|
_currentChest)
|
||||||
|
else
|
||||||
|
const SizedBox(),
|
||||||
|
if (_isMember.data!)
|
||||||
|
manageMemberStatus(context)
|
||||||
|
]);
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
CommonElements().offlineInfo(context),
|
||||||
|
]),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -501,7 +507,7 @@ class WalletOptions extends StatelessWidget {
|
||||||
return const Text('');
|
return const Text('');
|
||||||
}
|
}
|
||||||
final double _balance =
|
final double _balance =
|
||||||
balanceCache[walletProvider.address.text] ?? 0;
|
balanceCache[walletProvider.address.text] ?? -1;
|
||||||
final bool canDelete = !isDefaultWallet &&
|
final bool canDelete = !isDefaultWallet &&
|
||||||
!_hasConsumers.data! &&
|
!_hasConsumers.data! &&
|
||||||
(_balance > 2 || _balance == 0);
|
(_balance > 2 || _balance == 0);
|
||||||
|
|
|
@ -61,7 +61,12 @@ class WalletsHome extends StatelessWidget {
|
||||||
),
|
),
|
||||||
bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: myWalletsTiles(context, _currentChestNumber!),
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
myWalletsTiles(context, _currentChestNumber!),
|
||||||
|
CommonElements().offlineInfo(context),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -322,7 +327,11 @@ class WalletsHome extends StatelessWidget {
|
||||||
// style: TextStyle(color: isDefault ? Colors.white : Colors.black),
|
// style: TextStyle(color: isDefault ? Colors.white : Colors.black),
|
||||||
// ),
|
// ),
|
||||||
balance(
|
balance(
|
||||||
context, _address, 15, isDefault ? Colors.white : Colors.black)
|
context,
|
||||||
|
_address,
|
||||||
|
15,
|
||||||
|
isDefault ? Colors.white : Colors.black,
|
||||||
|
isDefault ? yellowC : orangeC)
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -3,6 +3,7 @@ import 'package:gecko/globals.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// import 'package:gecko/providers/home.dart';
|
// import 'package:gecko/providers/home.dart';
|
||||||
import 'package:gecko/providers/search.dart';
|
import 'package:gecko/providers/search.dart';
|
||||||
|
import 'package:gecko/screens/common_elements.dart';
|
||||||
import 'package:gecko/screens/search_result.dart';
|
import 'package:gecko/screens/search_result.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
// import 'package:gecko/models/home.dart';
|
// import 'package:gecko/models/home.dart';
|
||||||
|
@ -44,6 +45,7 @@ class SearchScreen extends StatelessWidget {
|
||||||
// bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
// bottomNavigationBar: _homeProvider.bottomAppBar(context),
|
||||||
body: SafeArea(
|
body: SafeArea(
|
||||||
child: Column(children: <Widget>[
|
child: Column(children: <Widget>[
|
||||||
|
CommonElements().offlineInfo(context),
|
||||||
SizedBox(height: isTall ? 200 : 100),
|
SizedBox(height: isTall ? 200 : 100),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 17),
|
padding: const EdgeInsets.symmetric(horizontal: 17),
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
import 'package:gecko/providers/wallet_options.dart';
|
import 'package:gecko/providers/wallet_options.dart';
|
||||||
import 'package:gecko/providers/wallets_profiles.dart';
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
import 'package:gecko/providers/search.dart';
|
import 'package:gecko/providers/search.dart';
|
||||||
|
import 'package:gecko/screens/common_elements.dart';
|
||||||
import 'package:gecko/screens/wallet_view.dart';
|
import 'package:gecko/screens/wallet_view.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ class SearchResultScreen extends StatelessWidget {
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
|
CommonElements().offlineInfo(context),
|
||||||
const SizedBox(height: 30),
|
const SizedBox(height: 30),
|
||||||
RichText(
|
RichText(
|
||||||
text: TextSpan(
|
text: TextSpan(
|
||||||
|
|
|
@ -898,6 +898,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
]),
|
]),
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
CommonElements().offlineInfo(context),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,12 +205,12 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
connectivity_plus:
|
connectivity_plus:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: connectivity_plus
|
name: connectivity_plus
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.2"
|
version: "2.3.3"
|
||||||
connectivity_plus_linux:
|
connectivity_plus_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -224,7 +224,7 @@ packages:
|
||||||
name: connectivity_plus_macos
|
name: connectivity_plus_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.2"
|
version: "1.2.3"
|
||||||
connectivity_plus_platform_interface:
|
connectivity_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -245,7 +245,7 @@ packages:
|
||||||
name: connectivity_plus_windows
|
name: connectivity_plus_windows
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.2"
|
||||||
convert:
|
convert:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -70,6 +70,7 @@ dependencies:
|
||||||
ref: gecko-work
|
ref: gecko-work
|
||||||
dots_indicator: ^2.1.0
|
dots_indicator: ^2.1.0
|
||||||
web_socket_channel: ^2.2.0
|
web_socket_channel: ^2.2.0
|
||||||
|
connectivity_plus: ^2.3.3
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
# flutter_launcher_icons: ^0.9.2
|
# flutter_launcher_icons: ^0.9.2
|
||||||
|
|
Loading…
Reference in New Issue