gecko/lib/widgets/bottom_app_bar.dart

124 lines
4.2 KiB
Dart

// ignore_for_file: use_build_context_synchronously
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:gecko/globals.dart';
import 'package:gecko/models/scale_functions.dart';
import 'package:gecko/models/widgets_keys.dart';
import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/search.dart';
import 'package:gecko/providers/wallets_profiles.dart';
import 'package:provider/provider.dart';
class GeckoBottomAppBar extends StatelessWidget {
const GeckoBottomAppBar({Key? key, this.actualRoute = ''}) : super(key: key);
final String actualRoute;
@override
Widget build(BuildContext context) {
final myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
final historyProvider =
Provider.of<WalletsProfilesProvider>(context, listen: false);
final searchProvider = Provider.of<SearchProvider>(context, listen: false);
final size = MediaQuery.of(context).size;
const bool showBottomBar = true;
final lockAction = actualRoute == 'safeHome';
return Visibility(
visible: showBottomBar,
child: Container(
color: yellowC,
width: size.width,
height: scaleSize(67),
child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
const Spacer(),
ScaledSizedBox(width: 11),
IconButton(
key: keyAppBarHome,
iconSize: scaleSize(53),
icon: const Icon(Icons.home_outlined),
onPressed: () {
searchProvider.reload();
Navigator.popUntil(
context,
ModalRoute.withName('/'),
);
},
),
ScaledSizedBox(width: 12),
const Spacer(),
IconButton(
key: keyAppBarQrcode,
icon: const Image(image: AssetImage('assets/qrcode-scan.png')),
onPressed: () async {
historyProvider.scan(homeContext);
},
),
const Spacer(),
ScaledSizedBox(width: 15),
Stack(
alignment: AlignmentDirectional.center,
children: [
if (lockAction)
Center(
child: Padding(
padding: const EdgeInsets.only(left: 0),
child: Container(
width: scaleSize(75),
height: scaleSize(75),
decoration: BoxDecoration(
shape: BoxShape.circle,
border:
Border.all(color: orangeC.withOpacity(0), width: 3),
gradient: RadialGradient(
radius: 0.5,
colors: [
yellowC,
orangeC.withOpacity(0.1),
],
),
),
),
),
),
ScaledSizedBox(
height: 53,
child: IconButton(
key: keyAppBarChest,
icon: const Image(image: AssetImage('assets/wallet.png')),
onPressed: lockAction
? null
: () async {
if (!await myWalletProvider.askPinCode()) return;
Navigator.popUntil(context, ModalRoute.withName('/'));
//FIXME: Should not have to wait 300 milliseconds when /mywallets exist in navigator...
sleep(const Duration(milliseconds: 300));
Navigator.pushNamed(context, '/mywallets');
// Navigator.pushNamedAndRemoveUntil(
// context, '/mywallets', ModalRoute.withName('/'));
},
),
),
],
),
const Spacer(),
]),
),
);
}
}
bool isRoutePresentInNavigator(BuildContext context, String routeName) {
bool isPresent = false;
Navigator.popUntil(context, (route) {
if (route.settings.name == routeName) {
isPresent = true;
}
return true;
});
return isPresent;
}